Android/Java网络加载框架Retrofit(三)结合RxJava2与RxAndroid2

来源:互联网 发布:智能手表软件下载 编辑:程序博客网 时间:2024/05/18 00:12

Android/Java网络加载框架Retrofit(三)结合RxJava2与RxAndroid2


把Retrofit与RxAndroid 2与RxJava 2联合使用,实现一个简单功能:加载一批图片到ListView中。

package zhangphil.http;import android.app.ListActivity;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.os.Bundle;import android.support.annotation.NonNull;import android.support.annotation.Nullable;import android.view.View;import android.view.ViewGroup;import android.widget.ArrayAdapter;import android.widget.ImageView;import io.reactivex.Observable;import io.reactivex.android.schedulers.AndroidSchedulers;import io.reactivex.disposables.CompositeDisposable;import io.reactivex.observers.DisposableObserver;import io.reactivex.schedulers.Schedulers;import okhttp3.ResponseBody;import retrofit2.Retrofit;import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;import retrofit2.http.GET;import retrofit2.http.Path;public class MainActivity extends ListActivity {    private MyRetrofitService mRetrofitService;    private CompositeDisposable mCompositeDisposable = new CompositeDisposable();    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        Retrofit mRetrofit = new Retrofit.Builder()                .baseUrl("https://www.baidu.com/")                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())                .build();        mRetrofitService = mRetrofit.create(MyRetrofitService.class);        ArrayAdapter mArrayAdapter = new ArrayAdapter(this, 0) {            @NonNull            @Override            public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {                if (convertView == null) {                    convertView = new ImageView(getContext());                }                setBitmap("bd_logo1.png", (ImageView) convertView);                return convertView;            }            @Override            public int getCount() {                return 20;            }        };        setListAdapter(mArrayAdapter);    }    private void setBitmap(String picName, final ImageView imageView) {        DisposableObserver disposableObserver = new DisposableObserver<ResponseBody>() {            @Override            public void onNext(@NonNull ResponseBody responseBody) {                try {                    byte[] bytes = responseBody.bytes();                    Bitmap bmp = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);                    imageView.setImageBitmap(bmp);                } catch (Exception e) {                    e.printStackTrace();                }            }            @Override            public void onComplete() {            }            @Override            public void onError(Throwable e) {            }        };        mCompositeDisposable.add(disposableObserver);        mRetrofitService                .getImagesByName(picName)                .subscribeOn(Schedulers.io())                .observeOn(AndroidSchedulers.mainThread())                .subscribeWith(disposableObserver);    }    private interface MyRetrofitService {        @GET("img/{picName}")        Observable<ResponseBody> getImagesByName(@Path("picName") String picName);    }    @Override    protected void onDestroy() {        super.onDestroy();        mCompositeDisposable.clear();    }}



注意在Gradle里面添加引用:

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


阅读全文
0 0
原创粉丝点击