Android/Java網絡加載架構Retrofit(一)初識
Retrofit是Square針對Android網絡I/O設計的一套架構。Square官方介紹Retrofit:“A type-safe HTTP client for Android and Java”。Retrofit 2底層基于OkHttp實作,OkHttp依然是Square針對網絡請求設計的一整套解決方案。Retrofit是基于Okhttp的一套RESTful http網絡請求架構封裝。Retrofit在github上的開源項目位址是:https://github.com/square/retrofit
給出一個Retrofit網絡加載簡例,該簡例實作一個簡單的功能,從一個網絡連結位址下載下傳一張圖檔設定到ImageView裡面。注意連結的拼接和注解使用。
上層Java代碼:
package zhangphil.http;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.ImageView;
import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.http.GET;
import retrofit2.http.Path;
public class MainActivity extends AppCompatActivity {
private Call<ResponseBody> mCall;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final ImageView imageView = (ImageView) findViewById(R.id.image);
Retrofit mRetrofit = new Retrofit.Builder()
.baseUrl("https://www.baidu.com/")
.build();
MyRetrofitService mRetrofitService = mRetrofit.create(MyRetrofitService.class);
mCall = mRetrofitService.getImagesByName("bd_logo1.png");
Log.d("請求的網絡連結", String.valueOf(mCall.request().url()));
mCall.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
try {
byte[] bytes = response.body().bytes();
Bitmap bmp = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
imageView.setImageBitmap(bmp);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
t.printStackTrace();
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
mCall.cancel();
}
private interface MyRetrofitService {
@GET("img/{picName}")
Call<ResponseBody> getImagesByName(@Path("picName") String picName);
}
}
代碼運作結果logcat輸出:
10-16 11:21:29.685 6145-6145/zhangphil.http D/請求的網絡連結: https://www.baidu.com/img/bd_logo1.png
不要忘記網絡權限:
<uses-permission android:name="android.permission.INTERNET"/>