使用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
- 使用RxJava+OKhttp3进行图片下载
- 使用RxJava+OKhttp3进行图片下载
- RxJava,Retrofit,OkHttp3结合使用
- RxJava,Retrofit,OkHttp3在项目中结合使用
- Android Retrofit 2.0(二)使用教程OkHttp3 + Gson + RxJava
- Retrofit Rxjava 图片下载
- Rxjava+Retrofit2+Okhttp3
- 初探Okhttp3+Retrofit2+RXJava
- Okhttp3+Rxjava+Retrofit2封装
- 使用线程进行网络图片下载(一)
- Retrofit2初尝试(rxjava + okhttp3)
- retrofit2+okhttp3+rxjava网络封装
- okhttp3使用
- okhttp3使用
- okhttp3使用
- okhttp3使用
- 使用SDWebImage进行简单的图片下载和缓存
- 使用okhttp进行图片下载,上传,get,post网络请求
- kmp的c++代码
- JavaScript引用类型——Array类型
- 使用Flume向HDFS持久化数据(日志)
- powerbuilder调用数据库存储过程
- bzoj2338: [HNOI2011]数矩形
- 使用RxJava+OKhttp3进行图片下载
- Linux多路复用epoll浅析
- Android开发之路的起点
- HD 1016 Prime Ring Problem(素数环问题)
- Jasmine文档(三)
- HTML5<audio>标签声音告警实例
- Bootstrap的代码样例
- eclipse 安装python后pydev不出现
- 2016多校训练Contest6: 1008 To My Girlfriend hdu5800