Retrofit 2.0 androidプロジェクトでの使用

12442 ワード

Retrofit 2.githb公式文書 
 
 Retrofit 2.0概要:
 
Retrofit 2.0はSquare社のAndroidとJavaのタイプに対して安全なHttpクライアントです。ネットワーク要求はOkHttpに基づいています。
 
Retrofit 2.0の改善
 
Retrofit 2.0の使用:
 
jarパッケージをダウンロード
 
Graadle:設定:
 
compile 'com.squareup.retrofit2:retrofit:2.1.0'
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.2.0'
    compile 'io.reactivex:rxjava:1.1.0'
    compile 'io.reactivex:rxandroid:1.1.0'
    compile 'com.squareup.retrofit2:retrofit:2.0.0-beta4'
    compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta4'
    compile 'com.squareup.retrofit2:adapter-rxjava:2.0.0-beta4'
    compile 'com.google.code.gson:gson:2.6.2'
    compile 'com.jakewharton:butterknife:7.0.1'
}
使い方紹介:
 
インターフェースNetwork Service.javaを作成します。
 
Public Interface NetworkService{
/**
     *         
     * @param info
     * @return
     */
    @POST("getCodeList")
    Call getCodeList(@Body EncryptUpload info) ;
}
ApiService.javaを作成します。
 
 
public class ApiService {

    private  Retrofit retrofit ;
    private static NetworkService networkService ;

    private static ApiService ourInstance ;



    public static ApiService getInstance() {
        if (ourInstance==null) {
            ourInstance = new ApiService();
        }
        return ourInstance;
    }

    private ApiService() {
        retrofit=  RetrofitManager.builder();
        networkService= retrofit.create(NetworkService.class);
    }

    /***
     *       
     */
    public  void getCodeList(JSONObject json,  Callback callback){
        EncryptUpload encryptUpload = toEncry(json,"getCodeList");
        Call  call =  networkService.getCodeList(encryptUpload);

        call.enqueue(callback);
    }
}
外部で呼び出し:
 
  private void getCodeList(){ if (AppConfig.IS_OFFLINE) return; JSONObject jsonObject = new JSONObject(); String lastUpdateTime = PreferenceUtil.getStringData(this, AppConfig.PRE_CODE_LATEST_UPDATED_TIME); try { jsonObject.put("lastUpdateTime",lastUpdateTime); ApiService.getInstance().getCodeList(jsonObject, new Callback() { @Override public void onResponse(Call call, Response response) { if (!response.isSuccessful()){ ToastUtil.show(getBaseContext()," "); return; } if(AppConfig.handleResponse(MainActivity.this,(BaseResponse)response.body())){ List addList =response.body().getAddList(); List updateList =response.body().getUpdateList(); List deleteList =response.body().getDeleteList(); try { // if (addList!=null&&addList.size()>0) CreditApplication.getDbManager().saveOrUpdate(addList); if (updateList!=null&&updateList.size()>0) CreditApplication.getDbManager().saveOrUpdate(updateList); if (deleteList!=null&&deleteList.size()>0) CreditApplication.getDbManager().deleteById(CodeList.class,deleteList); // PreferenceUtil.setStringData(getBaseContext(), AppConfig.PRE_CODE_LATEST_UPDATED_TIME,response.body().getLastUpdateTime()); } catch (DbException e) { e.printStackTrace(); } } } @Override public void onFailure(Call call, Throwable t) { } }); } catch (JSONException e) { e.printStackTrace(); } } JSONObject=new JSONObject()
String lastUpdateTime=PreferenceUtil.get StringData(this,AppConfig.PREuCODE Test UUPDATEDUTIME);
try{
jsonObject.put(「lastUpdateTime」、lastUpdateTime)
App Service.get Instance().get CodeList(jsonObject,new Callback){
@オーバーライド
public voidon Resoliponse(Call call、Resonse reponse){
if(!レスポンス.isSuccess ful){
Toast Util.show(get BaseConteet()、“異常要求”);
return;
)
if(AppConfig.handleResponse(MainActivity.this)reponse.body){
List addList=reponse.body().get Add List()
List udateList=reponse.body().get UpdateList()
List deleteList=reponse.body().get DeleteList()
try{
//テンプレートの更新
if(addList!=null&&addList.size()>0)
Credit Application.getDbManager().saveOrUpdate(addList)
if(udateList!=null&udateList.size()>0)
Credit Application.getDbManager().saveOrUpdate(udateList);
if(deleteList!=null&&deleteList.size()>0)
CrediitAplication.getDbManager().deleteById(CodeList.class,deleteList)
//時間更新
PreferenceUtil.set StrigData(get BaseControtext),AppConfig.PREG CODE_LATESTuUPDATEDUTIME,reponse.body().get LastUpdateTime;
}catch(DbException e){
e.print StockTrace();
)
)
)
@オーバーライド
public void onFailure(Call call、Throwable t){
)

}catch(JSONException e){
e.print StockTrace();
)
)
 
Retrofit Manager.java
 
  import com.psbc.credit.AppConfig; import com.psbc.credit.CreditApplication; import com.psbc.credit.util.NetworkUtil; import java.io.File; import java.io.IOException; import java.util.concurrent.TimeUnit; import okhttp3.Cache; import okhttp3.CacheControl; import okhttp3.Interceptor; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.logging.HttpLoggingInterceptor; import retrofit2.Retrofit; import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory; import retrofit2.converter.gson.GsonConverterFactory; /** * Created by rance on 2016/11/10. */ public class RetrofitManager { // 1 public static final int CACHE_STALE_SHORT = 60; // 7 public static final int CACHE_STALE_LONG = 60 * 60 * 24 * 7; public static final String CACHE_CONTROL_AGE = "Cache-Control: public, max-age="; // Cache-Control , if-only-cache ,max-stale public static final String CACHE_CONTROL_CACHE = "only-if-cached, max-stale=" + CACHE_STALE_LONG; // Cache-Control , Cache-Control max-age=0 public static final String CACHE_CONTROL_NETWORK = "max-age=0"; private static OkHttpClient mOkHttpClient; private static Retrofit retrofit; public static Retrofit builder(){ return new RetrofitManager().retrofit; } private RetrofitManager() { initOkHttpClient(); retrofit = new Retrofit.Builder() .baseUrl(AppConfig.HOST_URL) .client(mOkHttpClient) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .addConverterFactory(GsonConverterFactory.create()) .build(); } private void initOkHttpClient() { HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(); interceptor.setLevel(HttpLoggingInterceptor.Level.BODY); if (mOkHttpClient == null) { synchronized (RetrofitManager.class) { if (mOkHttpClient == null) { // , 100Mb Cache cache = new Cache(new File(CreditApplication.getContext().getCacheDir(), "HttpCache"), 1024 * 1024 * 100); mOkHttpClient = new OkHttpClient.Builder() .cache(cache) .addInterceptor(mRewriteCacheControlInterceptor) .addNetworkInterceptor(mRewriteCacheControlInterceptor) .addInterceptor(interceptor) .retryOnConnectionFailure(true) .connectTimeout(15, TimeUnit.SECONDS) .readTimeout(60,TimeUnit.SECONDS) .writeTimeout(60,TimeUnit.SECONDS) .build(); } } } } // , private Interceptor mRewriteCacheControlInterceptor = new Interceptor() { @Override public okhttp3.Response intercept(Chain chain) throws IOException { Request request = chain.request(); if (!NetworkUtil.isNetworkConnected()) { request = request.newBuilder().cacheControl(CacheControl.FORCE_CACHE).build(); } okhttp3.Response originalResponse = chain.proceed(request); if (NetworkUtil.isNetworkConnected()) { // @Headers , String cacheControl = request.cacheControl().toString(); return originalResponse.newBuilder().header("Cache-Control", cacheControl) .removeHeader("Pragma").build(); } else { return originalResponse.newBuilder() .header("Cache-Control", "public, only-if-cached, max-stale=" + CACHE_STALE_LONG) .removeHeader("Pragma").build(); } } }; } retrofit=new Retrofit.Buider()
・baseUrl(AppConfig.HOST_URL)
.client(mOkHttpClient)
addCallAdapter Factory(RxJavaCallAdapter Factory.creat()
addCoverterFactory(GsonCoverterFactory.creat()
.build()
)
prvate void init OkHttpClient()
Http LogggggaingInterceptor=new Http LogggaingIntercepter()
interceptor.set Level(Http Logggg Interceptor.Level.BODY)
if(mOkHttp Client==null){
synchronized(RetrofitManager.class){
if(mOkHttp Client==null){
//キャッシュパス指定、キャッシュサイズ100 M
Cache cache=new Cache(new File)は、
1024*1024*100)
mOkHttp Client=new OkHttp Client.Buider()
cache(cache)
addInterceptor(mRewriteCacheControl Interceptor)
addNetwork Interceptor(mRewriteCacheControl Interceptor)
.addInterceptor(interceptor)
.retryOnConnection Failure(true)
connectTimeout(15、TimeUnit.SECONDS)
readTimeout(60、TimeUnit.SECONDS)
・writeTimeout(60、TimeUnit.SECONDS)
.build()
)
)
)
)
//クラウドがヘッドブロックに応答してキャッシュポリシーを設定します。
prvate Interceptor mRewriteCacheControl Interceptor=new Interceptor(){
@オーバーライド
public ok http 3.Response intercept(Chin chain)throws IOException{
Request request=chain.request()
if(!Network Util.isNetwork Conneced){
request=request.newBuider().cachControl(CachControl.FORECECuCACHE).build()
)
okhttp 3.Resonse originalResonse=chain.proceed;
if(Network Util.isNetwork Conneced){
//ネットがある時はインターフェースの@Headersの中の配置を読んで、ここで統一的な設定を行うことができます。
String cacheControl=request.cacheControl().toString()
return originalResonse.newBuider().header(「Cache-Coontrol」,cacheControl)
.removeHeader(「Pragma」).build();
}else{
return originalResonse.newBuider()
header(「Cache-Coontrol」、「public、only-if-cached、max-stale=」+CACHEu STALE LONG)
.removeHeader(「Pragma」).build();
)
)

)
 
 
個人は他の関連jarカバンに使用します。
 
 
okhttpとokio.zip(二つのjarカバンを含む) オカ-1.8.0.jar  ok http-33.11.jar
gson-27.7.jar
retrofit-2.1.0.jar