Retrofit和Rxjava结合的例子

来源:互联网 发布:计价软件试用版 编辑:程序博客网 时间:2024/06/06 13:17

//添加依赖

    compile 'com.squareup.retrofit:retrofit:2.0.0-beta2'
    compile 'com.squareup.retrofit:converter-gson:2.0.0-beta2'
    compile 'com.squareup.retrofit:adapter-rxjava:2.0.0-beta2'

    compile 'io.reactivex:rxjava:1.1.0'
    compile 'io.reactivex:rxandroid:1.1.0'


//第一个类
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.Toast;


import retrofit.Callback;
import retrofit.GsonConverterFactory;
import retrofit.Response;
import retrofit.Retrofit;
import retrofit.RxJavaCallAdapterFactory;
import rx.Observable;
import rx.Subscriber;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;


public class MainActivity extends AppCompatActivity {


    ///////////////////////////////////////////////////此API接口会过期,请在http://www.haoservice.com/docs/6中重新申请一次
    String apiKey = "9b1e877ce7634787b7a12aa0379cc81a";
    String baseUrl = "http://apis.haoservice.com/";


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        get();
        getByRxJava();
    }


    private void getByRxJava() {
        Retrofit retrofit = new Retrofit.Builder().baseUrl(baseUrl)
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .build();


        APIService service = retrofit.create(APIService.class);
        Observable<Weather> observable = service.getWeatherData("杭州", apiKey);
        observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Subscriber<Weather>() {
                    @Override
                    public void onCompleted() {
                        Log.i("zhk-MainActivity", "onCompleted: ");
                        Toast.makeText(getApplicationContext(),
                                "Completed",
                                Toast.LENGTH_SHORT)
                                .show();
                    }


                    @Override
                    public void onError(Throwable e) {
                        Log.e("zhk-MainActivity", "onError: ", e);
                        Toast.makeText(getApplicationContext(),
                                "Error:" + e.getMessage(),
                                Toast.LENGTH_SHORT)
                                .show();
                    }


                    @Override
                    public void onNext(Weather weather) {
                        Weather.ResultEntity.TodayEntity todayEntiry = weather.getResult().getToday();
                        Log.i("zhk-MainActivity", "onNext: 城市:" + todayEntiry.getCity() + " 温度:" + todayEntiry.getTemperature());
                        Toast.makeText(MainActivity.this, "城市:" + todayEntiry.getCity() + " 温度:" + todayEntiry.getTemperature(), Toast.LENGTH_SHORT).show();
                    }
                });
    }


    private void get() {
        Retrofit retrofit = new Retrofit.Builder().baseUrl(baseUrl)
                .addConverterFactory(GsonConverterFactory.create())
                .build();


        APIService service = retrofit.create(APIService.class);
        service.loadeather("杭州", apiKey).enqueue(new Callback<Weather>() {
            @Override
            public void onResponse(Response<Weather> response, Retrofit retrofit) {
                if (response.body() != null) {
                    Weather weather = response.body();
                    Weather.ResultEntity.TodayEntity todayEntiry = weather.getResult().getToday();
                    Log.i("zhk-MainActivity", "onResponse: 城市:" + todayEntiry.getCity() + " 温度:" + todayEntiry.getTemperature());
                } else {
                    Log.e("zhk-MainActivity", "onResponse: body==null");
                }
            }


            @Override
            public void onFailure(Throwable t) {
                Log.e("zhk-MainActivity", "onFailure: ", t);
            }
        });
    }

}

//第二个类

package com.ethanco.retrofit2_0test;


import java.util.List;


/**
 * Created by Zhk on 2015/12/20.
 */
public class Weather {


    /**
     * error_code : 0
     * reason : 成功
     * result : {"sk":{"temp":"8","wind_direction":"西北风","wind_strength":"2级","humidity":"94","time":"20:38"},"today":{"city":"杭州","date_y":"2015年12月20日","week":"星期日","temperature":"6~12","weather":"小雨","fa":"07","fb":"02","wind":"东风 微风","dressing_index":"较冷","dressing_advice":"建议着厚外套加毛衣等服装。年老体弱者宜着大衣、呢外套加羊毛衫。","uv_index":"最弱","comfort_index":"--","wash_index":"不宜","travel_index":"较不宜","exercise_index":"较不宜","drying_index":"--"},"future":[{"temperature":"8~12","weather":"多云","fa":"01","fb":"02","wind":"无持续风向 微风","week":"星期一","date":"20151221"},{"temperature":"9~12","weather":"中雨","fa":"08","fb":"08","wind":"东风 微风","week":"星期二","date":"20151222"},{"temperature":"9~11","weather":"小雨","fa":"07","fb":"07","wind":"东北风 微风","week":"星期三","date":"20151223"},{"temperature":"5~11","weather":"小雨","fa":"07","fb":"07","wind":"北风 微风","week":"星期四","date":"20151224"},{"temperature":"2~9","weather":"阴","fa":"02","fb":"01","wind":"西北风 微风","week":"星期五","date":"20151225"},{"temperature":"1~9","weather":"晴","fa":"00","fb":"01","wind":"东北风 微风","week":"星期六","date":"20151226"}]}
     */


    private int error_code;
    private String reason;
    /**
     * sk : {"temp":"8","wind_direction":"西北风","wind_strength":"2级","humidity":"94","time":"20:38"}
     * today : {"city":"杭州","date_y":"2015年12月20日","week":"星期日","temperature":"6~12","weather":"小雨","fa":"07","fb":"02","wind":"东风 微风","dressing_index":"较冷","dressing_advice":"建议着厚外套加毛衣等服装。年老体弱者宜着大衣、呢外套加羊毛衫。","uv_index":"最弱","comfort_index":"--","wash_index":"不宜","travel_index":"较不宜","exercise_index":"较不宜","drying_index":"--"}
     * future : [{"temperature":"8~12","weather":"多云","fa":"01","fb":"02","wind":"无持续风向 微风","week":"星期一","date":"20151221"},{"temperature":"9~12","weather":"中雨","fa":"08","fb":"08","wind":"东风 微风","week":"星期二","date":"20151222"},{"temperature":"9~11","weather":"小雨","fa":"07","fb":"07","wind":"东北风 微风","week":"星期三","date":"20151223"},{"temperature":"5~11","weather":"小雨","fa":"07","fb":"07","wind":"北风 微风","week":"星期四","date":"20151224"},{"temperature":"2~9","weather":"阴","fa":"02","fb":"01","wind":"西北风 微风","week":"星期五","date":"20151225"},{"temperature":"1~9","weather":"晴","fa":"00","fb":"01","wind":"东北风 微风","week":"星期六","date":"20151226"}]
     */


    private ResultEntity result;


    public void setError_code(int error_code) {
        this.error_code = error_code;
    }


    public void setReason(String reason) {
        this.reason = reason;
    }


    public void setResult(ResultEntity result) {
        this.result = result;
    }


    public int getError_code() {
        return error_code;
    }


    public String getReason() {
        return reason;
    }


    public ResultEntity getResult() {
        return result;
    }


    public static class ResultEntity {
        /**
         * temp : 8
         * wind_direction : 西北风
         * wind_strength : 2级
         * humidity : 94
         * time : 20:38
         */


        private SkEntity sk;
        /**
         * city : 杭州
         * date_y : 2015年12月20日
         * week : 星期日
         * temperature : 6~12
         * weather : 小雨
         * fa : 07
         * fb : 02
         * wind : 东风 微风
         * dressing_index : 较冷
         * dressing_advice : 建议着厚外套加毛衣等服装。年老体弱者宜着大衣、呢外套加羊毛衫。
         * uv_index : 最弱
         * comfort_index : --
         * wash_index : 不宜
         * travel_index : 较不宜
         * exercise_index : 较不宜
         * drying_index : --
         */


        private TodayEntity today;
        /**
         * temperature : 8~12
         * weather : 多云
         * fa : 01
         * fb : 02
         * wind : 无持续风向 微风
         * week : 星期一
         * date : 20151221
         */


        private List<FutureEntity> future;


        public void setSk(SkEntity sk) {
            this.sk = sk;
        }


        public void setToday(TodayEntity today) {
            this.today = today;
        }


        public void setFuture(List<FutureEntity> future) {
            this.future = future;
        }


        public SkEntity getSk() {
            return sk;
        }


        public TodayEntity getToday() {
            return today;
        }


        public List<FutureEntity> getFuture() {
            return future;
        }


        public static class SkEntity {
            private String temp;
            private String wind_direction;
            private String wind_strength;
            private String humidity;
            private String time;


            public void setTemp(String temp) {
                this.temp = temp;
            }


            public void setWind_direction(String wind_direction) {
                this.wind_direction = wind_direction;
            }


            public void setWind_strength(String wind_strength) {
                this.wind_strength = wind_strength;
            }


            public void setHumidity(String humidity) {
                this.humidity = humidity;
            }


            public void setTime(String time) {
                this.time = time;
            }


            public String getTemp() {
                return temp;
            }


            public String getWind_direction() {
                return wind_direction;
            }


            public String getWind_strength() {
                return wind_strength;
            }


            public String getHumidity() {
                return humidity;
            }


            public String getTime() {
                return time;
            }
        }


        public static class TodayEntity {
            private String city;
            private String date_y;
            private String week;
            private String temperature;
            private String weather;
            private String fa;
            private String fb;
            private String wind;
            private String dressing_index;
            private String dressing_advice;
            private String uv_index;
            private String comfort_index;
            private String wash_index;
            private String travel_index;
            private String exercise_index;
            private String drying_index;


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


            public void setDate_y(String date_y) {
                this.date_y = date_y;
            }


            public void setWeek(String week) {
                this.week = week;
            }


            public void setTemperature(String temperature) {
                this.temperature = temperature;
            }


            public void setWeather(String weather) {
                this.weather = weather;
            }


            public void setFa(String fa) {
                this.fa = fa;
            }


            public void setFb(String fb) {
                this.fb = fb;
            }


            public void setWind(String wind) {
                this.wind = wind;
            }


            public void setDressing_index(String dressing_index) {
                this.dressing_index = dressing_index;
            }


            public void setDressing_advice(String dressing_advice) {
                this.dressing_advice = dressing_advice;
            }


            public void setUv_index(String uv_index) {
                this.uv_index = uv_index;
            }


            public void setComfort_index(String comfort_index) {
                this.comfort_index = comfort_index;
            }


            public void setWash_index(String wash_index) {
                this.wash_index = wash_index;
            }


            public void setTravel_index(String travel_index) {
                this.travel_index = travel_index;
            }


            public void setExercise_index(String exercise_index) {
                this.exercise_index = exercise_index;
            }


            public void setDrying_index(String drying_index) {
                this.drying_index = drying_index;
            }


            public String getCity() {
                return city;
            }


            public String getDate_y() {
                return date_y;
            }


            public String getWeek() {
                return week;
            }


            public String getTemperature() {
                return temperature;
            }


            public String getWeather() {
                return weather;
            }


            public String getFa() {
                return fa;
            }


            public String getFb() {
                return fb;
            }


            public String getWind() {
                return wind;
            }


            public String getDressing_index() {
                return dressing_index;
            }


            public String getDressing_advice() {
                return dressing_advice;
            }


            public String getUv_index() {
                return uv_index;
            }


            public String getComfort_index() {
                return comfort_index;
            }


            public String getWash_index() {
                return wash_index;
            }


            public String getTravel_index() {
                return travel_index;
            }


            public String getExercise_index() {
                return exercise_index;
            }


            public String getDrying_index() {
                return drying_index;
            }
        }


        public static class FutureEntity {
            private String temperature;
            private String weather;
            private String fa;
            private String fb;
            private String wind;
            private String week;
            private String date;


            public void setTemperature(String temperature) {
                this.temperature = temperature;
            }


            public void setWeather(String weather) {
                this.weather = weather;
            }


            public void setFa(String fa) {
                this.fa = fa;
            }


            public void setFb(String fb) {
                this.fb = fb;
            }


            public void setWind(String wind) {
                this.wind = wind;
            }


            public void setWeek(String week) {
                this.week = week;
            }


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


            public String getTemperature() {
                return temperature;
            }


            public String getWeather() {
                return weather;
            }


            public String getFa() {
                return fa;
            }


            public String getFb() {
                return fb;
            }


            public String getWind() {
                return wind;
            }


            public String getWeek() {
                return week;
            }


            public String getDate() {
                return date;
            }
        }
    }
}

//第三个类

package com.ethanco.retrofit2_0test;


import retrofit.Call;
import retrofit.http.GET;
import retrofit.http.Query;
import rx.Observable;


/**
 * Created by Zhk on 2015/12/20.
 */
public interface APIService {
    @GET("weather")
    Call<Weather> loadeather(@Query("cityname") String cityname,@Query("key") String apiKey);
    /**
     * retrofit 支持 rxjava 整合
     * 这种方法适用于新接口
     */
    @GET("weather")
    Observable<Weather> getWeatherData(@Query("cityname") String cityname, @Query("key") String apiKey);
}

原创粉丝点击