2012-01-05 85 views
0

從字面上看,我所做的就是創建一個新項目。 import android.app.Activity; import android.content.ContentResolver; import android.os.Bundle; 公共類WebApp4Act extends活動{0}當首次創建活動時調用。 */ public static final Uri BOOKMARKS_URI = Uri.parse(「content:// browser/bookmarks」); 上下文context = getBaseContext(); ContentResolver cr = getContentResolver();爲什麼我無法創建內容解析器

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
} 
} 

當我運行它說,遺憾的是webApp4c已停止

如果我註釋掉線 ContentResolver的CR = getContentResolver()的項目; 那麼就沒有問題 我想在設置爲on版本14

+0

我忘了說我的項目SDK設置爲3 – Martin 2012-01-05 11:41:29

+0

只是一個AVD使用sdk4又試了一次。仍然沒有工作 – Martin 2012-01-05 11:55:51

回答

1

那答案非常簡單,無需調用AVD運行此。不幸的是,getContentResolver()和任何其他需要Context的方法在應用程序構建過程或初始化過程中都無法這樣做。在某些版本的AVD上,這個版本沒有被正確地複製,所以這就是爲什麼它可以在某些版本的AVD上運行。你所要做的就是將你的代碼移動到onCreate()(或任何其他在構建完成後運行的函數),你就會好起來的。

注:有辦法通過一個自定義的視圖或活動施工期間的信息,但有兩點需要說明:

  1. 你不能在你的應用程序啓動,且不會另一應用的第一組件這樣做或應用組件給你...
  2. 這個CAN會導致不安全的代碼。

在大多數情況下,最好在Android生命週期內工作。如果您需要關於Android生命週期的一些信息,您可以從Android文檔或Javadoc中獲取它。

附加說明(編輯):你實際上並不需要getBaseContext()那裏。有幾種Context和您的Activity作爲一個。 getBaseContext()最適合當您需要在Android生命週期之外傳遞或保留Context時使用。

希望這有助於 FuzzicalLogic

+0

@idiottiger和Fuzzical Logic非常感謝你,這已經修復它 – Martin 2012-01-05 12:01:07

+0

它可能是最好永遠不會使用'getBaseContext()'! – slinden77 2013-06-08 15:18:07

+0

其實並非如此。事實上,谷歌建議在任何時候你需要一個沒有getApplicationContext()的對象的生命週期時使用它。在很多情況下,getBaseContext()提供了一個ApplicationContext。但是,人們一致認爲應該謹慎行事,並據此進行規劃。 – 2013-06-08 22:41:44

2
Context context = getBaseContext(); 
ContentResolver cr = getContentResolver(); 

運行後onCreate方法或onCreate方法

相關問題