通知服务 - 系统服务不可用于onCreate之前的活动()

问题描述:

我有一个活动和一个服务,我想调用一个位于该服务的活动中的方法。通知服务 - 系统服务不可用于onCreate之前的活动()

的方法(deleteItem)使用通知服务,取消一些通知,但正因如此,我得到的错误:

E/AndroidRuntime(13172): java.lang.IllegalStateException: System services not available to Activities before onCreate()

MainActivity:

public boolean deleteItem(SQLiteDatabase db, long id) { 
    if(db.delete(DbHelper.TABLE_NAME, "`_id` = " + id, null) == 1) { 
      Log.i(TAG, "Item #"+id + " was deleted successfully!"); 

      ((NotificationManager) getSystemService(NOTIFICATION_SERVICE)).cancel((int) id); 

      return true; 
     } 
    return false; 
} 

服务:

@Override 
protected void onHandleIntent(Intent intent) { 
    SQLiteDatabase db = dbHelper.getWritableDatabase(); 
    id = intent.getIntExtra("id", -1); 
    MainActivity main = new MainActivity(); 
    main.deleteItem(db, id, false); 

} 

我该如何解决这个错误?

MainActivity main = new MainActivity(); 

实例化活动是android框架的工作。请不要这样做。

从服务本身调用该方法。为什么它甚至需要在活动上?

+0

因为我在活动和服务中使用它,我想保存一些代码而不是在两个地方写同样的方法。所以你建议在服务中编写相同的方法? – Dennis

+0

不,我全部重用,但这被称为错误的方式。编写一个DAO来处理delete()调用。您始终可以从应用程序上下文或活动的上下文中获取通知服务。这与数据库操作无关。 –