如何使用Parse在Android中进行查询?

时间:2013-06-22 22:48:35

标签: android parse-platform

My class in parse被称为“MyClass”,这个有几个对象,如

| ObjectId | Names | owners | users | (owners is a pointer of another class)

我想做一个查询,它给我属于所有者的对象“Names”中的所有名称但是,当我执行此查询时,我得到了这个:

com.parse.ParseObject@41828fe0
com.parse.ParseObject@41829fdd
com.parse.ParseObject@4182aa28

我的代码就是这个

final ParseQuery query = new ParseQuery("MyClass");
query.whereEqualTo("owners", ParseUser.getCurrentUser());
query.findInBackground(new FindCallback() {
    public void done( List<ParseObject> MyList, ParseException e) {

        if (e == null) {

            adapter = new ArrayAdapter<ParseObject>(MyActivity.this, android.R.layout.simple_list_item_1, MyList);
            listDev.setAdapter(adapter);

        }else{
            //error
        }

请帮助我如何执行该查询,该查询为我提供了属于所有者的所有名称。

修改 我找到了一个解决方案,就像这样。

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

3 个答案:

答案 0 :(得分:1)

这里真正的问题是你的ArrayAdapter。如果要将Parse对象用作数据类型,则需要自定义适配器。内置适配器不知道如何使用Parse对象,并将对象作为字符串输出。相反,你应该做类似

的事情

arrayAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, MyNamesList);

MyNamesList的类型为String

在没有更多信息的情况下很难为您的查询提供帮助,但是您正在获取Parse对象,您只需要使用类似

的名称来获取它们的名称

MyList.get(i).getString("name");

答案 1 :(得分:0)

查询方法之外的某个地方

    private ArrayList<YourObjectType> list;

public void done(List<ParseObject> objects, ParseException e) {
            if (objects == null || objects.size() == 0) {
                return; //no objects
            }
                list = new ArrayList<YourObjectType>();
            for (int i = 0; i < objects.size(); i++) {


                    YourObjectType myObject = new YourObjectType();
                    ParseObject object = objects.get(i);

                    myObject.objectId = object.getObjectId();
                    myObject.names = object.get("Names");
                    myObject.owners = object.get("owners");
                    myObject.users = object.get("users");
                    list.add(myObject);


            }



      adapter = new ArrayAdapter<YourObjectType>(MyActivity.this,android.R.layout.simple_list_item_1, MyList);
      listDev.setAdapter(adapter);
        }

现在将列表设置为适配器

你的适配器应该能够处理你的类型的对象,所以我认为你需要创建一个自定义适配器,android sdk提供的那个,不会在这里做

答案 2 :(得分:0)

解决方案非常简单,因为你正在获得com.parse.whatever,所有你需要做的就是ParseUser user = ParseUser.getCurrentUser(); 然后query.whereequalto(“owner”,user.getUsername());

问题是,你在查询currentUser而不是用户名。