Retrofit+Rxjava发起网络请求

Retrofit我们可以理解为OkHttp的加强版,它也是一个网络加载框架。底层是使用OKHttp封装的,准确来说网络请求的工作本质上是OkHttp完成,而 Retrofit 仅负责网络请求接口的封装。它的一个特点是包含了特别多注解,方便简化你的代码量。它的好处在于超级解耦,可以配置不同HttpClient来实现网络请求,如OkHttp、HttpClient…支持同步、异步和RxJava,还可以配置不同的反序列化工具来解析数据,如json、xml等等(这里Retrofit的过多介绍我就不多说啦,不懂的小伙伴可以在网上百度一下,去深入了解一下Retrofit的请求方法等)

那rxjava又是什么呢?
看看大神的博客你就知道rxjava是啥了
https://blog.csdn.net/u013651026/article/details/79367606

看完了Retrofit 和Rxjava,那么接下来我们就来了解了解两者的结合体Retrofit+Rxjava实现网络请求
首先写一个Javabean(天气类)

package com.example.retrofit_net_demo;

public class WeatherBean {
    private DataBean data;


    public DataBean getData() {
        return data;
    }

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


    public static class DataBean {
        private String city;
        private String cold;
        private String temperature;

        public String getCity() {
            return city;
        }

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


        public String getCold() {
            return cold;
        }

        public void setCold(String cold) {
            this.cold = cold;
        }

        public String getTemperature() {
            return temperature;
        }

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


然后我们自定义一个接口

package com.example.retrofit_net_demo;


import retrofit2.http.GET;
import retrofit2.http.Query;
import rx.Observable;

public interface RxWeatherService {
        //网络接口的使用是查询天气
        @GET("weather_mini")
        //此处回调返回的可为任意类型Observable,不用自己去解析json数据
        Observable getMessage(@Query("city") String city);
}

然后我从网上找了一个别人的接口来做这个demo的接口

package com.example.retrofit_net_demo;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.AndroidException;
import android.util.Log;

import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
import rx.Scheduler;
import rx.Subscriber;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;

public class MainActivity extends AppCompatActivity {
    public static final String Api = "http://wthrcdn.etouch.cn/";
    public static final String TAG = "MainActivity-vv";

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

    private void doRequestByRxRetrofit() {
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(Api)
                //设置 Json 转换器
                .addConverterFactory(GsonConverterFactory.create())
                //RxJava 适配器
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .build();
        RxWeatherService rxWeatherService = retrofit.create(RxWeatherService.class);
        rxWeatherService.getMessage("北京")
                //IO线程加载数据
                .subscribeOn(Schedulers.io())
                //主线程显示数据
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Subscriber() {
                    @Override
                    public void onCompleted() {

                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onNext(WeatherBean weatherBean) {
                        Log.d(TAG, "onNext:温度为" + weatherBean.getData().getWendu() + "  " + weatherBean.getData().getGanmao()
                                + "  city:" + weatherBean.getData().getCity());
                    }
                });


    }
}

在这里插入图片描述
有什么错误的话欢迎评论,不喜勿喷!!

你可能感兴趣的:(Android)