java – 创建位图NullPointerException
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 创建位图NullPointerException,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3744字,纯文字阅读大概需要6分钟。
内容图文
我的应用程序崩溃,似乎无法解决.
我从资源中得到一个位图,就像这样.
Bitmap bmp1 = BitmapFactory.decodeResource(getResources(), R.drawable.map_distance_tag);
现在,在从这个位图创建位图时,这似乎在极少数设备上存在问题.例如…
Bitmap bmOverlay = Bitmap.createBitmap(bmp1.getWidth(), bmp1.getHeight(), bmp1.getConfig());
当我在Bitmap类的第468行创建Bitmap时,我得到一个NullPointerException,我已经查看了它在从源位图设置新位图的密度比例时的情况.
// The new bitmap was created from a known bitmap source so assume that
467 // they use the same density scale
468 bitmap.setDensityScale(source.getDensityScale());
现在我似乎无法重新创建问题,但事实上我在原始Bitmap上调用getWidth()时没有得到异常,这告诉我源不是null.
这是整个堆栈跟踪.
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.my.app/com.my.app.recording.TrackingActivity}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
at android.app.ActivityThread.access$2300(ActivityThread.java:125)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4627)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at android.graphics.Bitmap.createBitmap(Bitmap.java:468)
at com.my.app.maps.MapFragment.createTabOverlay(MapFragment.java:663)
at com.my.app.maps.MapFragment.addMarkersForToolType(MapFragment.java:474)
at com.my.app.maps.MapFragment.onActivityCreated(MapFragment.java:405)
at android.support.v4.app.Fragment.performActivityCreated(Fragment.java:1468)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:931)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444)
at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:551)
at com.my.app.recording.TrackingActivity.onStart(TrackingActivity.java:272)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1129)
at android.app.Activity.performStart(Activity.java:3781)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2636)
... 11 more
我的想法
这可能与我有关,不包括不同的屏幕密度的不同位图?提供的所有位图都适用于mdpi屏幕.
我注意到还有一个BackStackRecord.当用户按下时,这会崩溃吗?
提前致谢
解决方法:
您在Bitmap.java:468中指向的来源是Android 1.5,可能不是您的问题.
bitmap.setDensityScale(source.getDensityScale());
Bitmap bm = nativeCreate(null, 0, width, width, height, config.nativeInt, true);
任何比2.2更新的行468都是javadoc块或不相关函数的一部分,所以我猜你正在看1.6-2.2版本,而不是你想要解决的版本.
在我看到的那条线上唯一可以真正结束为null的是配置.在您的代码中,您使用getConfig()从当前位图对象中获取它.它的docs显示:
public final Bitmap.Config getConfig ()
Added in API level 1
If the bitmap’s internal config is in one of the public formats, return that config, otherwise return null.
因此,它可能没有找到“公共”格式,并返回null,它传递给createBitmap(),并炸毁你的代码.
你可以一直使用static config,比如Bitmap.Config.ARGB_8888,或者在前一行上执行getConfig()并对其进行null检查.如果为null,则转到刚刚提到的后备配置.
内容总结
以上是互联网集市为您收集整理的java – 创建位图NullPointerException全部内容,希望文章能够帮你解决java – 创建位图NullPointerException所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。