2016-02-15 125 views
0

我在读一本名为“RxJava Essentials”的书。以下代码来自那里。我修改了一下。RxJava回调

我在我的ActivityOnCreate中调用了refreshList()subscriber.onNext()已在getApps()多次调用,subscriber.onCompleted()已被调用。之后,onNext callbak(在refreshList()中执行)已被调用。 public void onNext(List<AppInfo> appInfos)

我徘徊为什么onNext()当调用subscriber.onNext()时调用不被调用?为什么后来被调用?

void refreshList() 
{ 
    getApps().toSortedList() 
    .subscribe(new Observer<List<AppInfo>>() 
    { 
     @Override 
     public void onCompleted() { 
      Log.e(TAG, "onCompleted()"); 
     } 

     @Override 
     public void onError(Throwable te) { 
      Log.e(TAG, "onError()"); 
     } 

     @Override 
     public void onNext(List<AppInfo> appInfos) { 
      Log.e(TAG, "onNext()"); 

      for (AppInfo tmpInfo : appInfos) 
      { 
       //tmpInfo.toString(); 
       Log.e(TAG, String.format("tmpInfo = %s", tmpInfo.toString())); 
      } 
     } 
    }); 
} 


private Observable<AppInfo> getApps() 
{ 
    return Observable.create(subscriber -> 
    { 
     List<AppInfoRich> apps = new ArrayList<>(); 

     final Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); 

     mainIntent.addCategory(Intent.CATEGORY_LAUNCHER); 

     List<ResolveInfo> infos = getPackageManager().queryIntentActivities(mainIntent, 0); 

     for (ResolveInfo info : infos) 
     { 
      apps.add(new AppInfoRich(this, info)); 
     } 

     for (AppInfoRich appInfo : apps) 
     { 
      Bitmap icon = BitmapUtils.drawableToBitmap(appInfo.getIcon()); 
      String name = appInfo.getName(); 
      String iconPath = mFilesDir + "/" + name; 

      //BitmapUtils.storeBitmap(App.instance, icon, name); 

      BitmapUtils.storeBitmap(getApplicationContext(), icon, name); 

      if(subscriber.isUnsubscribed()) 
      { 
       return; 
      } 

      subscriber.onNext(new AppInfo(name, iconPath, appInfo.getLastUpdateTime())); 

     } 

     if(!subscriber.isUnsubscribed()) 
     { 
      subscriber.onCompleted(); 
     } 
    }); 
} 

回答

1

您不直接订阅您创建的观察值。您正在订阅toSortedList operator的结果,该结果将所有发出的项目收集到列表中,对其进行排序,然后发出列表。

+0

感谢您的回答。 – MomAndDad