2015-11-19 17 views
14

Próbuję uzyskać obiekt z zapytaniem Analiza.Zapytanie dotyczące obiektu ParseObject

To jest mój kod:

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()); 
      } 
     } 
    }); 

otrzymuję ten błąd:

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

BTW mój Conference klasa zawiera wskazówki.

+0

trzeba pobrać dane z tego obiektu wskaźnika. –

+0

Otrzymuję ten sam błąd i moja klasa nie zawiera żadnych wskaźników. Jest bardzo prosty i zawiera tylko kolumnę 'name' (oprócz domyślnych kolumn). –

Odpowiedz

8

Jeśli zapytań bezpośrednio z Parse, można zrobić:

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()); 
     } 
    } 
}); 

W przeciwnym razie, jeśli jesteś zapytań lokalnego magazynu danych:

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

A jeśli moja Klasa nie zawiera wskaźnika i mimo to zgłasza błąd? –

1

miałem ten sam problem. Problem polegał na tym, że overrided metodę getObjectId w moich ParseObject wdrożeń:

@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); 
    } 
} 

Ale ParseObject ma już getObjectId() sposób i przy użyciu

return getString("objectId"); 

nie zwraca objectId.

+0

Hi juergen Udało mi się uzyskać ciąg objectId za pomocą jednego z następujących sposobów: String id = ParseUser.getCurrentUser(). GetObjectId(); w ramach wykonanej funkcji Findcallback. Drugi sposób - również w done() funkcji findCallBack, gdzie zwrócone dane są nazwane obiektami. objects.get (0) .getObjectId(); –

+0

Oto trzecia droga. Głównym kluczem jest ustawienie parametru ParseObject jako zmiennej końcowej, aby można było odwoływać się do niego w metodzie done(). final ParseObject po = new ParseObject ("Test"); po.put ("nazwa użytkownika", temp.getUserName()); po.saveInBackground (new SaveCallback() {public void done (ParseException e) { if (e == null) {String id = po.getObjectId(); Log.d (TAG, "Identyfikator obiektu to:" + id); } else { // Zapisanie nie powiodło się Log.d (TAG, "Błąd aktualizacji użytkownika:" + e); } } }); Mam nadzieję, że to Ci pomoże. –

+0

To tylko 3 różne segmenty kodu wywołujące tę samą metodę: 'getObjectId()' z 'ParseObject', o czym już wspomniałem w mojej odpowiedzi –

1

wypróbować ten kod

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

Hi @Juergen udało mi się uzyskać ciąg objectId przy użyciu jednej z następujących metod:

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

wewnątrz funkcji Findcallback done.

Drugi sposób - również w funkcji done() z findCallBack gdzie zwrócone dane są nazwane

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

Oto trzecia droga. Głównym kluczem jest tutaj ustawienie zmiennej ParseObject jako zmiennej końcowej, aby można było odnieść się do niej w swojej metodzie 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); 
    } 
} 
}); 

Mam nadzieję, że ci to pomoż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); 
     } 
    }); 

to wypróbować

Powiązane problemy