如何在Android应用程序中修复此错误?
我为我的应用程序设计了一个已经运行的小部件,但是现在当我点击这个小部件时,我遇到了以下错误 我的代码如何在Android应用程序中修复此错误?,android,Android,我为我的应用程序设计了一个已经运行的小部件,但是现在当我点击这个小部件时,我遇到了以下错误 我的代码 @Override protected void onResume() { super.onResume(); View v1 = getWindow().getDecorView().getRootView(); v1.setDrawingCacheEnabled(true); Bitmap bitmap = Bitma
@Override
protected void onResume() {
super.onResume();
View v1 = getWindow().getDecorView().getRootView();
v1.setDrawingCacheEnabled(true);
Bitmap bitmap = Bitmap.createBitmap(v1.getDrawingCache());
//ByteArrayOutputStream out = new ByteArrayOutputStream();
//bitmap.compress(Bitmap.CompressFormat.PNG,90,out);
v1.setDrawingCacheEnabled(false);
NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
builder.setSmallIcon(R.mipmap.ic_launcher)
.setLargeIcon(bitmap)
.setContentTitle("title")
.setContentText("message:")
.setAutoCancel(true)
.setOngoing(false)
.setTicker("ticker");
NotificationManager mNotifyMgr = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
mNotifyMgr.notify(123456, builder.build());
}
发生错误:
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.graphics.Bitmap.getWidth()' on a null object reference
at android.graphics.Bitmap.createBitmap(Bitmap.java:771)
at com.blackswan.shaghayeghaccounting.transactions.TransparentQuickActionActivity.onResume(TransparentQuickActionActivity.java:113)
at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1287)
at android.app.Activity.performResume(Activity.java:7015)
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:4210)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:4323)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3426)
at android.app.ActivityThread.access$1100(ActivityThread.java:229)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1821)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:7325)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
04-04 16:10:27.445 25895-25895/com.blackswan.shaghayeghaccounting E/AndroidRuntime:致命异常:main
流程:com.blackswan.shaghayeghaccounting,PID:25895
java.lang.RuntimeException:无法恢复活动{com.blackswan.shaghayeghaccounting/com.blackswan.shaghayeghaccounting.transactions.TransparentQuickActionActivity}:java.lang.NullPointerException:尝试对空对象引用调用虚拟方法“int-android.graphics.Bitmap.getWidth()”
在android.app.ActivityThread.performResumeActivity(ActivityThread.java:4221)上
位于android.app.ActivityThread.handleResumeActivity(ActivityThread.java:4323)
位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3426)
在android.app.ActivityThread.access$1100(ActivityThread.java:229)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1821)
位于android.os.Handler.dispatchMessage(Handler.java:102)
位于android.os.Looper.loop(Looper.java:148)
位于android.app.ActivityThread.main(ActivityThread.java:7325)
位于java.lang.reflect.Method.invoke(本机方法)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run上(ZygoteInit.java:1230)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
原因:java.lang.NullPointerException:尝试对空对象引用调用虚拟方法“int android.graphics.Bitmap.getWidth()”
在android.graphics.Bitmap.createBitmap(Bitmap.java:771)上尝试以下操作:
View viewBitmap = getWindow().getDecorView().getRootView();
viewBitmap.setDrawingCacheEnabled(true);
viewBitmap.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),
MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
viewBitmap.layout(0, 0, viewBitmap .getMeasuredWidth(), viewBitmap.getMeasuredHeight());
viewBitmap.buildDrawingCache(true);
Bitmap b = Bitmap.createBitmap(viewBitmap .getDrawingCache());
viewBitmap.setDrawingCacheEnabled(false);
可能
位图的值为空。尝试将此代码放入onCreate
方法。您运行该方法v1.getDrawingCache()
太快了。视图本身尚未绘制,因此返回null。您可以在这里看到一个很好的答案:将代码放入onCreate是一个坏主意,因为onCreate是在onResume之前调用的