使用RxJava+OKhttp3进行图片下载

来源:互联网 发布:铃声制作软件下载 编辑:程序博客网 时间:2024/05/10 14:11

1、创建类来初始化一个观察者

package test.ban.com.rx_project;/** * Created by apple on 16/8/5. */import java.io.IOException;import okhttp3.Call;import okhttp3.Callback;import okhttp3.OkHttpClient;import okhttp3.Request;import okhttp3.Response;import rx.Observable;import rx.Subscriber;/** * 作者:ban on 16/8/5 16:21 */public class DownloadUtils {    private OkHttpClient mOkHttpClient;    public DownloadUtils() {        mOkHttpClient = new OkHttpClient();    }    /**     * 声明一个被观察者对象作为结果返回     *     * @param path     * @return     */    public Observable<byte[]> downloadIamge(final String path) {        return Observable.create(new Observable.OnSubscribe<byte[]>() {            @Override            public void call(final Subscriber<? super byte[]> subscriber) {                if (!subscriber.isUnsubscribed()) {                    //访问网络操作                    Request request = new Request.Builder().url(path).build();                    mOkHttpClient.newCall(request).enqueue(new Callback() {                        @Override                        public void onFailure(Call call, IOException e) {                            subscriber.onError(e);                        }                        @Override                        public void onResponse(Call call, Response response) throws IOException {                            if (response.isSuccessful()) {                                byte[] data = response.body().bytes();                                if (data != null) {                                    subscriber.onNext(data);                                }                            }                            subscriber.onCompleted();                        }                    });                }            }        });    }}

2、MainActivity

package test.ban.com.rx_project;import android.app.Activity;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.ImageView;import rx.Subscriber;import rx.android.schedulers.AndroidSchedulers;import rx.schedulers.Schedulers;public class MainActivity extends Activity {    private static final String TAG = "MainActivity";    private Button mButton;    private ImageView mImageView;    private final String PATH = "https://ss0.bdstatic" +            ".com/5aV1bjqh_Q23odCf/static/superman/img/logo/bd_logo1_31bdc765.png";    private DownloadUtils mDownloadUtils;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mDownloadUtils = new DownloadUtils();        mButton = (Button) findViewById(R.id.button);        mImageView = (ImageView) findViewById(R.id.imageView2);        mButton.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                //使用http协议获取数据                mDownloadUtils.downloadIamge(PATH)                        .subscribeOn(Schedulers.io())                        .observeOn(AndroidSchedulers.mainThread())                        .subscribe(new Subscriber<byte[]>() {                            @Override                            public void onCompleted() {                                Log.e(TAG, "=====onCompleted=====");                                //这里一般处理对话框消失                            }                            @Override                            public void onError(Throwable e) {                                Log.e(TAG, "onError: ", e);                            }                            @Override                            public void onNext(byte[] bytes) {                                Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes                                        .length);                                mImageView.setImageBitmap(bitmap);                            }                        });            }        });    }}

3、activity_main.xml

<?xml version="1.0" encoding="utf-8"?><RelativeLayout    xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:fitsSystemWindows="true"    tools:context="test.ban.com.rx_project.MainActivity">    <Button        android:text="Button"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentBottom="true"        android:layout_centerHorizontal="true"        android:layout_marginBottom="130dp"        android:id="@+id/button"/>    <ImageView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        app:srcCompat="@mipmap/ic_launcher"        android:layout_alignParentTop="true"        android:layout_centerHorizontal="true"        android:layout_marginTop="108dp"        android:id="@+id/imageView2"/></RelativeLayout>
需要的权限:<uses-permission android:name="android.permission.INTERNET"/>

0 0
原创粉丝点击