为什么我在尝试在android BroadcastReceiver中打开sqlite数据库时出错?

问题描述:

我在主要活动Android和拨打报警经理初学者,进入报警经理写这样的代码:
为什么我在尝试在android BroadcastReceiver中打开sqlite数据库时出错?

public class AlarmReciever extends BroadcastReceiver { 
    private static Context myContext; 
    @Override 
     public void onReceive(Context context, Intent intent) { 
     new HttpAsyncTask().execute("http://myHOST.ir/oflineValue.aspx"); 
    } 
    private class HttpAsyncTask extends AsyncTask<String, Void, String> { 
     @Override 
      protected String doInBackground(String... urls) { 
      try { 
         String DATABASE_NAME = "TEMPFOOD"; 
         String TABLE_NAME = "tempData"; 
         SQLiteDatabase db; 
          db=SQLiteDatabase.openOrCreateDatabase(DATABASE_NAME,myContext.MODE_PRIVATE, null); 
      }catch(Exception e) 
      { 
      } 
     } 
     @Override 
      protected void onPostExecute(String result) { 

      } 
    } 
} 


但在这一行:

db=SQLiteDatabase.openOrCreateDatabase(DATABASE_NAME,myContext.MODE_PRIVATE, null); 


我得到这个错误:
enter image description here


为什么我得到那个错误?

+0

你的代码是不可靠的。一旦'onReceive()'返回,您的过程可能会在几毫秒内终止,并且您的工作将无法完成。另外,在您的工作完成之前,设备可能会睡着。将您的代码从'AsyncTask'移动到'IntentService'及其''onHandleIntent()'方法中。然后,将您的'BroadcastReceiver'更改为'WakefulBroadcastReceiver'并[按照使用说明](http://developer.android.com/reference/android/support/v4/content/WakefulBroadcastReceiver.html)。 – CommonsWare

openOrCreateDatabase()的第二个参数必须是SQLiteDatabase.CursorFactory这是可选的,并且它是默认情况下实例化任何光标所必需的。如果您不想实例化,请使用值null作为第二个参数。

db=SQLiteDatabase.openOrCreateDatabase(DATABASE_NAME,myContext.MODE_PRIVATE, null); 

如果你想要实例,然后尝试下面的代码: -

db=SQLiteDatabase.openOrCreateDatabase(DATABASE_NAME,new SQLiteDatabase.CursorFactory() { 
        @Override 
        public Cursor newCursor(SQLiteDatabase db, SQLiteCursorDriver masterQuery, String editTable, SQLiteQuery query) { 
           //Assign the values of masterQuery,query,editTable as per your requirements 
           return new SQLiteCursor(masterQuery,editTable,query); 
          } 
          }, null); 

答案就在你的问题 - second argument should be SQLiteDatabase.CursorFactory

试图把null作为第二个参数。