2015-11-19 32 views
14

我想用Parse查詢來獲取對象。關於ParseObject的查詢

這是我的代碼:

ParseQuery<ParseObject> query = ParseQuery.getQuery("Conference"); 
    query.findInBackground(new FindCallback<ParseObject>() { 
     public void done(List<ParseObject> results, ParseException e) { 
      if (e == null) { 
       // Results were successfully found from the local datastore. 
      } else { 
       showLog(e.toString()); 
      } 
     } 
    }); 

我得到這個錯誤:

com.parse.ParseException: java.lang.IllegalStateException: ParseObject has no data for 'objectId'. Call fetchIfNeeded() to get the data.

BTW我Conference類包含指針。

+0

你必須獲取該指針對象的數據。 –

+0

我得到了同樣的錯誤,我的班級甚至沒有包含任何指針。它非常簡單,只包含一個「名稱」列(除了默認列)。 –

回答

8

如果你直接從解析查詢,你可以這樣做:

ParseQuery<ParseObject> query = ParseQuery.getQuery("Conference"); 
... 
query.include("name_of_the_column_containing_a_pointer"); 
query.include("another_pointer_column"); 
query.findInBackground(new FindCallback<ParseObject>() { 
    public void done(List<ParseObject> results, ParseException e) { 
     if (e == null) { 
      // You can now access the pointers specified in the include 
     } else { 
      showLog(e.toString()); 
     } 
    } 
}); 

否則,如果要查詢的本地數據存儲:

ParseQuery<ParseObject> query = ParseQuery.getQuery("Conference"); 
... 
query.findInBackground(new FindCallback<ParseObject>() { 
    public void done(List<ParseObject> results, ParseException e) { 
     if (e == null) { 
      ParseObject parseObject = results.get(0); // Get the object 
      parseObject.fetchIfNeededInBackground(new GetCallback<ParseObject>() { 
       public void done(ParseObject result, ParseException e) { 
        if (e == null) 
         // Do something with result 
       } 
      } 
     } else { 
      showLog(e.toString()); 
     } 
    } 
}); 
+0

如果我的類不包含指針並拋出錯誤呢? –

1

我有同樣的問題。問題是我在ParseObject實現overrided的getObjectId方法:

@ParseClassName("MyOwnParseClass") 
public class MyOwnParseClassextends ParseObject {  
    public static ParseQuery<MyOwnParseClass> getQuery() { 
     return ParseQuery.getQuery(MyOwnParseClass.class); 
    } 

    public String getObjectId() { 
     return getString("objectId"); 
    } 

    public String getName() { 
     return getString("name"); 
    } 

    public void setName(String name) { 
     put("name", name); 
    } 
} 

ParseObject已經有一個getObjectId()方法和使用

return getString("objectId"); 

不返回objectId

+0

嗨juergen我能夠使用以下方法之一獲取objectId字符串:String id = ParseUser.getCurrentUser()。getObjectId();在Findcallback done函數中。第二種方法 - 也在findCallBack的done()函數中返回的數據被命名爲對象。 objects.get(0).getObjectId(); –

+0

這是第三種方法。主要的關鍵是將您的ParseObject設置爲最終變量,以便您可以在done()方法中引用它。 final ParseObject po = new ParseObject(「Test」); po.put(「username」,temp.getUserName());如果(e == null){String id = po.getObjectId(); Log.d(TAG,「對象標識符是:」+「SaveCallback(){public void done(ParseException e) Logged(TAG,「User update error:」+ e); } } });我希望這可以幫助你。 –

+0

這些只是調用相同方法的3個不同的代碼段:'ParseObject'的getObjectId()'我在回答中已經提到的 –

1

試試這個代碼

ParseQuery<ParseObject> query = ParseQuery.getQuery("MyClass"); 
     ParseUser user = ParseUser.getCurrentUser(); 
     query.whereEqualTo("owners", user); 
     query.findInBackground(new FindCallback<ParseObject>() { 
      @Override 
      public void done(List<ParseObject> objects, com.parse.ParseException e) { 
       if (e == null) { 
        for (ParseObject parseObject : objects){ 
         String task; 
         task= parseObject.get("owners").toString(); 
         adapter.add(task); 
         adapter.notifyDataSetChanged(); 
        } 
       } else { 
        // Something went wrong. 
        Toast.makeText(getActivity(),"Error: " + e.getMessage().toString(),Toast.LENGTH_SHORT).show(); 
       } 
      } 
     }); 
2

@Juergen您好我是能夠得到使用下列方法之一objectId字符串:

String id = ParseUser.getCurrentUser().getObjectId(); 

Findcallback done函數中。

的第二種方式 - 也是在findCallBackdone()函數,其中返回的數據被命名爲

objects.objects.get(0).getObjectId(); 

這裏是第三條路。這裏的主要關鍵是將你的ParseObject設置爲最終變量,所以你可以在你的done()方法中引用它。

final ParseObject po = new ParseObject("Test"); 
po.put("username", temp.getUserName()); 
po.saveInBackground(new SaveCallback() { 
public void done(ParseException e) { 
    if (e == null) { 
    String id = po.getObjectId(); 
    Log.d(TAG, "The object id is: " + id); 
    } else { // The save failed. Log.d(TAG, "User update error: " + e); 
    } 
} 
}); 

我希望這可以幫助你。

1
ParseQuery<ParseObject> queryP = ParseQuery.getQuery("Courses"); 
    queryP.whereEqualTo("Student", nameStudent); 
    queryP.findInBackground(new FindCallback<ParseObject>() { 
     @Override 
     public void done(List<ParseObject> coursesList, ParseException e) 
     { 
      ArrayList<String> courses = null; 
      if (e == null) 
      { 
       courses = new ArrayList<String>(); 
       for (ParseObject course : coursesList) 
       { 
        String courseName = course.getString("CoursesNameInParseColumn");  
        courses.add(courseName); 
       } 
      } 
      else 
      { 
       Log.d("Post retrieval", "Error: " + e.getMessage()); 
      } 

      populateCoursesList(courses); 
     } 
    }); 

嘗試了這一點