从android上的Parse.com数据库中检索图像但它返回null

时间:2015-06-10 09:24:20

标签: android image parse-platform

在Parse.com上,我有一个名为 ImagesEntry 的类,其中一个名为 ImageFile 的列保存了图像。

我在android上有这个代码来读取每一行并返回图像,但它返回null。

    ParseFile[] getImagesFromParseCloudDB() {                

            ParseQuery<ParseObject> query = new ParseQuery<ParseObject>(
                    "ImagesEntry");

            query.orderByDescending("_created_at");
            try {
                ob = query.find(); // 'List<ParseObject> ob' initialzed above OnCreate
            } catch (ParseException e) {
                Log.e("Error", e.getMessage());
                e.printStackTrace();
            }

            int i = 0;

            for (ParseObject images : ob) {
                // imagesFromDB is an array of type 'ParseFile'                
                imagesFromDB[i] = (ParseFile)images.getParseFile("ImageFile");
                i++;        
            }

            return imagesFromDB;
        }

关于我在做什么错误的任何指示?

2 个答案:

答案 0 :(得分:1)

我认为原因是getParseFile()没有请求实际文件。根据{{​​3}}

  

功能不会执行网络请求

您需要添加调用ParseFile.getDataInBackground()ParseFile.getData()以获取文件的实际数据。但是在迭代数组时不要尝试产生太多的后台加载任务 - 如果你的数组的大小大于Parse使用的ExecutorService的PoolSize,你将获得异常。考虑创建一些后台任务和同步执行getData()请求或自定义ExecutorService for Parse。

答案 1 :(得分:0)

首先,这个字符串“_created_at”对我来说是错误的。在我的应用程序中,我有“createdAt”并且工作正常。

我建议您首先获取列表中的所有ID并使用我的代码(它适用于我):

ParseQuery query = new ParseQuery("Your_class_name");
                    query.getInBackground(imagenID, new GetCallback() {
                        @Override
                        public void done(ParseObject parseObject, ParseException e) {

                        }

                        @Override
                        public void done(Object o, Throwable throwable) {
                            ParseObject object = (ParseObject) o;
                            ParseFile foto = (ParseFile) object.get("Your_column_name");
                            foto.getDataInBackground(new GetDataCallback() {
                                @Override
                                public void done(byte[] bytes, ParseException e) {
                                    if (e == null) {
                                        //do things with this bytes
                                    } else {
                                        Toast.makeText(getApplicationContext(), "Error al descargar la foto", Toast.LENGTH_SHORT).show();
                                        e.printStackTrace();
                                    }
                                }
                            });

                        }
                    });
                }