[英]MyContentProvider.onCreate() is not being called?
擴展ContentProvider的userDatabase的onCreate沒有正確調用
這是我的一些userBatabase代碼:
public class userDatabase extends ContentProvider {
private MainDatabaseHelper mOpenHelper;
public userDatabase(){}
public static final class MainDatabaseHelper extends SQLiteOpenHelper{...}
@Override
public boolean onCreate() {
mOpenHelper = new MainDatabaseHelper(getContext());
return true;
}
@Override
public Uri insert(Uri uri, ContentValues values) {
long id = mOpenHelper.getWritableDatabase().insert("Users", null, values);
return Uri.withAppendedPath(CONTENT_URI, "" + id);
}
...
}
在我的主要活動中,我稱:
userDatabase cpDatabase = new userDatabase();
但是當我嘗試調用cpDatabase.insert(userDatabase.CONTENT_URI, values);
當mOpenHelper.getWritableDatabase().insert("Users", null, values);
插入時,所有內容都會崩潰mOpenHelper.getWritableDatabase().insert("Users", null, values);
叫做。
我發現mOpenHelper.getWritableDatabase()
是問題所在,因為它甚至無法mOpenHelper.getWritableDatabase()
運行,然后我發現這是因為mOpenHelper為空。
我在構造函數中實例化了mOpenHelper,所以我認為它沒有運行。 當我調用userDatabase cpDatabase = new userDatabase();
時,一些日志消息確認了這一點userDatabase cpDatabase = new userDatabase();
我的日志消息顯示userDatabase()構造函數正常運行,但是onCreate從未運行,因此mOpenHelper從未實例化。
(注意:通過這些日志消息,我注意到我的應用程序啟動時調用了我的userDatabase的構造函數和onCreate。我不知道為什么或在哪里。我不明白為什么在嘗試創建實例之前運行了它。即使它已運行,但mOpenHelper仍未初始化,並且當我創建實例時,構造函數已運行,但onCreate卻沒有。)
可能會發生什么,如何使onCreate運行?
由於您使用的是內容提供程序,因此根據文檔
在應用程序啟動時,將為應用程序主線程上的所有注冊內容提供者調用此方法。
而且您嘗試使用內容提供者的方式似乎是錯誤的,並且,您無需手動實例化內容提供者,一旦通過ContentResolver通過傳遞URI發出請求,系統就會檢查給定URI的權限,並將請求傳遞給在授權機構注冊的內容提供商。
例如
getContentResolver().delete(uri, null, null);
uri在哪里,是要查詢的完整URI。
本教程將指導您正確的方向
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.