1、新建网络请求返回结果实例(根据自己的实际需要)
public class HttpResult {
private int code;
private String message;
private T result;
public int getCode() {
returncode;
}
public void setCode(intcode) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public T getResult() {
return result;
}
public void setResult(T result) {
this.result = result;
}
}
2、创建网络请求工具类
public classHttpRequestUtils{
public static finalString BASE_URL ="你网络请求地址前缀";
private static finalintDEFAULT_TIMEOUT =10;
private Retrofit retrofit;
private RequestService requestService;
/**
* 创建私有构造方法,避免被外部实例化
*/
private HttpRequestUtils() {
//手动创建一个OkHttpClient并设置超时时间
OkHttpClient.Builder builder =newOkHttpClient.Builder();
builder.connectTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS);
retrofit =newRetrofit.Builder().client(builder.build())
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.baseUrl(BASE_URL)
.build();
requestService = retrofit.create(RequestService.class);//网络请求API
}
/**
* 在访问HttpRequestUtils时创建单例对象
*/
private static classSingletonHolder{
private static finalHttpRequestUtils INSTANCE =newHttpRequestUtils();
}
/**
* 获取单利对象
*@return
*/
public static HttpRequestUtils getInstance() {
return SingletonHolder.INSTANCE;
}
/** * 获取请求对象 *@return*/
public static RequestService getRequestService(){
return getInstance().requestService;
}
/** * 设置观察者 *@paramo 被观察者 *@params 观察者 *@param 数据类型 */
public void toSubscribe(Observable o, Subscriber s) {
o.subscribeOn(Schedulers.io()).unsubscribeOn(Schedulers.io())//在io线程中处理网络请求
.observeOn(AndroidSchedulers.mainThread()).subscribe(s);//在主线程中处理数据
}
}
3、处理请求结果
public class HttpResultFunctionimplementsFunc1<T> {
@Override
public T call(HttpResult tHttpResult) {
if(tHttpResult.getCode() ==0) {
thrownewApiException(ApiException.EXCEPTION_CODE1);//
}
returntHttpResult.getResult();
}
}
4、异常定义
public class ApiException extends RuntimeException{
public static final int EXCEPTION_CODE1=100;
public static final int EXCEPTION_CODE2=101;
public ApiException(int resultCode) {
this(getApiExceptionMessage(resultCode));
}
public ApiException(String detailMessage) {
super(detailMessage);
}
private static String getApiExceptionMessage(intcode){
String message ="";
switch(code) {
case EXCEPTION_CODE1:
message ="异常1";
break;
case EXCEPTION_CODE2:
message ="异常2";
break;
default:
message ="网络连接失败";
}
return message;
}
}
5、定义请求API
public interface RequestService {
@POST("user/loginApi")
Observable loginApi(@Field("username") String username,@Field("password") String password,@Field("pushid") String pushid);
}
6、使用调用该登录方法
public void login( String username, String password,String pushid) {
Observable observable = HttpRequestUtils.getRequestService().loginApi(username, password,pushid).map(new HttpResultFunction());
HttpRequestUtils.getInstance().toSubscribe(observable,newSubscriber() {
@Override
public void onCompleted() {
Toast.makeText(OtherActivity.this,"完成",Toast.LENGTH_SHORT).show();
}
@Override
public void onError(Throwable throwable) {
Toast.makeText(OtherActivity.this,throwable.getMessage(),Toast.LENGTH_SHORT).show();
}
@Override
public void onNext(String s) {
Toast.makeText(OtherActivity.this,s,Toast.LENGTH_SHORT).show();
}
});
}