项目集成,源码不方便上传,实现一个,可以随意扩展 这个项目可以直接拷贝直接用
各种包直接引入,方便拷贝
首先: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