tips
- 解特殊json
- okhttp2 -> 3, 將set模式改成了builder模式
Retrofit使用From
1. 添加依賴和網(wǎng)絡(luò)權(quán)限
build.gradle
dependencies {
compile 'com.squareup.retrofit2:retrofit:2.0.2'
// Retrofit庫
}
Manifest
<uses-permission android:name="android.permission.INTERNET"/>
2. 創(chuàng)建接受服務(wù)器返回的數(shù)據(jù)的類
public class Translation {
private int status;
private content content;
private static class content {
private String from;
private String to;
private String vendor;
private String out;
private int errNo;
}
//定義 輸出返回數(shù)據(jù) 的方法
public void show() {
System.out.println(status);
System.out.println(content.from);
System.out.println(content.to);
System.out.println(content.vendor);
System.out.println(content.out);
System.out.println(content.errNo);
}
}
3. 創(chuàng)建用于描述網(wǎng)絡(luò)請求的接口
public interface GetRequest_Interface {
@GET("ajax.php?a=fy&f=auto&t=auto&w=hello%20world")
Call<Translation> getCall();
// 注解里傳入 網(wǎng)絡(luò)請求 的部分URL地址
// Retrofit把網(wǎng)絡(luò)請求的URL分成了兩部分:一部分放在Retrofit對象里布朦,另一部分放在網(wǎng)絡(luò)請求接口里
// 如果接口里的url是一個完整的網(wǎng)址,那么放在Retrofit對象里的URL可以忽略
// getCall()是接受網(wǎng)絡(luò)請求數(shù)據(jù)的方法
}
3.1 接口拆分
4. 創(chuàng)建 Retrofit 對象
4.1 數(shù)據(jù)解析器(Converter)
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://fy.iciba.com/") // 設(shè)置 網(wǎng)絡(luò)請求 Url
.addConverterFactory(GsonConverterFactory.create()) //設(shè)置使用Gson解析(記得加入依賴)
.build();
數(shù)據(jù)解析器 | Gradle依賴 |
---|---|
Gson | com.squareup.retrofit2:converter-gson:2.0.2 |
Jackson | com.squareup.retrofit2:converter-jackson:2.0.2 |
Simple XML | com.squareup.retrofit2:converter-simplexml:2.0.2 |
Protobuf | com.squareup.retrofit2:converter-protobuf:2.0.2 |
Moshi | com.squareup.retrofit2:converter-moshi:2.0.2 |
Wire | com.squareup.retrofit2:converter-wire:2.0.2 |
Scalars | com.squareup.retrofit2:converter-scalars:2.0.2 |
4.2 網(wǎng)絡(luò)請求適配器(CallAdapter)
網(wǎng)絡(luò)請求適配器 | Gradle依賴 |
---|---|
guava | com.squareup.retrofit2:adapter-guava:2.0.2 |
Java8 | com.squareup.retrofit2:adapter-java8:2.0.2 |
rxjava | com.squareup.retrofit2:adapter-rxjava:2.0.2 |
5. 創(chuàng)建 網(wǎng)絡(luò)請求接口實例
6. 發(fā)送網(wǎng)絡(luò)請求(異步 / 同步)
7. 處理返回的數(shù)據(jù)
public class GetRequest extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
request();
// 使用Retrofit封裝的方法
}
public void request() {
//步驟4:創(chuàng)建Retrofit對象
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://fy.iciba.com/") // 設(shè)置 網(wǎng)絡(luò)請求 Url
.addConverterFactory(GsonConverterFactory.create()) //設(shè)置使用Gson解析(記得加入依賴)
.build();
// 步驟5:創(chuàng)建 網(wǎng)絡(luò)請求接口 的實例
GetRequest_Interface request = retrofit.create(GetRequest_Interface.class);
//對 發(fā)送請求 進(jìn)行封裝
Call<Translation> call = request.getCall();
//步驟6:發(fā)送網(wǎng)絡(luò)請求(異步)
call.enqueue(new Callback<Translation>() {
//請求成功時回調(diào)
@Override
public void onResponse(Call<Translation> call, Response<Translation> response) {
// 步驟7:處理返回的數(shù)據(jù)結(jié)果
response.body().show();
}
//請求失敗時回調(diào)
@Override
public void onFailure(Call<Translation> call, Throwable throwable) {
System.out.println("連接失敗");
}
});
}
}
6.2 同步請求(記得不在主線程請求)
Response<Translation> response = call.execute();
response.body().show();
加上gson解析需要的依賴
compile 'com.squareup.retrofit2:converter-gson:2.0.2'
Retrofit進(jìn)階
okhttp3
HttpLoggingInterceptor攔截日志
原本retrofit 的 set log level已經(jīng)刪除, 通過okhttp攔截