Rxandroid retrofit 2.0 项目集成

项目集成,源码不方便上传,实现一个,可以随意扩展 这个项目可以直接拷贝直接用
各种包直接引入,方便拷贝
首先:app build.gradle 添加

    compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
    compile 'io.reactivex.rxjava2:rxjava:2.1.5'
    compile 'com.squareup.retrofit2:retrofit:2.3.0'
    compile 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
    compile 'com.squareup.retrofit2:converter-gson:2.3.0'

MainActivity

package kadacom.com.pad.ui.activity;

import android.os.Bundle;

import com.alibaba.android.arouter.facade.annotation.Route;

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

import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.annotations.NonNull;
import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.functions.Consumer;
import io.reactivex.functions.Function;
import io.reactivex.schedulers.Schedulers;
import kadacom.com.pad.R;
import kadacom.com.pad.ui.SPUtil;
import kadacom.com.pad.ui.bean.TestModel;
import kadacom.com.pad.ui.http.NewsService;

import static kadacom.com.pad.ui.http.RequestManager.getHeaderService;


@Route(path = "/kedacom/MainTestActivity")
public class MainTestActivity extends BaseActivity {

    @NonNull
    private CompositeDisposable mCompositeDisposable = new CompositeDisposable();
    @NonNull
    private NewsService newsService;

    @Override
    protected int intiLayout() {
        return R.layout.activity_main_test;
    }

    @Override
    public void initView() {

    }

    @Override
    public void initData() {

    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        newsService = getHeaderService();
        initRetrofitDemo();
    }


    @Override
    protected void onDestroy() {
        mCompositeDisposable.clear();
        super.onDestroy();
    }

    String adminUser;

    private void initRetrofitDemo() {
        SPUtil spUtil = new SPUtil(MainTestActivity.this, "pad");
        adminUser = spUtil.getString("user", "");
        Map<String, String> mcodeBean = new HashMap<>();
        mcodeBean.put("mo", "YJY201711161101");
        mcodeBean.put("user", adminUser);
        Observable<TestModel> observable;
        observable = newsService.getMocodeSelect(mcodeBean);
//            observable.subscribeOn(Schedulers.io())
//                    .observeOn(AndroidSchedulers.mainThread())
//                    .subscribe(new Observer<TestModel>() {
//                        @Override
//                        public void onSubscribe(@NonNull Disposable d) {
//
//                        }
//
//                        @Override
//                        public void onNext(@NonNull TestModel tblFeedPlanDetails) {
//                            toastShort(tblFeedPlanDetails.toString());
//                        }
//
//                        @Override
//                        public void onError(@NonNull Throwable e) {
//                            toastShort(e.toString());
//                        }
//
//                        @Override
//                        public void onComplete() {
//
//                        }
//                    });


        mCompositeDisposable.add(observable
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .map(new Function<TestModel, TestModel>() {
                    @Override
                    public TestModel apply(@NonNull TestModel tblFeedPlanDetails) throws Exception {
                        return tblFeedPlanDetails;
                    }
                })
                .subscribe(new Consumer<TestModel>() {
                    @Override
                    public void accept(TestModel tab) throws Exception {
                        toastShort(tab.toString());
                    }
                })
        );


    }
}

里面注掉的也是可以用的方法,CompositeDisposable来“安排”Retrofit网络请求,随意使用
NewsService

package kadacom.com.pad.ui.http;

import java.util.Map;

import io.reactivex.Observable;
import kadacom.com.pad.ui.bean.TestModel;
import retrofit2.http.GET;
import retrofit2.http.QueryMap;

/**
 * Created by huangyin on 2019/1/9.
 */

public interface  NewsService {

    //使用retrofit+RxAndroid的接口定义
    @GET("wms/mostock/QueryDetailByUser")
    Observable<TestModel> getMocodeSelect(@QueryMap Map<String, String> map);

}

RequestManager

package kadacom.com.pad.ui.http;


import java.io.IOException;

import kadacom.com.pad.ui.PadConfig;
import okhttp3.HttpUrl;
import okhttp3.Interceptor;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;

/**
 * Created by huangyin on 2019/1/9.
 */

public class RequestManager {

    private static OkHttpClient client;
    private static NewsService networkService;


    /**
     * 普通不添加公共的头信息
     */
    public static NewsService getNormalService() {
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(PadConfig.baseUrl)
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .build();
        networkService = retrofit.create(NewsService.class);
        return networkService;
    }


    /**
     * 通过拦截器添加公共的头信息
     */
    public static NewsService getHeaderService() {
        try{ Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(PadConfig.baseUrl)
                .client(getHeaderClient())
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .build();
            networkService = retrofit.create(NewsService.class);
        }catch (Exception e){
            System.out.print(e.toString());
        }
        return networkService;
    }

    private static OkHttpClient getHeaderClient() {
        client = new OkHttpClient.Builder().addInterceptor(new HeaderInterceptor()).build();
        return client;
    }


    /**
     * 头信息拦截器
     */
    static class HeaderInterceptor implements Interceptor {

        @Override
        public Response intercept(Chain chain) throws IOException {
            Request request = chain.request();
            Request request1 = request.newBuilder()
//                    .addHeader("device_id", "597823023")
//                    .addHeader("name", "macName")
//                    .addHeader("interceptor", "拦截试试啊")
                    .build();
            Response response = chain.proceed(request1);
            return response;
        }
    }
    static  OkHttpClient createOkHttpClient() {
        final OkHttpClient.Builder httpClient =
                new OkHttpClient.Builder();
        httpClient.addInterceptor(new Interceptor() {
            @Override
            public Response intercept(Chain chain) throws IOException {
                final Request original = chain.request();
                final HttpUrl originalHttpUrl = original.url();
                final HttpUrl url = originalHttpUrl.newBuilder()
                        .build();
                // Request customization: add request headers
                final Request.Builder requestBuilder = original.newBuilder()
                        .url(url);
                final Request request = requestBuilder.build();
                return chain.proceed(request);
            }
        });

        return httpClient.build();
    }

}

里面有两种书写http,自己看着玩
实体类自己看着整吧
retrifit 2.0 提交Json格式数据

 @POST("")
   Call<T> postFlyRoute(@Body RequestBody route);//传入的参数为RequestBody

        FlyRouteBean flyRouteBean=new FlyRouteBean();
        flyRouteBean=initdata(flyRouteBean);//根据Bean类初始化一个需要提交的数据类
        Gson gson=new Gson();
        String route= gson.toJson(flyRouteBean);//通过Gson将Bean转化为Json字符串形式  

Retrofit retrofit=new Retrofit.Builder()
                .baseUrl(URL)
                .addConverterFactory( GsonConverterFactory.create())
                .build();
        PostRoute postRoute=retrofit.create(PostRoute.class);
        RequestBody body=RequestBody.create(okhttp3.MediaType.parse("application/json; charset=utf-8"),route);
        Call<FlyRouteBean> call=postRoute.postFlyRoute(body);

Retrofit2.0添加Header的方法总结 https://blog.csdn.net/silenceoo/article/details/77460607

发布了46 篇原创文章 · 获赞 21 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/u012922981/article/details/86233709