Я пытаюсь получить объект с запросом Parse.
Это мой код:
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 не имеет данных для 'objectId'. Вызовите fetchIfNeeded (), чтобы получить данные.
- Parse CorodvaPush Ionic: Android не показывает уведомления, когда приложение в фоновом режиме
- Не удалось запустить приемник com.parse.ParseBroadcastReceiver в приложении Trigger.io для Android
- NullPointerException при входе в систему с помощью Facebook SDK и ParseFacebookUtils
- Как удалить и выйти из текущего пользователя
- Проблема входа в Android для Android Facebook с parse sdk
BTW мой класс Conference
содержит указатели.
Если вы запрашиваете непосредственно из Parse, вы можете сделать следующее:
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()); } } });
Привет @Juergen Мне удалось получить строку objectId
используя один из следующих способов:
String id = ParseUser.getCurrentUser().getObjectId();
В функции Findcallback done
.
Второй способ – также в функции done()
для findCallBack
где возвращенные данные называются
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); } } });
Я надеюсь, это поможет вам.
У меня такая же проблема. Проблема заключалась в том, что я переопределил метод getObjectId
в своих реализациях ParseObject
:
@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
.
Попробуйте этот код
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(); } } });
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); } });
Попробуйте это