2017-01-06 96 views
0

我一直在试图理解RxJava 2以及如何使用它。我也试图通过将我的代码转换为RxJava代码来了解RxJava。但我似乎还不能理解它。如果有人能够进一步解释我如何进行重新编码,我会非常感谢。转换代码到RxJava2代码

这是我试图代码RxJava代码:

private static User getUserFomCursor(Cursor cursor) { 
     if (cursor == null || cursor.getCount() == 0) { 
      return null; 
     } else { 
      int myUserIDColumnIndex = cursor.getColumnIndex("_USER_ID"); 
      int usernameColumnIndex = cursor.getColumnIndex("USER_NAME"); 
      int userPasswordColumnIndex = cursor.getColumnIndex("USER_PASSWORD"); 
      int firstNameColumnIndex = cursor.getColumnIndex("FIRST_NAME"); 
      int middleNameColumnIndex = cursor.getColumnIndex("MIDDLE_NAME"); 
      int lastNameColumnIndex = cursor.getColumnIndex("LAST_NAME"); 
      int emailAddressColumnIndex = cursor.getColumnIndex("EMAIL_ADDRESS"); 
      int phoneNumberColumnIndex = cursor.getColumnIndex("PHONE_NUMBER"); 
      int profilePictureColumnIndex = cursor.getColumnIndex("PROFILE_PICTURE"); 
      try { 
       User user = new User(
         cursor.getInt(myUserIDColumnIndex), cursor.getString(usernameColumnIndex), 
         cursor.getString(userPasswordColumnIndex), cursor.getString(firstNameColumnIndex), 
         cursor.getString(middleNameColumnIndex), cursor.getString(lastNameColumnIndex), 
         cursor.getString(emailAddressColumnIndex), cursor.getString(phoneNumberColumnIndex), 
         cursor.getString(profilePictureColumnIndex)); 
       return user; 
      } catch (Exception e) { 
       return null; 
      } 
     } 
    } 

public ArrayList<User> getMyUsers() { 
     User user = new User(); 
     ArrayList <User> userArrayList = new ArrayList<User>(); 
     open(); 
     try { 
      Cursor cursor = userLocalDatabase.query("User", null, null, null, null, null, null); 
      while (cursor.moveToNext()) { 
       user = getUserFomCursor(cursor); 
       userArrayList.add(user); 
      } 
     } catch (SQLException e) { 
      e.printStackTrace(); 
     } 
     close(); 
     return userArrayList; 
    } 

我试图让getMyUsers()方法为可观察到的。但是我仍然对如何解决这个问题感到困惑。我真的很感激,如果有人会指出我正确的方向。 :)

回答

1

你应该能够做这样的事情:

public Observable<User> getMyUsers() { 
    return Observable.create(subscriber -> { 

     open(); 
     try { 
      Cursor cursor = userLocalDatabase.query("User", null, null, null, null, null, null); 
      while (cursor.moveToNext()) { 
       User user = getUserFomCursor(cursor); 
       subscriber.onNext(user); 
      } 
     } catch (SQLException e) { 
      e.printStackTrace(); 
     } 
     close(); 
     subscriber.onCompleted(); 
    }); 
}