Android只读文件系统错误

时间:2012-03-21 05:47:11

标签: android bitmap imageview ioexception readonly

您好我的应用中有一个图库,当您点击缩略图时,它会在图像视图中显示图像。我正在为一个警告对话框设置一个Long Click Listener,该对话框有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 :(得分:0)

好的,这就是我最终做的事情,以便在其他人需要的时候分享照片。事实证明我的ImageView没有被渲染为BitMap,所以它是make文件,其中没有任何内容。所以我只是从它的位置调用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;
        }
    });

}