2016-05-14 9 views
1

私はAndroid Studioで最初のアプリを開発しています。私には2つのクラスがあります。 1つは設定を含んでいます。コンテキストがない場合はどうすればいいですか?

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

そして、2番目は、SQLiteデータベースに読み込んで保存します。そして今私はオブジェクトsettings_sqlsettingsに作成しようとしていますが、そのためにはContextが必要です。それを過ぎる可能性はありますか?あなたのMainActivityで

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

SharedPreferncesを使用するだけで、これらのいくつかの値を保存する –

+0

コンテキストをパラメータとして渡すか、ベースアクティビティから取得します。 –

答えて

1

私はgに行く予定ですあなたは少しのコードを理解してください。コンテキストは、新しいAndroidプログラマーの共通の不満です。

実際には4種類のContextオブジェクトがあります。これは知っておくことが重要です。通常、ユーザーコントロールを行っている場合、ユーザーコントロールがホストされているアクティビティコンテキストが必要になります。そのためにはdaylightの答えが有効です。基本的に、コンテキストオブジェクトはアクティビティオブジェクトです。サービスコンテキストを持つサービスインスタンスオブジェクトもあります。

もう1つのコンテキストタイプは、アプリケーションコンテキストです。

これは、あなたのアプリで任意のクラスは、アプリケーション・コンテキストへのアクセス権を持っていることを確認する方法である:

このようなクラスを作成します。これは、静的に、それを参照するには、アクセサと自己の店舗:

public class MyApp extends Application{ 
    private static Context applicationContext; 

    public void onCreate() { 
     applicationContext = this; 
    } 

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

は、アプリケーションのタグにname属性が含まれるように、あなたのApplicationManifest.xmlを変更します。

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

その後、あなたはコンテキストオブジェクトとドンが必要な場所

:たとえば

MyApp.getApplicationContext() 

「tは1つのconvient使用を持っています

アプリケーションクラスのoncreateイベントを作成するので、アプリケーション内でnullになることはありません。

0

ような何かを:あなたは、コールがちょうどでコンテキストを渡す作るときに

private static Context context; 

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

+0

は、非活動状況におけるその意味 – Hosseini

0

最も簡単な解決策は、あなたのAPK内のApplicationクラスを持つことで、次のように静的メソッドを追加してコンテキストを取得します。

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

Contextを必要なクラスに渡すことをお勧めします。あなたはすでにsettings_sql(Context context)コンストラクタを持っています。これは良いスタートです。

メインアプリケーションのコードでは、必要に応じて、またsettings_sqlオブジェクトの実際の有効期間に応じて、アクティビティまたはアプリケーションからコンテキストを簡単に渡すことができます。このオブジェクトは単一のアクティビティの期間を超えて生きる必要がありますか?

次に、テストを書くことに決めたら、テストにあまり関係ないかもしれない任意のクラスに保持されている静的変数に依存しません。ローカルユニットテストで、なぜApplicationクラスについて知る必要があるのでしょうか?

あなたはこの問題を早期に、まったく実行しないかもしれませんし、静的変数は完全に実行可能な短期的な解決策かもしれませんが、これは、限られた範囲、特にテスト内からシステムの一部とやりとりすることができます。

関連する問題