1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158
| /** * 使用retrofit框架下载数据 */ public class RetrofitUtils {
IOKgoResult<Response<ResponseBody>> result; IOKgoResult<Bean> result2;
public void setResult(IOKgoResult<Response<ResponseBody>> result){ this.result = result; }
public void setResult2(IOKgoResult<Bean> result2){ this.result2 = result2; }
/** * retrofit底层封装了OKHttp框架,真正的下载还是由OKHttp来实现 * 说明:使用enqueue()实现异步下载 */ public void getStr(){
OkHttpClient client = new OkHttpClient.Builder().build();
Retrofit rbuilder = new Retrofit.Builder() .baseUrl(Strings.BASE_URL) .client(client).build();
IRetrofitResult retrofitResult = rbuilder.create(IRetrofitResult.class); Call<ResponseBody> info = retrofitResult.getInfo(); info.enqueue(new Callback<ResponseBody>() { @Override public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) { result.getResult(response); }
@Override public void onFailure(Call<ResponseBody> call, Throwable t) {
} }); }
/** * 使用retrofit执行下载,调用execute()执行同步请求 * 没有rxjava的时候,如果使用retrofit同步方式下载会报错 * 解决方式:1.new Thread * 2.使用Rxjava */ public void getStr_tongbu(){
OkHttpClient client = new OkHttpClient.Builder().build();
Retrofit retrofit = new Retrofit.Builder(). client(client) .baseUrl(Strings.BASE_URL) .build();
IRetrofitResult retrofitResult = retrofit.create(IRetrofitResult.class);
Response<ResponseBody> bodyResponse;
try { bodyResponse = retrofitResult.getInfo().execute(); result.getResult(bodyResponse); } catch (IOException e) { e.printStackTrace(); } }
/** * 使用retrofit同步+rxjava */ public void rxjavaTest(){
OkHttpClient client = new OkHttpClient.Builder().build();
Retrofit retrofit = new Retrofit.Builder(). client(client) .baseUrl(Strings.BASE_URL) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .addConverterFactory(GsonConverterFactory.create()) .build();
IRetrofitResult retrofitResult = retrofit.create(IRetrofitResult.class);
//被观察者 Observable<Bean> observable = retrofitResult.getBean(); //被观察者订阅观察者(Observer是观察者) /** * 观察者创建的两种方式 * 方式一:new Observer * 方式二:new Subscriber * 区别:底层是将方式一转换为方式二执行,并且方式二新增onStart()方法 */ // observable.subscribe(new Observer<ResponseBody>() { // @Override // public void onCompleted() { // // } // // @Override // public void onError(Throwable e) { // // } // // @Override // public void onNext(ResponseBody responseBody) { // // } // });
// observable // .observeOn(AndroidSchedulers.mainThread()) // .subscribeOn(Schedulers.io()) // .subscribe(new Subscriber<Bean>() { // @Override // public void onCompleted() { // // } // // @Override // public void onError(Throwable e) { // // } // // @Override // public void onNext(Bean responseBody) { // result2.getResult(responseBody); // } // });
/** * 观察者中的方法可以使用Action对象来单独处理 * subscribe() */ //处理next方法 Action1<Bean> onNext = new Action1<Bean>() { @Override public void call(Bean bean) { result2.getResult(bean); } };
//处理异常的对象 Action1<Throwable> error = new Action1<Throwable>() { @Override public void call(Throwable e) { Log.d("amy",e.getMessage()); } };
observable .observeOn(AndroidSchedulers.mainThread()) .subscribeOn(Schedulers.newThread()) .subscribe(onNext,error); } }
|