0

我在连接到用于更新我的应用程序小部件的 android 服务中的数据库时遇到了一些问题。该程序在不使用数据库时工作正常,但是当我在服务中使用数据库时,向我显示此消息:“不幸的是,App_Name 已停止。” 该数据库用于我的所有应用程序,并且可以正常工作。

这是我在服务中使用数据库时的 LogCat:

08-25 07:53:06.536: E/AndroidRuntime(688): FATAL EXCEPTION: main
08-25 07:53:06.536: E/AndroidRuntime(688): java.lang.RuntimeException: Unable to start     service msm.dictionary.iraniannames.UpdateWidgetService@414eaba0 with Intent { cmp=msm.dictionary.iraniannames/.UpdateWidgetService (has extras) }: java.lang.NullPointerException
08-25 07:53:06.536: E/AndroidRuntime(688):  at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2376)
08-25 07:53:06.536: E/AndroidRuntime(688):  at android.app.ActivityThread.access$1900(ActivityThread.java:123)
08-25 07:53:06.536: E/AndroidRuntime(688):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1210)
08-25 07:53:06.536: E/AndroidRuntime(688):  at android.os.Handler.dispatchMessage(Handler.java:99)
08-25 07:53:06.536: E/AndroidRuntime(688):  at android.os.Looper.loop(Looper.java:137)
08-25 07:53:06.536: E/AndroidRuntime(688):  at android.app.ActivityThread.main(ActivityThread.java:4424)
08-25 07:53:06.536: E/AndroidRuntime(688):  at java.lang.reflect.Method.invokeNative(Native Method)
08-25 07:53:06.536: E/AndroidRuntime(688):  at java.lang.reflect.Method.invoke(Method.java:511)
08-25 07:53:06.536: E/AndroidRuntime(688):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
08-25 07:53:06.536: E/AndroidRuntime(688):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
08-25 07:53:06.536: E/AndroidRuntime(688):  at dalvik.system.NativeStart.main(Native Method)
08-25 07:53:06.536: E/AndroidRuntime(688): Caused by: java.lang.NullPointerException
08-25 07:53:06.536: E/AndroidRuntime(688):  at msm.dictionary.iraniannames.NamesDatabase.getById(NamesDatabase.java:122)
08-25 07:53:06.536: E/AndroidRuntime(688):  at msm.dictionary.iraniannames.UpdateWidgetService.onStart(UpdateWidgetService.java:44)
08-25 07:53:06.536: E/AndroidRuntime(688):  at android.app.Service.onStartCommand(Service.java:438)
08-25 07:53:06.536: E/AndroidRuntime(688):  at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2359)

这是我的服务代码:

public class UpdateWidgetService extends Service {
private static final String LOG = "de.vogella.android.widget.example";

@Override
public void onStart(Intent intent, int startId) {
Log.i(LOG, "Called");
// Create some random data

AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(this
    .getApplicationContext());

int[] allWidgetIds = intent
    .getIntArrayExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS);

ComponentName thisWidget = new ComponentName(getApplicationContext(),
        WidgetProvider.class);
int[] allWidgetIds2 = appWidgetManager.getAppWidgetIds(thisWidget);
Log.w(LOG, "From Intent" + String.valueOf(allWidgetIds.length));
Log.w(LOG, "Direct" + String.valueOf(allWidgetIds2.length));

for (int widgetId : allWidgetIds) {
  // Create some random data
  int number = (new Random().nextInt(4400));

 NamesDatabase db = new NamesDatabase(this);
 Cursor c = db.getById(Integer.toString(number));

  RemoteViews remoteViews = new RemoteViews(this
      .getApplicationContext().getPackageName(),
      R.layout.widgetlayout);
  Log.w("WidgetExample", String.valueOf(number));
  // Set the text
  remoteViews.setTextViewText(R.id.update,
      "Random: " + String.valueOf(number));
  // Register an onClickListener
  Intent clickIntent = new Intent(this.getApplicationContext(),
          WidgetProvider.class);

  clickIntent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
  clickIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS,
      allWidgetIds);

  PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, clickIntent,
      PendingIntent.FLAG_UPDATE_CURRENT);
  remoteViews.setOnClickPendingIntent(R.id.update, pendingIntent);
  appWidgetManager.updateAppWidget(widgetId, remoteViews);
}
stopSelf();

super.onStart(intent, startId);
}

@Override 
public IBinder onBind(Intent intent) {

return null;
}
} 

这是我在 AppWidgetProvider 中的代码:

public class WidgetProvider extends AppWidgetProvider {

public WidgetProvider() {
    // TODO Auto-generated constructor stub
}

  @Override
  public void onUpdate(Context context, AppWidgetManager appWidgetManager,
      int[] appWidgetIds) {
    // Get all ids
    ComponentName thisWidget = new ComponentName(context,
        WidgetProvider.class);
    int[] allWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget);

    // Build the intent to call the service
    Intent intent = new Intent(context.getApplicationContext(),
        UpdateWidgetService.class);
    intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, allWidgetIds);

    // Update the widgets via the service
    context.startService(intent);
  }

}
4

0 回答 0