2016-04-06 4 views
2

設定をSharedPreferencesで保存し、クラス拡張サービスにロードします。サービスをインスタンス化できません> java.lang.NullPointerException

しかし、私は設定の値を取得しようとするとエラーが表示され、エラーのような:

サービスkr.co.composer.callrecord.recorder.CallRecordServiceをインスタンス化できません:java.lang.NullPointerExceptionが

ラインで

:レイアウトConfiguration

final SharedPreferences mSharedPreference= PreferenceManager.getDefaultSharedPreferences(getApplicationContext());

私はのEditText保存:

final SharedPreferences prefs = PreferenceManager 
     .getDefaultSharedPreferences(this); 

serverUrl.setText(prefs.getString("autoSave", "")); 
serverUrl.addTextChangedListener(new TextWatcher() { 
    @Override 
    public void onTextChanged(CharSequence s, int start, int before, 
           int count) 
    { 
    } 
    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, 
            int after) 
    { 
    } 
    @Override 
    public void afterTextChanged(Editable s) 
    { 
     prefs.edit().putString("autoSave", s.toString()).commit(); 
    } 
}); 

そして、他のクラスでは、私はこのコードによって、この値を取得したい:

public class CallRecordService extends Service { 
    final SharedPreferences mSharedPreference= PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
    @Override 
    public void onCreate() { 
     serverURL =(mSharedPreference.getString("autoSave", "")); 
    } 
} 
+1

移動 'mSharedPreference'の初期化を行い、そして' final'修飾子を削除しないでください。 –

+0

あなたのコンテキストがnullであるようです –

+0

ありがとう@MikeM。あなたの答えは働いています。あなたの答えを受け入れるために回答に追加してください。ありがとうございました。 – vanloc

答えて

1

NullPointerExceptionアプリケーションがnull値を持つ、オブジェクト参照を使用しようとしたときにスローされます。

public class CallRecordService extends Service { 
    final SharedPreferences mSharedPreference= PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
    // Call this in your onCreate() section . 
    @Override 
    public void onCreate() { 
     serverURL =(mSharedPreference.getString("autoSave", "")); 
    } 
} 

は、内部の `のonCreate()`に

public class CallRecordService extends Service { 
    final SharedPreferences mSharedPreference= 
    @Override 
    public void onCreate() { 
     PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); // You can pass context here 
     serverURL =(mSharedPreference.getString("autoSave", "")); 
    } 
} 
+0

ありがとうございました。 – vanloc

+1

@IntelliJちょうどFYI:OPは「サービス」について話しています。あなたは 'Activity'のために文書を引用しました。また、 'final'フィールドはコンストラクタ内でのみ割り当てることができます。 'onCreate()'に 'mSharedPreference'初期化を表示するつもりなら、宣言で' final'修飾子を削除し、 'onCreate()'の最初の行の前に 'mSharedPreference ='を追加する必要があります。 –

+0

@MikeM。私の間違い。あなたの熱心な情報に感謝します。 –

1

あなたは)(のonCreate前getApplicationContext()を呼び出すことはできません。代わりに、あなたはこのようにそれを行うことができます。

public class CallRecordService extends Service { 
    @Override 
    public void onCreate() { 
     final SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this); 
     serverURL = sp.getString("autoSave", ""); 
    } 
} 
+0

ありがとうございます。私は私の問題を解決しました。 – vanloc

関連する問題