我在Parse.com
中有一个名称为Objects的类。此类包含许多字段,并且还包含10个图像的ParseFile
字段。我正在使用以下代码,以便在Objects类中添加新项目。
ParseObject object = new ParseObject("Objects");
object.put("field1", "test1");
object.put("field2", "test2");
int imagesSize = Details.getInstance().getImages().size();
for (int i = 0; i < imagesSize; i++) {
//convert bitmap to byte[]
Bitmap bmp = Details.getInstance().getImages().get(i);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] data = stream.toByteArray();
//convert byte[] to parse file
ParseFile file = new ParseFile("objectImage.png", data);
file.saveInBackground();
object.put("image" + numbers[i], file);
}
object.saveInBackground(new SaveCallback() {
@Override
public void done(ParseException e) {
if (e == null) {
Log.i("Add", "done");
}else{
Log.i("Add", e.getMessage());
}
}
});
我的问题是我收到此错误
java.lang.IllegalStateException: Unable to encode an unsaved ParseFile
我知道我应该使用以下内容来保存
ParseFile
//convert bitmap to byte[]
Bitmap bmp = Details.getInstance().getImages().get(i);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] data = stream.toByteArray();
//convert byte[] to parse file
ParseFile file = new ParseFile("objectImage.png", data);
file.saveInBackground(new SaveCallback() {
@Override
public void done(ParseException e) {
if (e == null) {
object.put("image" + numbers[i], file);
}else{
Log.i("Add", e.getMessage());
}
}
});
但是现在有多个图像,我不知道如何实现。如果在
saveCallBack
内使用for loop
,则不会得到正确的结果。 最佳答案
//在解析表中创建照片数组列。
//您一次添加了多个图片。
//这是必须添加ParseFile对象的数组列表
gameScore.addAllUnique("photos", Arrays.asList(parsefilephotoobject1, parsefilephotoobject2,parsefilephotoobject3));
gameScore.saveInBackground();
//您可以在照片数组中一张一张地添加一张照片。
我已经使用glide从图像获取字节数组。
destination_profile是我从图库中选择的文件对象。
if (destination_profile != null) {
Glide.with(getActivity()).load(destination_profile.getAbsolutePath()).asBitmap().toBytes().centerCrop().diskCacheStrategy(DiskCacheStrategy.ALL).into(new SimpleTarget<byte[]>() {
@Override
public void onResourceReady(byte[] resource, GlideAnimation<? super byte[]> glideAnimation) {
final ParseFile parseFile = new ParseFile(destination_profile.getName(), resource);
parseFile.saveInBackground(new SaveCallback() {
@Override
public void done(ParseException e) {
gameScore.addUnique("photos", parseFile);
gameScore.saveInBackground(new SaveCallback() {
@Override
public void done(ParseException e) {
showToast("Profile image upload success");
}
});
}
});
}
});
}
您可以使用此获取ParseFile数组对象
@ParseClassName("YourTableName")
public class YourTableName extends ParseObject {
public static ParseQuery<YourTableName> getQuery() {
return ParseQuery.getQuery(YourTableName.class);
}
public List<ParseFile> getParseFilePhotos() {
return getList("photos");
}
}