存储给定ParseUser的所有ParseFiles?

时间:2013-11-27 18:04:17

标签: java android arraylist parse-platform

我是Parse的新手,想知道是否有办法将给定ParseUser的所有ParseFiles(在本例中为图像)存储到类似ArrayList的内容中?

这是我的代码:

public ArrayList<ParseFile> getFiles() {

    ArrayList<ParseFile> files = new ArrayList<ParseFile>();

    //mUser is the current ParseUser
    ParseQuery<ParseObject> query = ParseQuery.getQuery(mUser.getUsername());
    query.findInBackground(new FindCallback<ParseObject>() {
        public void done(List<ParseObject> fileList, ParseException e) {
            if (e == null) {
                Log.d("FILES", "Retrieved " + fileList.size() + " files");

                for(ParseObject ch:fileList) {


                    image = ch.getParseFile("image");
                    files.add(image);

                        @Override
                        public void done(byte[] arg0, ParseException arg1) {
                            //nothing to do here                    
                        }
                    });

                }
                Log.i("TAG", ": "  + files.size());


            } else {
                Log.d("FILES", "Error: " + e.getMessage());
            }
        }

    });
    Log.i("DONE", ": " + files.size());

    return files;
}

当我在done()内部时,我添加了这个特定用户的3个图像,并得到一个大小为3的ArrayList,这是预期的。当我在done()之外时,ArrayList的大小会回到0,我假设是因为它在查询之外被引用。果然它返回一个空的ArrayList(不太令人震惊)。

我觉得这应该是一个简单的解决方案,但我似乎无法弄明白。我试图创建一个静态ArrayList变量,但这似乎也不起作用。有关如何返回所需ArrayList的想法吗?

2 个答案:

答案 0 :(得分:1)

我认为问题是外部线程在后台进程完成之前仍然存在。换句话说..

 1. query.findInBackground(....);
 2. Log.i("DONE" ....);

.. 2.在1.完成之前执行。 Parse“inBackground”的重点在于它完成了你的线程不依赖的动作。如果你需要对List做一些事情,你应该在与后台线程相同的线程中进行,或者不要在“inBackground”中进行。

答案 1 :(得分:0)

试试这个

ParseQuery<ParseObject> query = ParseQuery.getQuery(mUser.getUsername());
List<ParseObject>imageList=query.find();

try {

Arraylist<ParseFile> files = new  Arraylist<ParseFile>files();

 ParseFile image;

      for(int i =0;i<imageList.size();i++)

 {

          image = imageList.get(i).getParseFile("image");
          files.add(image);

 } 

}

catch()
{
}