2015-04-29 61 views
-3

我有一個擴展應用程序的類。當我嘗試通過使用「getApplicationContext」或使用「getBaseContext」來獲取該類的上下文時,上下文無處不在。在一個擴展類中的Android java:null上下文應用程序

我需要上下文才能使用「getSharedPreferences」。

印刷錯誤是:在android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:109)顯示java.lang.NullPointerException

我在做什麼錯誤:

引起或者有什麼其他方法可以在沒有上下文的情況下使用「getSharedPreferences」(如果可能)?

感謝您的幫助。

編輯一些代碼:

我初始化類「DeviceInfo」在我的主類。類「DeviceInfo」擴展了Application。在它的構造函數我試圖做的:正如前面提到的

protected DeviceInfo() { 

     context = getApplicationContext(); 
} 

至極給了我同樣的錯誤。

這裏是我造成麻煩的主線......

SharedPreferences key = getApplicationContext().getSharedPreferences("keys", Context.MODE_PRIVATE); 

最後編輯:感謝所有,我把所有的投入和意識到我沒有這樣做的正確方法所有。我改變了我的所有代碼,現在它工作,再次感謝。

+4

分享您的代碼plz! – Loc

+3

你是否在onCreate()之外或之前調用方法? – Submersed

+0

您從哪裏調用方法getApplicationContext()? –

回答

0

您的問題是您的應用程序的Context尚未在您嘗試訪問它之前創建。爲確保您的Context已創建,您應該等待訪問您的Context,直到嘗試訪問您的上下文對象之前爲onCreate()

例如:

public class DeviceInfo extends Application { 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     SharedPreferences key = getApplicationContext().getSharedPreferences("keys", Context.MODE_PRIVATE); 
    } 

} 

您還可以使用PreferenceManager.getDefaultSharedPreferences(getApplicationContext())訪問默認的首選項文件。

+0

onCreate函數永遠不會被調用,我不明白爲什麼 –

+1

是否在Android清單中定義了應用程序的名稱? Submersed

+0

我不能這樣做,因爲我已經有了一個擴展應用程序的類 –

0

每當您創建擴展Application的類時,您必須在application標記內的AndroidManifest.xml文件內定義android:name=".YourClass"屬性。

+0

我已經有了一個擴展Application的類。 –

+0

無論如何,你現在有兩個類,現在從應用程序擴展? –

相關問題