Запрос на 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);
        }
    });

попробуйте это