天天看点

Retrofit+RxJava 的结合使用记得在清单文件里注册记得加网络权限

这里只是简单的说一下 他们的用法  具体的原理不做解释因为我也不会

1.首先导入retrofit的依赖

implementation 'com.squareup.retrofit2:retrofit:2.5.0'
           

最新版本地址: https://github.com/square/retrofit

2.rxjava

第二个依赖   retrofit 对 rxjava2的适配的一个依赖  这样就可已使用rxjava2 了 而不是直接去rxjava的官网上找依赖  那样运行的时候会报错的

implementation 'com.squareup.retrofit2:adapter-rxjava2:2.2.4'
           

最新版本地址:

https://github.com/square/retrofit/tree/master/retrofit-adapters/rxjava2

https://github.com/ReactiveX/RxJava

 前面是retrofit 对 rxjava2的适配    后面是rxjava的最新版本

3.之后在项目中创建一个接口    ~不要想这是干甚么用的到后面  你大概就知道了  应该

package com.bwie.test1126002.net;

import java.util.Map;

import io.reactivex.Observable;
import okhttp3.ResponseBody;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.QueryMap;
import retrofit2.http.Url;

public interface BaseService {
    @GET
    Observable<ResponseBody> get(@Url String url, @QueryMap Map<String, String> map);

    @POST
    Observable<ResponseBody> post(@Url String url, @QueryMap Map<String, String> map);
}
           

4.

package com.bwie.text1126.net;

import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;

public abstract class BaseObserver<T> implements Observer<T> {
    @Override
    public void onSubscribe(Disposable d) {

    }

    @Override
    public abstract void onNext(T t);

    @Override
    public abstract void onError(Throwable e);

    @Override
    public void onComplete() {

    }
}
           

5.

implementation 'com.squareup.retrofit2:converter-gson:2.4.0'
    implementation 'io.reactivex.rxjava2:rxandroid:2.1.0'
           

最新版本地址:

https://square.github.io/retrofit/

https://github.com/ReactiveX/RxAndroid

6.

package com.bwie.test1126002.net;

import java.util.HashMap;
import java.util.Map;

import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;

public class HttpHelper {
    private static HttpHelper ourInstance;
    private Retrofit retrofit;

    private HttpHelper() {
    }

    public static HttpHelper getInstance() {
        if(ourInstance==null){
            synchronized (HttpHelper.class){
                ourInstance=new HttpHelper();
            }
        }
        return ourInstance;
    }




    public void init(String baseUrl){
        retrofit = new Retrofit.Builder()
                .baseUrl(baseUrl)
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .addConverterFactory(GsonConverterFactory.create())
                .build();
    }


    public  void doGet(String url, Map<String,String> map, Observer observer){
        if(map==null){
            map=new HashMap<>();
        }
        retrofit.create(BaseService.class)
                .get(url,map)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(observer);

    }
    public  void doPost(String url, Map<String,String> map, Observer observer){
        if(map==null){
            map=new HashMap<>();
        }
        retrofit.create(BaseService.class)
                .post(url,map)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(observer);
    }

}
           

7.

package com.bwie.test1126002.app;

import android.app.Application;

import com.bwie.test1126002.net.HttpHelper;

public class MyApp extends Application {
    @Override
    public void onCreate() {
        super.onCreate();

        HttpHelper.getInstance().init("http://www.zhaoapi.cn/");

    }
}
           

记得在清单文件里注册

8.

package com.bwie.test1126002;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;

import com.bwie.test1126002.net.BaseObserver;
import com.bwie.test1126002.net.HttpHelper;

import java.io.IOException;

import okhttp3.ResponseBody;

public class MainActivity extends AppCompatActivity {

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


        HttpHelper.getInstance().doGet("/ad/getAd", null, new BaseObserver<ResponseBody>() {

            @Override
            public void onNext(ResponseBody value) {
                try {
                    Log.i("main", "onNext: " + value.string());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            @Override
            public void onError(Throwable e) {
                Log.i("main", "onError: " + e.getMessage());
            }
        });
    }
}
           

记得加网络权限