在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;
}
关于我在做什么错误的任何指示?
答案 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();
}
}
});
}
});
}