2017-09-18 10 views
-4

sharedpreferencesを使用する際にnullポインタ例外があります。私は自分の問題を表現する方法を知らない。私は特定の時間に起動するアラームマネージャーを持っていますが、これはフォアグラウンドまたはバックグラウンドでアプリケーションを実行すると非常にうまくいきましたが、私のプログラムを終了すると(最近のアプリケーションからアプリをスワイプすることを意味します)私は検索しましたが、解決策は見つかりませんでした。あなたが私を助けてくれたら教えてください。SharedPreferencesはアプリケーションを終了した後nullPointerExceptionを受け取ります

エラー:

私getAlarmTime方法
java.lang.NullPointerException at com.company.test.Data.od.getAlarmTime() 

public static long getAlarmTime(Context context){ 
    SharedPreferences sh = context.getSharedPreferences("com.company.test", 0); 
    return sh.getLong("AlarmTime", 0); 
} 

と私の方法は、私がbroadcastrecieverからcheckNextPeriod法と呼ば

public class ServiceSchedular { 
    private ServiceSchedular(Context context) { 
    this.context = context; 
    alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
} 
public static void checkNextPeriod() { 
    long millisDate = OfflineData.getAlarmTime(context); 
... 

} 
} 

getAlarmTime()と呼ばれます。

+2

は 'context'はnullです –

+0

**コンテキストを初期化しています** –

+0

@NileshRathod私の質問を編集します。私はServiceSchedularメソッドでコンテキストを初期化し、mainActivityからこのメソッドを呼び出すが、私はプログラムを終了する。インスタント・コンテキストを実行しますか? – Fahim

答えて

0

<application 
     android:name=".MainApplication"<!-- add here your class name--> 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:roundIcon="@mipmap/ic_launcher_round" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 

コード

の下のようなあなたのクラスから自分のメソッドを呼び出して、マニフェストファイルで、このクラス名を追加し、これがこの

public class MainApplication extends Application { 

    private static Context context; 

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

    public static Context getAppContext() { 
     return MainApplication.context; 
    } 
} 

のような1つのクラスを作成してみてください

public static void checkNextPeriod() { long millisDate = OfflineData.getAlarmTime(MainApplication.getAppContext()); } 
+0

静的フィールドにコンテキストを格納するのは悪い習慣です。メモリリークの原因となる可能性があります – shmakova

+0

@shmakovaよりよい解決策をお探しですか?より良い解決策があれば、私と一緒に共有してください。ありがとう – Fahim

+0

@Nilesh Rathod私はあなたのような私のプログラムを変更するが、私はアプリケーションが殺され、意図を作成したときに働くべきアラームマネージャを持っている、私はapplicationcontextで意図を作成するが、nullPointerExceptionがある。私の問題は何ですか?何か解決策はありますか?ありがとう – Fahim

0

パラメータでアクティビティの参照を渡します。

public static void checkNextPeriod() { 
long millisDate = OfflineData.getAlarmTime(YourActivityName.this); 
} 
+0

ご返信ありがとうございます。私はアクティビティを拡張しないクラスからgetAlarmDataを呼び出しますが、私はクラスのgetインスタンスでアクティビティを送信します。私は私の質問を編集する。もう一度お読みください。 – Fahim

関連する問題