Запрос на ParseObject
Я пытаюсь получить объект с запросом 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(), чтобы получить данные.
BTW my Conference
Класс содержит указатели.
Ответы
Ответ 1
Если вы запрашиваете непосредственно из 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());
}
}
});
Ответ 2
Привет @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);
}
}
});
Надеюсь, это поможет вам.
Ответ 3
У меня была та же проблема. Проблема заключалась в том, что я переопределил метод 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
.
Ответ 4
Попробуйте этот код
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();
}
}
});
Ответ 5
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);
}
});
попробуйте это