2016-04-06 71 views
2

我將配置保存爲SharedPreferences並將其加載到擴展Services類中。無法實例化服務> java.lang.NullPointerException

但當我嘗試獲取配置的值出現錯誤,錯誤,如:

無法實例化服務kr.co.composer.callrecord.recorder.CallRecordService:顯示java.lang.NullPointerException

在行:

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

在佈局Configuration我保存的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'初始化裏面'的onCreate()',並刪除了'final'修改。 –

+0

看起來你的上下文是空的 –

+0

謝謝@MikeM。你的答案正在起作用。請添加回答接受你的回答。謝謝。 – vanloc

回答

1

NullPointerException當應用程序試圖使用一個對象引用,具有空值異常。

不要

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", "")); 
    } 
} 

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只是供參考:OP正在談論一個'服務';你引用了「活動」的文檔。另外,一個'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

相關問題