parse.com - Android - 无法将大型 ParseObject 固定到本地数据存储

parse.com - Android - unable to pin large size ParseObject to local datastore

我在 Google Glass 设备上使用 Parse.com,我正在尝试将一个大尺寸的 ParseObject(大约 50 MB)固定到本地数据存储。我注意到在堆内存超过 10MB 后,固定过程暂停并且没有抛出异常。我还尝试按顺序(一次)固定一系列 ParseObjects,但同样,当堆达到 10MB 时,固定过程会暂停。有时它固定的对象比其他时间多,所以我猜测 Java GC 有时比其他 GC 更努力。请帮助我,或者给我一个在内部存储大对象(有很多图像)的替代方法。

1) 如果我对你的问题理解正确,你想将图像存储在你的 phone 中(这样你的应用程序可以稍后检索),那么你可以尝试将其存储在 sd 卡中:

 public static boolean storeImage(Bitmap bitmap, String filename) {

        boolean stored = false;
        String file_path = Environment.getExternalStorageDirectory().getAbsolutePath() +
                "/myFolder";
        File dir = new File(file_path);
        if(!dir.exists())
            dir.mkdirs();
        File fileToStored = new File(dir, filename + ".png");
        try {
            FileOutputStream outputStream = new FileOutputStream(fileToStored);
            bitmap.compress(Bitmap.CompressFormat.PNG, 90, outputStream);
            outputStream.flush();
            outputStream.close();
            stored = true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return stored;
    }

* 清单文件中需要权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>  

2) 使用 Parse 2 个月后,还有一个选项可以让你在 Parse 数据库中使用字符串存储图像(注意图像列是一个字符串)和 base64 decode/encode:

 public static Bitmap decodeBase64(String input) {
        if (input == null) return  null;
        byte[] decodedByte = Base64.decode(input, Base64.NO_WRAP);
        return BitmapFactory.decodeByteArray(decodedByte, 0, decodedByte.length);
    }

 public static String encodeTobase64(Bitmap image) {
        Bitmap immagex=image;
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        immagex.compress(Bitmap.CompressFormat.JPEG, 100, baos);
        byte[] b = baos.toByteArray();
        String imageEncoded = Base64.encodeToString(b, Base64.NO_WRAP);
        Log.e(TAG, "encoded Img: " + imageEncoded);
        return imageEncoded;
    }

*注意:使用 NO_WRAP 而不是 DEFAULT,这样 iOs 应用程序也可以编码和解码您的字符串

3) 存储图像的另一种选择,我更喜欢这种存储在服务器上,然后在需要时检索,您可以存储在自己的服务器上,也可以使用其他著名的服务,我已经尝试过 Imgur API 效果很好(当然,如果您的应用没有每天 1,250 次上传或每天大约 12,500 次请求,它是免费的)

API 文档: https://api.imgur.com/

Android上传样本: https://github.com/AKiniyalocts/imgur-android

如果您知道其他更好的方法,请随时发表评论。科技日新月异!