2015-10-28 37 views
0

我使用的是Parse.com,爲了獲取我想要的信息,我使用它的查詢。想要從Android中的Parse getCallback獲取數據

於是我就用那一個:

ParseUser PhotoeUser; 

ParseQuery<Photo> UserQuery = ParseQuery.getQuery(Photo.class); 
     UserQuery.whereEqualTo("objectId", PhotoID); 
     UserQuery.getFirstInBackground(new GetCallback<Photo>() { 
      @Override 
      public void done(Photo pPhoto, ParseException error) { 
       PhotoUser = pPhoto.getUser(); 
      } 
     }); 

所以我想簡單地使用PhotoUser之外的查詢的內容。但是,當我寫:

Log.i("Profile", "PhotoUser = " + PhotoUser.get("objectId")); 

PhotoUser.get("objectId")null

另一個例子是這樣的一個:

​​

在這裏,當我想要回PhotoUser,它是null

請幫幫我。如果您需要更多信息,只需要詢問。

回答

0

就拿ParseUser外塊:

PhotoUser pUser; 
ParseQuery<Photo> UserQuery = ParseQuery.getQuery(Photo.class); 
    UserQuery.whereEqualTo("objectId", PhotoID); 
    UserQuery.getFirstInBackground(new GetCallback<Photo>() { 
     @Override 
     public void done(Photo pPhoto, ParseException error) { 
      pUser = pPhoto.getUser(); 
     } 
    }); 

不要忘了給變量的名稱。我不知道當您查詢Photo時,您想如何獲得PhotoUser

+0

PhotoUser之初已經命名的,我編輯我上面的代碼,所以你可以看到它。 –

1

你的方法

public ParseUser getUser(){ 
ParseQuery<Photo> UserQuery = ParseQuery.getQuery(Photo.class); 
UserQuery.whereEqualTo("objectId", PhotoID); 
UserQuery.getFirstInBackground(new GetCallback<Photo>() { 
    @Override 
    public void done(Photo pPhoto, ParseException error) { 
    PhotoUser = pPhoto.getUser(); 
    } 
}); 

return PhotoUser; 
} 

回報null因爲是簡單地說就是,當你回來吧。您正在創建後臺任務,該任務在完成後設置PhotoUser,但在創建任務後立即返回當前參考PhotoUser。該任務稍後完成,並設置您的PhotoUser。因此,當任務完成時,或者您使用ParseQuery.get()塊,直到它找到該對象,則不會返回任何內容並調用某種方法。

另外,請在開始時用小寫字母命名成員變量。 (userQueryphotoUser)。

編輯: 按照要求,更改您的代碼:

public ParseUser getUser(){ 
ParseQuery<Photo> UserQuery = ParseQuery.getQuery(Photo.class); 
UserQuery.whereEqualTo("objectId", PhotoID); 
PhotoUser = UserQuery.getFirst().getUser(); 
return PhotoUser; 
} 

public void getUser(){ 
ParseQuery<Photo> UserQuery = ParseQuery.getQuery(Photo.class); 
UserQuery.whereEqualTo("objectId", PhotoID); 
UserQuery.getFirstInBackground(new GetCallback<Photo>() { 
    @Override 
    public void done(Photo pPhoto, ParseException error) { 
    PhotoUser = pPhoto.getUser(); 
    doWork(); 
    } 
}); 
} 

private void doWork() { 
    // do what you want to do with your PhotoUser, it is not null now 
} 
+0

你是什麼意思與ParseQuery.get()?你能否把它用於我的代碼?謝謝! :) –

+0

只需將'返回PhotoUser'放在'done'裏面,因爲查詢會在後臺執行,程序會繼續執行下一個方法。 –

+0

這不起作用,該方法不會返回任何內容和運行時。根據要求,我更新了我的評論。 – Syex

相關問題