【发布时间】:2012-03-02 11:18:25
【问题描述】:
我想制作一个 AppWidget,我定义了布局、应用小部件的信息、广播接收器和处理 AppWidget 的服务。
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(this
.getApplicationContext());
int[] allWidgetIds = intent
.getIntArrayExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS);
ComponentName thisWidget = new ComponentName(getApplicationContext(),
SmsSchedulerWidget.class);
RemoteViews remoteViews = new RemoteViews(this.getApplicationContext()
.getPackageName(), R.layout.schdulesms_appwidget_layout);
DatabaseManager dbManager = new DatabaseManager(context.getApplicationContext());
dbManager.open();
String contactNumber = dbManager.fetchContactNumber();
String date = dbManager.fetchDate();
String message = dbManager.fetchMessage();
String status = dbManager.fetchStatus();
remoteViews.setTextViewText(R.id.to_appwidget_saved_data, contactNumber);
remoteViews.setTextViewText(R.id.date_appwidget_saved_data, date);
remoteViews.setTextViewText(R.id.status_appwidget_saved, message);
remoteViews.setTextViewText(R.id.message_appwidgset_saved_data, status);
appWidgetManager.updateAppWidget(thisWidget, remoteViews);
这是我的代码......
但在其他活动中,我可以轻松检索数据库值,而不会出现任何空指针异常。如果有人能指出我的代码有什么问题,我将不胜感激......
日志猫错误是:
03-02 17:26:32.174:E/AndroidRuntime(32265):致命异常:主要 03-02 17:26:32.174: E/AndroidRuntime(32265): java.lang.RuntimeException: Unable to start service com.android.braindigit.schedulesms.appWidgetService@4053da30 with Intent { cmp=com.android.braindigit.schedulesms/ .appWidgetService(有附加功能)}:java.lang.NullPointerException 03-02 17:26:32.174: E/AndroidRuntime(32265): 在 android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2052) 03-02 17:26:32.174: E/AndroidRuntime(32265): 在 android.app.ActivityThread.access$2800(ActivityThread.java:117) 03-02 17:26:32.174: E/AndroidRuntime(32265): 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:994) 03-02 17:26:32.174: E/AndroidRuntime(32265): 在 android.os.Handler.dispatchMessage(Handler.java:99) 03-02 17:26:32.174: E/AndroidRuntime(32265): 在 android.os.Looper.loop(Looper.java:130) 03-02 17:26:32.174: E/AndroidRuntime(32265): 在 android.app.ActivityThread.main(ActivityThread.java:3683) 03-02 17:26:32.174: E/AndroidRuntime(32265): 在 java.lang.reflect.Method.invokeNative(Native Method) 03-02 17:26:32.174: E/AndroidRuntime(32265): 在 java.lang.reflect.Method.invoke(Method.java:507) 03-02 17:26:32.174: E/AndroidRuntime(32265): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 03-02 17:26:32.174: E/AndroidRuntime(32265): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 03-02 17:26:32.174:E/AndroidRuntime(32265):在 dalvik.system.NativeStart.main(本机方法) 03-02 17:26:32.174: E/AndroidRuntime(32265): 引起: java.lang.NullPointerException 03-02 17:26:32.174: E/AndroidRuntime(32265): 在 android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:118) 03-02 17:26:32.174: E/AndroidRuntime(32265): 在 com.android.braindigit.schedulesms.DatabaseManager.open(DatabaseManager.java:36) 03-02 17:26:32.174: E/AndroidRuntime(32265): 在 com.android.braindigit.schedulesms.appWidgetService.onStart(appWidgetService.java:41) 03-02 17:26:32.174: E/AndroidRuntime(32265): 在 android.app.Service.onStartCommand(Service.java:428) 03-02 17:26:32.174: E/AndroidRuntime(32265): 在 android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2039) 03-02 17:26:32.174: E/AndroidRuntime(32265): ... 10 更多
【问题讨论】:
-
某处某处为空。通过仔细查看 logcat,您可能会找到行号,并且运气好可以确定未正确初始化的对象。通过分享这些信息,有人可能会为您提供帮助
-
关于 NullPointerException 提及的整个胡言乱语。在你的 logcat 中所有的都是红色的。围绕错误的 2O 奇数行
-
您的问题在于
com.android.braindigit.schedulesms.DatabaseManager.open(),如堆栈跟踪所示。此外,请删除所有对getApplicationContext()的引用,除非您确切地知道为什么要使用它。