Ошибка файловой системы Android только для чтения - PullRequest
0 голосов
/ 21 марта 2012

Привет, у меня в приложении есть галерея, которая показывает изображение в виде изображения, когда вы нажимаете на миниатюру.Я настраиваю прослушиватель длинных щелчков для диалогового окна с предупреждением, которое имеет 2 кнопки, одну из которых можно установить в качестве обоев, а другую - для общего доступа.У меня есть намерение поделиться и получить кеш для рисования несколько работает.Он работает в эмуляторе, но не на моем телефоне.Я использовал много примеров на этом сайте, чтобы это заработало, но оно не работает вообще.он продолжает закрывать приложение на моем телефоне.любая помощь приветствуется.

                                alertDialog.setButton2("Share",
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int which) {

                            imgView.setDrawingCacheEnabled(true);
                            Bitmap b = imgView.getDrawingCache();
                            File sdCard = Environment.getExternalStorageDirectory();
                            File file = new File(sdCard.getAbsolutePath() + "image.jpg");

                            try {
                                file.createNewFile();
                                OutputStream fos = null;
                                fos = new FileOutputStream(file);
                                b.compress(CompressFormat.JPEG, 100, fos);
                                fos.flush();
                                fos.close();
                            } catch (FileNotFoundException e) {

                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            } catch (IOException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }

                            Log.d("Save Example", "Image saved.");

                            Intent shareIntent = new Intent(Intent.ACTION_SEND);
                            Uri phototUri = Uri.parse("file:///sdcard/image.jpg");
                            shareIntent.setData(phototUri);
                            shareIntent.setType("image/jpeg");
                            shareIntent.putExtra(Intent.EXTRA_STREAM, phototUri);
                            startActivity(Intent.createChooser(shareIntent, "Share Via"));
                        }

                    });

            alertDialog.show();
            return true;
        }
    });

Обновление: похоже, проблема с

b.compress(CompressFormat.JPEG, 95, fos);

, который постоянно говорит нулевой указатель.

Оказывается, нулевой указатель на самом деле является ошибкой read_only .. Так что на самом деле он не записывает файл, я получаю файловую систему ioexception только для чтения.Почему он это делает?

1 Ответ

0 голосов
/ 23 марта 2012

хорошо, вот что я в итоге сделал, чтобы поделиться этими фотографиями на случай, если это понадобится другим.Оказывается, мой ImageView не отображался как BitMap, поэтому он создавал файлы, в которых ничего не было.Так что вместо этого я просто называю drawable с его позиции и сохраняю это.Это намного более чистый код для этой простой галереи.У меня есть это в диалоговом окне с предупреждением, но оно также может быть установлено на обычную кнопку.

                alertDialog.setButton2("Share",
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog,
                                int which) {

                            long currentTime = System.currentTimeMillis();
                            imgView.setDrawingCacheEnabled(true);
                            String newFolder = "/CFW";
                            String extStorageDirectory = Environment
                                    .getExternalStorageDirectory()
                                    .toString();
                            File sdCard = new File(extStorageDirectory
                                    + newFolder);
                            sdCard.mkdir();

                            File file = new File(sdCard.getAbsolutePath()
                                    + "/cfw" + currentTime + ".jpg");

                            try {
                                InputStream is = getResources()
                                        .openRawResource(pics[position]);
                                OutputStream os = new FileOutputStream(file);
                                byte[] data = new byte[is.available()];
                                is.read(data);
                                os.write(data);
                                is.close();
                                os.close();
                            } catch (FileNotFoundException e) {

                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            } catch (IOException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }

                            Log.d("Save Example", "Image saved.");

                            Intent shareIntent = new Intent(
                                    Intent.ACTION_SEND);
                            Uri photoUri = Uri
                                    .parse("file:///sdcard/CFW/cfw"
                                            + currentTime + ".jpg");
                            shareIntent.setData(photoUri);
                            shareIntent.setType("image/jpeg");
                            shareIntent.putExtra(Intent.EXTRA_STREAM,
                                    photoUri);
                            startActivity(Intent.createChooser(shareIntent,
                                    "Share Via"));
                        }

                    });

            alertDialog.show();
            return true;
        }
    });

}
...