Android 将位图写入SD卡中的文件

Android 将位图写入SD卡中的文件,android,bitmap,Android,Bitmap,我试图在我的代码中将位图压缩成jpg。我得到一个空指针异常,请给我建议 new Thread(new Runnable() { @Override public void run() { Cursor imageCursor=getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,n

我试图在我的代码中将位图压缩成jpg。我得到一个空指针异常,请给我建议

new Thread(new Runnable() {
                    @Override
                    public void run() {
                        Cursor imageCursor=getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,new String[]{MediaStore.Video.Media.DATA},MediaStore.Video.Media.DISPLAY_NAME+"=?" ,new String[]{imageTitle},null);
                        imageCursor.moveToFirst();
                        final String imageData=imageCursor.getString(imageCursor.getColumnIndex(MediaStore.Video.Media.DATA));
                        dbConnection connection=new dbConnection(getApplicationContext());
                        SQLiteDatabase db=connection.getWritableDatabase();
                        File imageFile=new File(imageData);
                        File outputFile=new File("mnt/sdcard/Images/hiddenImage.jpg");
                        InputStream is;
                        try 
                        {
                            is = new FileInputStream(imageFile);
                            InputStreamReader inputreader=new InputStreamReader(is);
                            BufferedReader buffReader=new BufferedReader(inputreader);
                            final ByteArrayBuffer buffer=new ByteArrayBuffer(512);
                            int i;
                            while((i=buffReader.read())!=-1)
                            {
                                buffer.append(i);
                            }
                            Bitmap imagefile=BitmapFactory.decodeByteArray(buffer.toByteArray(), 0, buffer.toByteArray().length);
                            OutputStream os=new FileOutputStream("mnt/sdcard/Images/testing.jpg");
                            imagefile.compress(Bitmap.CompressFormat.JPEG, 100, os);
                            os.close();
                        } 
                        catch (FileNotFoundException e) 
                        {
                            e.printStackTrace();
                        } 
                        catch (IOException e) 
                        {
                            e.printStackTrace();
                        }

                    }
                }).start();
以下是堆栈跟踪:

07-09 14:57:48.595: ERROR/AndroidRuntime(5761): FATAL EXCEPTION: Thread-9
07-09 14:57:48.595: ERROR/AndroidRuntime(5761): java.lang.NullPointerException
07-09 14:57:48.595: ERROR/AndroidRuntime(5761):     at com.messageHider.viewImageThumb$1$1.run(viewImageThumb.java:106)
07-09 14:57:48.595: ERROR/AndroidRuntime(5761):     at java.lang.Thread.run(Thread.java:1096)
在我尝试压缩位图时引发异常:
//::imagefile.compress(Bitmap.CompressFormat.JPEG,100,操作系统)

如果在
imagefile.compress(Bitmap.CompressFormat.JPEG,100,os)中有
NullPointerException
,则
imagefile
必须为
null
。如果
BitmapFactory
无法解码图像,则会发生这种情况

此外:

  • 你的文件读取算法效率很低。请考虑每次读取一个以上字节。或者,更好的方法是在
    位图工厂上使用
    decodeStream()
    而不是
    decodeByteArray()

  • 确保您拥有
    写入外部存储
    权限

  • 永远不要硬连线路径,尤其是错误的路径,就像你在这里所做的那样。使用
    Environment.getExternalStorageDirectory()
    获取外部存储的根目录,然后使用适当的
    文件
    构造函数组装一个
    文件
    对象,指向该目录中所需的任何文件

  • 您不需要确保
    Images/
    目录实际存在

建议#1-帮助我们帮助您-显示stacktrace,并告诉我们引发异常的位置