Rxjava基本demo


详情请查看 http://www.jianshu.com/p/856297523728

import rx.Observable;
  import rx.Observer;
  import rx.Subscriber;
  import rx.android.schedulers.AndroidSchedulers;
  import rx.functions.Action0;
  import rx.functions.Action1;
  import rx.functions.Func1;
  import rx.schedulers.Schedulers;
 
public void onClick(View view) {
  switch (view.getId()) {
  case R.id.bt_one:
  //mainProgressBar.setVisibility(View.VISIBLE);
  //setBitmap1();
  //setBitmap2();
  setBitmap3();
  break;
  case R.id.bt_two:
  Intent intent = new Intent(MainActivity.this, OtherActivity.class);
  startActivity(intent);
  break;
  }
  }
   
  /**
 

* 异步设置图片

  */
  private void setBitmap1() {
  //创建被观察者
  Observable.create(new Observable.OnSubscribe<Bitmap>() {
  /**
  * 复写call方法
  *
  * @param subscriber 观察者对象
  */
  @Override
  public void call(Subscriber<? super Bitmap> subscriber) {
  //通过URL得到图片的Bitmap对象
  Bitmap bitmap = GetBitmapForURL.getBitmap(url);
  //回调观察者方法
  subscriber.onNext(bitmap);
  subscriber.onCompleted();
  Log.i(" call ---> ", "运行在 " + Thread.currentThread().getName() + " 线程");
  }
  })
  .subscribeOn(Schedulers.io()) // 指定subscribe()发生在IO线程
  .observeOn(AndroidSchedulers.mainThread()) // 指定Subscriber的回调发生在UI线程
  .subscribe(new Observer<Bitmap>() { //订阅观察者(其实是观察者订阅被观察者)
   
  @Override
  public void onNext(Bitmap bitmap) {
  mainImageView.setImageBitmap(bitmap);
  Log.i(" onNext ---> ", "运行在 " + Thread.currentThread().getName() + " 线程");
  }
   
  @Override
  public void onCompleted() {
  mainProgressBar.setVisibility(View.GONE);
  Log.i(" onCompleted ---> ", "完成");
  }
   
  @Override
  public void onError(Throwable e) {
  Log.e(" onError --->", e.toString());
  }
  });
  }
   
  /**
 

* 事件参数类型的变换

 

* 将String类型的URL转换成Bitmap

  */
  private void setBitmap2() {
  //先传递String类型的Url
  Observable.just(url)
  .map(new Func1<String, Bitmap>() {
  @Override
  public Bitmap call(String s) {
  //通过Map转换成Bitmap类型发送出去
  return GetBitmapForURL.getBitmap(s);
  }
  })
  .subscribeOn(Schedulers.io()) // 指定subscribe()发生在IO线程
  .observeOn(AndroidSchedulers.mainThread()) // 指定Subscriber的回调发生在UI线程
  //可以看到,这里接受的类型是Bitmap,而不是String
  .subscribe(new Action1<Bitmap>() {
  @Override
  public void call(Bitmap bitmap) {
  mainImageView.setImageBitmap(bitmap);
  mainProgressBar.setVisibility(View.GONE);
  }
  });
  }
   
   
  /**
 

* 事件参数类型的变换

 

* 将String类型的URL转换成Bitmap

 

* doOnSubscribe的使用

  */
  private void setBitmap3() {
  Observable.just(url) //IO线程
  .map(new Func1<String, Bitmap>() {
  @Override
  public Bitmap call(String s) {
  Log.i(" map ---> ", "执行");
  Log.i(" map ---> ", Thread.currentThread().getName());
  return GetBitmapForURL.getBitmap(s);
  }
  })
  .subscribeOn(Schedulers.io()) // 指定subscribe()发生在IO线程
  .doOnSubscribe(new Action0() { //需要在主线程中执行 测试来看 默认运行在main线程 ?
  @Override
  public void call() {
  //mainProgressBar.setVisibility(View.VISIBLE);
  Log.i(" doOnSubscribe ---> ", "执行");
  Log.i(" doOnSubscribe ---> ", Thread.currentThread().getName());
  }
  })
  .observeOn(Schedulers.io()) // 指定Subscriber的回调发生在io线程
  .subscribe(new Action1<Bitmap>() {
  @Override
  public void call(Bitmap bitmap) {
  //mainImageView.setImageBitmap(bitmap);
  //mainProgressBar.setVisibility(View.GONE);
  Log.i(" subscribe ---> ", "执行");
  Log.i(" subscribe ---> ", Thread.currentThread().getName());
  }
  });
  }





public class GetBitmapForURL {
   
  public static Bitmap getBitmap(String url) {
  //获取传进来的参数
  Bitmap bitmap = null;
  URLConnection connection;
  InputStream is;
  BufferedInputStream bis;
  try {
  connection = new URL(url).openConnection();
  is = connection.getInputStream();
  //为了更清楚的看到加载图片的等待操作,将线程休眠2秒钟
  Thread.sleep(2000);
  bis = new BufferedInputStream(is);
  //通过decodeStream方法解析输入流
  bitmap = BitmapFactory.decodeStream(bis);
   
  is.close();
  bis.close();
  } catch (Exception e) {
  e.printStackTrace();
  }
  return bitmap;
  }
  }

猜你喜欢

转载自blog.csdn.net/zqj861791241/article/details/78396314