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

时间:2015-06-30 08:58:38

标签: android parse-platform google-glass heap-memory

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

1 个答案:

答案 0 :(得分:0)

1)如果我正确理解了您的问题,您希望将图像存储在手机中(以便您的应用可以稍后检索),那么您可以尝试将其存储在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数据库中使用字符串来存储图像(注意Image列是一个字符串)和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

如果您了解其他更好的方法,请随意发表评论。技术变化很快!