Android開発のRetrofitエンベロープ
7277 ワード
Android開発のRetrofitエンベロープ
前のページのretrofitに関する文章http://blog.csdn.net/anwanfei/article/details/58140327retrofitの解析と簡単な使い方はもう詳しくなりましたが、使いやすいものでもないし、あまり高くもないです.コードはよく抽出されていません.今日はパッケージを作りました.
一、ステップ
Step 1:Retrofitライブラリ追加の依存
2、headerを追加するとretrofitのインスタンスを作成する時に追加できますが、通常の量で書かなければいけません.これは需要を満たすことができなくて、OKhttp Clidentを作成する時にheaderを追加して実現する必要があります.
前のページのretrofitに関する文章http://blog.csdn.net/anwanfei/article/details/58140327retrofitの解析と簡単な使い方はもう詳しくなりましたが、使いやすいものでもないし、あまり高くもないです.コードはよく抽出されていません.今日はパッケージを作りました.
一、ステップ
Step 1:Retrofitライブラリ追加の依存
compile 'com.squareup.retrofit2:retrofit:2.1.0'//Retrofit2
compile 'com.squareup.retrofit2:converter-gson:2.1.0'//ConverterFactory Gson
compile 'com.squareup.retrofit2:converter-scalars:2.1.0'//ConverterFactory String
ステップ2:受信サーバを作成してデータに戻すクラス(Ben)Step 3:ネットワーク要求を記述するためのインターフェースを作成するpublic interface ICrewManagementService {
@FormUrlEncoded
@POST("employeeManger/query/list.do")
Call getCrewList(@Field(Constants.PAGE) String page);
}
Step 4:ツールクラスを作成し、retrofitのインスタンスを作成し、ネットワーク要求インターフェースのインスタンスを取得するpublic class HttpUtils {
private final static HttpUtils instance = new HttpUtils();
private HttpUtils() {
}
public static HttpUtils getDefault() {
return instance;
}
// ok , header
private static final OkHttpClient httpClient = new OkHttpClient.Builder()
.addInterceptor(new Interceptor() {
@Override
public Response intercept(@NonNull Chain chain) throws IOException {
Request.Builder builder = chain.request().newBuilder();
builder.addHeader(Constants.TOKEN, CacheUtils.getString(MyApplication.appContext, TOKEN))
.addHeader(Constants.USER_ID, CacheUtils.getString(MyApplication.appContext, Constants.ID))
.addHeader(Constants.AGENT, NetUtils.getUserAgent());
return chain.proceed(builder.build());
}
})
.connectTimeout(30, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS)
.build();
// retrofit
private static final retrofit2.Retrofit retrofit = new retrofit2.Retrofit.Builder()
.baseUrl("http://116.62.152.191:8082/")
.client(httpClient)//
.addConverterFactory(GsonConverterFactory.create())
.build();
//
public T getService(Class clazz) {
return retrofit.create(clazz);
}
}
Step 5:送信要求retrofit2.Call call = HttpUtils.getDefault().getService(ICrewManagementService.class).getCrewList("1");
//
call.enqueue(new MyCallback() {});
//
Response execute = call.execute();
Step 3:ネットワークリターンデータ処理、同じ統一処理、異なるインターフェースコール処理public abstract class MyCallback<T> implements Callback<T> {
@Override
public void onResponse(Call call, Response response) {
int code = response.raw().code();
String message = response.raw().message();
if (code == 200) {
onSuccess(response);
} else if (code == 601) {
//token ,
} else if (code == 404) {
onDataEmpty(message);
} else {
Toast.makeText(MyApplication.appContext, message, Toast.LENGTH_SHORT).show();
}
}
@Override
public void onFailure(Call call, Throwable t) {
Toast.makeText(MyApplication.appContext, " ", Toast.LENGTH_SHORT).show();
}
public abstract void onSuccess(Response response);
public abstract void onDataEmpty(String message);
}
二、大坑1、retrofit中国語の文字化け問題はretrofitとrxjavaを使って、データを提出する時に注意してください.データの中に中国語がある時、バックグランドに伝わります.おそらく文字化けです.解決:①GET要求はPOSTに変えます.②パラメータQueryをField③に@FormUrlEnccodedを加えます.2、headerを追加するとretrofitのインスタンスを作成する時に追加できますが、通常の量で書かなければいけません.これは需要を満たすことができなくて、OKhttp Clidentを作成する時にheaderを追加して実現する必要があります.