分刻みでRetrofit+Rxjavaを使用してネットワーク要求を実現

12827 ワード

コードを引く前に、なぜRetrofitがこんなに人気があるのか簡単に理解しておきましょう.???
Retrofitは、Square社が出品したOkHttpパッケージベースのRESTful(現在流行しているapiデザインのスタイル)ネットワークリクエストフレームワークです.その内部には高度なデカップリングの目的を達成するために大量の設計モードが使用されている.リクエストを注釈で直接構成できます.異なるHttpクライアントを使用することができます.また、json Converterを使用してデータをシーケンス化し、生成したいエンティティbeanに直接変換することもできます.Rxjavaなどもサポートされています(ここでは1万字を省略しますが......???
では、これからコードをつけて、小さなDemoを書いて使用をテストしましょう.使用手順:1、appのbuildファイルに追加:
//only Retrofit(  Retrofit  )
   compile 'com.squareup.retrofit2:retrofit:2.1.0'
   compile 'com.squareup.retrofit2:converter-gson:2.1.0'
//Rxjava and Retrofit(Retrofit+Rx       )
   compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
   compile 'io.reactivex:rxandroid:1.2.1'
   compile 'io.reactivex:rxjava:1.2.1'

2、次にretrofitネットワークを実現するコードを作成します.Get要求を例に、インタフェースの例を示します.(http://wthrcdn.etouch.cn/weather_mini?city=北京)まず、インターネットリクエストを構成するためにインターネットを作成する必要があります.書き方『一』:単純にRetrofitを使用し、Rxjavaを付けない使用
/**
*   :   :            
*/
public interface WeatherService {
//                 
//  
   @GET("weather_mini")
//               Call,         json   !!!
   Call getMessage(@Query("city") String city);

ネットワークを要求する必要がある場所で、次の方法を直接呼び出せばいいです.
  /**
    *     Retrofit     
    */
   private void doRequestByRetrofit() {
       Retrofit retrofit = new Retrofit.Builder()
               .baseUrl(API.BASE_URL)//  URL     /   
               .addConverterFactory(GsonConverterFactory.create())//   Json    
               .build();
       WeatherService weatherService = retrofit.create(WeatherService .class);
       Call call = weatherService.getMessage("  ");
       call.enqueue(new Callback() {
           @Override
           public void onResponse(Call call, Response response) {
               //      
               WeatherEntity weatherEntity = response.body();
               Log.e("TAG", "response == " +  weatherEntity.getData().getGanmao());
           }

           @Override
           public void onFailure(Call call, Throwable t) {
               Log.e("TAG", "Throwable : " + t);
           }
       });
   }


書き方『二』Retrofit+Rxjava区別:Rxjavaを使用するとCallではなくObservableのオブジェクトが返されます.
public interface RxWeatherService {
   @GET("weather_mini")
   Observable getMessage(@Query("city") String city);
}

要求ネットワークコード:
 private void doRequestByRxRetrofit() {
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(API.BASE_URL)//  URL     /   
                .addConverterFactory(GsonConverterFactory.create())//   Json    
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())//RxJava    
                .build();
        RxWeatherService rxjavaService = retrofit.create(RxWeatherService .class);
        rxjavaService .getMessage("  ")
                .subscribeOn(Schedulers.io())//IO      
                .observeOn(AndroidSchedulers.mainThread())//       
                .subscribe(new Subscriber() {
                    @Override
                    public void onCompleted() {

                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onNext(WeatherEntity weatherEntity) {
                       Log.e("TAG", "response == " + weatherEntity.getData().getGanmao());
                    }
                });
    }

WeatherEntityエンティティーエンティティーエンティティーエンティティークラス(サボっているパートナーにのみ)を無料で提供:(ブラウザで開く)http://wthrcdn.etouch.cn/weather_mini?city=北京、json串を取って直接GsonFormatで生成すればいい)
public class WeatherEntity {
    private DataBean data;
    private int status;
    private String desc;

    public DataBean getData() {
        return data;
    }

    public void setData(DataBean data) {
        this.data = data;
    }

    public int getStatus() {
        return status;
    }

    public void setStatus(int status) {
        this.status = status;
    }

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }

    public static class DataBean {
        private YesterdayBean yesterday;
        private String city;
        private String aqi;
        private String ganmao;
        private String wendu;
        private List forecast;

        public YesterdayBean getYesterday() {
            return yesterday;
        }

        public void setYesterday(YesterdayBean yesterday) {
            this.yesterday = yesterday;
        }

        public String getCity() {
            return city;
        }

        public void setCity(String city) {
            this.city = city;
        }

        public String getAqi() {
            return aqi;
        }

        public void setAqi(String aqi) {
            this.aqi = aqi;
        }

        public String getGanmao() {
            return ganmao;
        }

        public void setGanmao(String ganmao) {
            this.ganmao = ganmao;
        }

        public String getWendu() {
            return wendu;
        }

        public void setWendu(String wendu) {
            this.wendu = wendu;
        }

        public List getForecast() {
            return forecast;
        }

        public void setForecast(List forecast) {
            this.forecast = forecast;
        }

        public static class YesterdayBean {
   
            private String date;
            private String high;
            private String fx;
            private String low;
            private String fl;
            private String type;

            public String getDate() {
                return date;
            }

            public void setDate(String date) {
                this.date = date;
            }

            public String getHigh() {
                return high;
            }

            public void setHigh(String high) {
                this.high = high;
            }

            public String getFx() {
                return fx;
            }

            public void setFx(String fx) {
                this.fx = fx;
            }

            public String getLow() {
                return low;
            }

            public void setLow(String low) {
                this.low = low;
            }

            public String getFl() {
                return fl;
            }

            public void setFl(String fl) {
                this.fl = fl;
            }

            public String getType() {
                return type;
            }

            public void setType(String type) {
                this.type = type;
            }
        }

        public static class ForecastBean {
  
            private String date;
            private String high;
            private String fengli;
            private String low;
            private String fengxiang;
            private String type;

            public String getDate() {
                return date;
            }

            public void setDate(String date) {
                this.date = date;
            }

            public String getHigh() {
                return high;
            }

            public void setHigh(String high) {
                this.high = high;
            }

            public String getFengli() {
                return fengli;
            }

            public void setFengli(String fengli) {
                this.fengli = fengli;
            }

            public String getLow() {
                return low;
            }

            public void setLow(String low) {
                this.low = low;
            }

            public String getFengxiang() {
                return fengxiang;
            }

            public void setFengxiang(String fengxiang) {
                this.fengxiang = fengxiang;
            }

            public String getType() {
                return type;
            }

            public void setType(String type) {
                this.type = type;
            }
        }
    }
}


さて、簡単なRetrofit+Rxjavaのネットワーク化はこれで完了です.本文は主にretrofitの開発の子供靴に初接触することに対して、もしあなたに役に立つならば、少し良いことを忘れないでください!后日、実际のプロジェクト开発におけるRetrofit+Rxjavaの运用を更新しますので、直接プロジェクトで使用することができますよ.......お楽しみに???