首页 > 编程 > Java > 正文

RxJava学习总结3

2019-11-09 13:52:18
字体:
来源:转载
供稿:网友

在Android开发中,网络请求无疑是必不可少的,当Rxjava运用在网络请求是怎么样的呢?

跟普通的网络请求又有什么区别呢?

这里我们来演示一下利用通过网络去下载一张图片作为例子,这里我们采用okhttp来作为网络请求框架。

MainActivity.java:

public class MainActivity extends ActionBarActivity {    PRivate final  static  String TAG = MainActivity.class.getSimpleName();    private Button button;    private ImageView imageView;    private String PATH = "http://pic32.nipic.com/20130829/12906030_124355855000_2.png";    private DownLoadUtils utils;    /**     * 采用handler 结合了activity使用     * @param savedInstanceState     */    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        button = (Button)this.findViewById(R.id.button);        imageView = (ImageView)this.findViewById(R.id.imageView);        utils = new DownLoadUtils();        button.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                //使用HTTP协议获取数据               utils.downLoadImage(PATH).subscribeOn(Schedulers.io())			   .observeOn(AndroidSchedulers.mainThread()).subscribe(new Subscriber<byte[]>() {                   @Override                   public void onCompleted() {                       Log.i(TAG,"onCompleted");//对话框消失                   }                   @Override                   public void onError(Throwable e) {                       Log.i(TAG,e.getMessage());                   }                   @Override                   public void onNext(byte[] bytes) {                       Bitmap bitmap = BitmapFactory.decodeByteArray(bytes,0,bytes.length);					   //将拿到的数据转换为图片                       imageView.setImageBitmap(bitmap);                   }               });            }        });    }}

DownLoadUtils.java:

   private OkHttpClient client;    public DownLoadUtils(){        client = new OkHttpClient();    }    /**     * 声明一个被观察者对象,作为结果返回     * @param path     * @return     */    public Observable<byte[]> downLoadImage(String path){       return Observable.create(new Observable.OnSubscribe<byte[]>() {           @Override           public void call(Subscriber<? super byte[]> subscriber) {               if (!subscriber.isUnsubscribed()){                  //访问网络操作                   Request request = new Request.Builder().url(path).build();                   client.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();                       }                   });               }           }       });    }上面演示了如何利用Rxjava+okhttp从网络下载图片并显示的过程,Rxjava在网络请求中的优点在于可以随意切换线程,而避免采用Handler的形式去切换线程更新UI。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表