簡體   English   中英

MyContentProvider.onCreate()沒有被調用?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM