Не удается сохранить изображение во внутренней памяти - PullRequest
0 голосов
/ 19 августа 2011

Я пытаюсь сохранить некоторые изображения, которые я получаю в виде кодированных строк base64, во внутреннем хранилище. По какой-то причине они, кажется, не хранятся, и я понятия не имею, почему.

Это функция, которая хранит их:

public void createImage(String image, String name){
    try{
        byte[] imageAsBytes = Base64.decode(image.getBytes(), Base64.DEFAULT);
        Bitmap img_bitmap = BitmapFactory.decodeByteArray(imageAsBytes, 0, imageAsBytes.length);

        //mCtx is the context. It comes from the main activity
        FileOutputStream fos = mCtx.openFileOutput(name, Context.MODE_WORLD_READABLE);
        img_bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
        fos.flush();
        fos.close();

        //Let's check if they're there
        File f = new File(mCtx.getFilesDir().getPath() + "/" + name + ".png");

        if (f.exists())
             Log.v(DB_TAG, "Exists");
        else
             Log.v(DB_TAG, "Not exists");
    }
    catch(Exception e){
        e.printStackTrace();
        Log.e(DB_TAG, e.toString());
    }
}

Я продолжаю получать "Не существует" в logcat. Почему это может быть?

Ответы [ 2 ]

0 голосов
/ 19 августа 2011

Есть некоторые известные проблемы с BitmapFactory decodeByteArray (например, с PNG - см. https://stackoverflow.com/questions/3956641/png-base64-decoding-problem-in-android).. Было бы целесообразно зарегистрировать растровое изображение, возвращенное из decodeByteArray, с помощью

Log.v(DB_TAG, "Bitmap = " + bitmap);

, чтобы убедиться, что оно не являетсянуль.

0 голосов
/ 19 августа 2011
File f = new File(mCtx.getFilesDir().getPath() + "/" + name); //<-- removed .png!
if (f.exists())
    Log.v(DB_TAG, "Exists");
else
    Log.v(DB_TAG, "Not exists");

Вы сохраняете файл как «имя», а затем файл, который вы создали как «name.png».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...