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

为什么在android BroadcastReceiver中尝试打开sqlite数据库时出错?,android,Android,我是android初学者,在主活动中调用alarm manager,在alarm manager中编写以下代码: public class AlarmReciever extends BroadcastReceiver { private static Context myContext; @Override public void onReceive(Context context, Intent intent) { new HttpAsyncT

我是android初学者,在主活动中调用alarm manager,在alarm manager中编写以下代码:

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) {

            }
    }
}

我得到这个错误:



为什么我会犯这个错误?

答案在你的问题中-


尝试将null作为第二个参数。

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);

你的代码不可靠。一旦
onReceive()
返回,您的进程可能会在毫秒内终止,您的工作将无法完成。另外,在您的工作完成之前,设备可能会睡着。将代码从
AsyncTask
移动到
IntentService
及其
onHandleIntent()方法中。然后,将您的
BroadcastReceiver
更改为
WakefulBroadcastReceiver
并。
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);