Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么将位图压缩为JPEG时会出现空指针异常?_Java_Android_Bitmap_Compression_Jpeg - Fatal编程技术网

Java 为什么将位图压缩为JPEG时会出现空指针异常?

Java 为什么将位图压缩为JPEG时会出现空指针异常?,java,android,bitmap,compression,jpeg,Java,Android,Bitmap,Compression,Jpeg,我正在尝试将位图图像存储到Items目录中的jpeg文件中。但是,当尝试使用compress()将位图压缩为JPEG时,我收到一个空指针异常。我尝试过调试,发现我尝试创建的Items目录失败,因此没有创建目录。此外,位图不为空 我似乎找不到为什么不创建目录的问题&不知道这是否是压缩位图时出现空指针异常的原因。我已尝试请求存储许可,但这并不能解决问题 更新:我现在已经能够创建Items目录,但是在压缩位图时仍然会出现空指针异常 尝试将位图保存到Items目录的代码: <uses-pe

我正在尝试将位图图像存储到Items目录中的jpeg文件中。但是,当尝试使用
compress()
将位图压缩为JPEG时,我收到一个空指针异常。我尝试过调试,发现我尝试创建的Items目录失败,因此没有创建目录。此外,位图不为空

我似乎找不到为什么不创建目录的问题&不知道这是否是压缩位图时出现空指针异常的原因。我已尝试请求存储许可,但这并不能解决问题

更新:我现在已经能够创建Items目录,但是在压缩位图时仍然会出现空指针异常

尝试将位图保存到Items目录的代码:

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
将我的资源转换为位图的代码:

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
请求存储权限的代码:

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
清单文件:

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

我收到的错误:

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
java.lang.RuntimeException:无法启动活动组件信息{com.myapps.myapplication/com.myapps.myapplication.grovery_item}:java.lang.NullPointerException
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3374)上
位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3513)
在android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
在android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)中
在android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)中
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:2109)
位于android.os.Handler.dispatchMessage(Handler.java:107)
位于android.os.Looper.loop(Looper.java:214)
位于android.app.ActivityThread.main(ActivityThread.java:7682)
位于java.lang.reflect.Method.invoke(本机方法)
位于com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:516)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
原因:java.lang.NullPointerException
位于android.graphics.Bitmap.compress(Bitmap.java:1407)
在com.myapps.myapplication.BitmapFiles.saveBitmap(BitmapFiles.java:86)//这是导致异常的代码行
在com.myapps.myapplication.BitmapFiles。(BitmapFiles.java:40)
在com.myapps.myapplication.MyDatabaseHelper.createBitmapFiles(MyDatabaseHelper.java:40)上
在com.myapps.myapplication.MyDatabaseHelper.upgradeDatabase(MyDatabaseHelper.java:35)上
位于com.myapps.myapplication.MyDatabaseHelper.onUpgrade(MyDatabaseHelper.java:63)
位于android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:417)
位于android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:341)
在com.myapps.myapplication.grovery_item.accessDataBase(grovery_item.java:35)上
在com.myapps.myapplication.grovery\u item.onCreate(grovery\u item.java:20)上
位于android.app.Activity.performCreate(Activity.java:7815)
位于android.app.Activity.performCreate(Activity.java:7804)
位于android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1318)
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3349)上
位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3513)
在android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
在android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)中
在android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)中
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:2109)
位于android.os.Handler.dispatchMessage(Handler.java:107)
位于android.os.Looper.loop(Looper.java:214)
位于android.app.ActivityThread.main(ActivityThread.java:7682)
位于java.lang.reflect.Method.invoke(本机方法)
位于com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:516)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
正如我在中看到的,您需要制作如下内容:

Bitmap decoded = BitmapFactory.decodeStream(new ByteArrayInputStream(outputStream .toByteArray()));

如果输出流为空,请检查以确保
outputStream
不为空。

原因是:android.graphics.Bitmap.compress上的java.lang.NullPointerException(Bitmap.java:1407)
您没有位图.compress(…);但是null.compress(…);因为你没有位图。它的值为空。
catch(FileNotFoundException e){e.printStackTrace();}
如果存在这样的异常,则继续执行,就像没有发生任何异常一样。更好的
catch(FileNotFoundException e){e.printStackTrace();Toast(…);return;}
if(!dirCreated){Log.d(“notCreated”,“目录失败”);继续,就好像什么都没有发生一样。更好的:
if(!dirCreated){Log.d(“notCreated”,“目录失败”);Toast(…);return;}
Log.d(“filey”,“文件已创建”);//我在日志cat中收到此消息
我相信,但您不能在这里这么说,因为文件尚未创建。这将仅由新的FileOutputStream()创建因此,更新您的代码。同时添加我提议的所有祝酒词和回报。
我现在已经能够创建项目目录
您是如何做到的?使用发布的代码?还是如何?使用文件管理器?不会让您走得更远。您的应用程序应该创建该目录。