2016-05-14 149 views
1

我正在Android Studio中開發我的第一個應用程序。我有兩個班。一個包含設置。如果我沒有上下文,該怎麼辦?

public class settings { 
    private int przed_termin; 
    private int przed_po_otwarciu; 
    private boolean powiadomienia; 
    private ustawienia_sql ustawienia_baza; 
} 

而第二個負責讀取並保存到SQLite數據庫。現在我試圖在settings中創建對象settings_sql,但要做到這一點,我需要一個Context。有可能通過這個嗎?

public class settings_sql extends SQLiteOpenHelper { 
    public settings_sql (Context context) { 
     super(context, "ustawienia.db", null, 1); 
    } 
} 
+2

只保存這些少數值使用SharedPrefernces –

+0

將上下文作爲參數傳遞或從基本Activity中獲取。 –

回答

1

我要去g你有點理解代碼。上下文對於新的Android程序員來說是一種常見的挫敗感。

實際上有4種不同類型的上下文對象。這是重要的知道。一般來說,如果你正在做用戶控件,你需要用戶控件託管在其中的Activity上下文。daylight的答案將適用於此。基本上,上下文對象是一個Activity對象。還有服務實例對象具有服務上下文。

另一個上下文類型是應用程序上下文。

這是你如何確保在你的應用程序的任何類可以訪問應用程序上下文:

像這樣創建一個類。這靜態存儲引用它的自我與訪問者:

public class MyApp extends Application{ 
    private static Context applicationContext; 

    public void onCreate() { 
     applicationContext = this; 
    } 

    public static Context getApplicationContext() { 
     return applicationContext; 
    } 
} 

修改您的ApplicationManifest.xml包括在您的應用程序標籤的name屬性:

<application 
    android:name="MyApp" 
    android:allowBackup="true" 
    android:icon="@drawable/icon" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme"> 
    <activity...... 
</application> 

那麼無論你需要一個上下文對象和唐「T具有一個使用無限便捷:

MyApp.getApplicationContext() 

例如:

settings_sql(MyApp.getApplicationContext()); 

因爲您在應用程序類中創建了oncreate事件,所以您可以放心,在應用程序中它永遠不會爲空。

0

在您的MainActivity做這樣的事情:

private static Context context; 

public void onCreate() { 
     super.onCreate(); 
     context = getApplicationContext(); 
    } 

然後,當你撥打電話只是通過上下文

+0

其在nonActivity情況下的意思 – Hosseini

0

最簡單的解決辦法是有一個應用程序類的APK和。添加一個靜態方法來檢索上下文,如下所示:

public class MyApplication extends Application { 
private static MyApplication sInstance = null; 

@Override 
public void onCreate() { 
    super.onCreate(); 
    sInstance = this; 
} 

public static Context getContext() { 
    return sInstance.getApplicationContext(); 
} 
1

我建議將上下文傳遞給需要它的類。你已經有了你的settings_sql(Context context)構造函數,這是一個好的開始。

在您的主應用程序代碼中,您可以輕鬆地從活動或應用程序傳遞上下文,具體取決於您的需求以及settings_sql對象的實際生命週期。此對象是否需要超出單個活動的持續時間?

如果您決定編寫測試,您可以不依賴於任何類中的靜態變量,這些變量可能與您的測試無關。例如,爲什麼本地單元測試需要了解Application類?

你可能不會在一開始或者根本就不會遇到這個問題,而且一個靜態變量可能是一個完美可行的短期解決方案,但要注意,在有限範圍內重新與系統的某些部分進行交互,尤其是測試。

相關問題