我在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,则不会得到正确的结果。

最佳答案

//在解析表中创建照片数组列。

android - 解析-将多个图像保存在同一对象中-LMLPHP

//您一次添加了多个图片。
//这是必须添加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");
    }


}

08-05 14:26