无法实例化服务>;java.lang.NullPointerException
我使用无法实例化服务>;java.lang.NullPointerException,java,android,Java,Android,我使用SharedReferences保存配置,并将其加载到扩展服务类中 但当我尝试获取配置值时会出现错误,错误如下: 无法实例化服务kr.co.composer.callrecord.recorder.CallRecordService:java.lang.NullPointerException 第行: final SharedPreferences mSharedPreference=PreferenceManager.getDefaultSharedPreferences(getAppl
SharedReferences
保存配置,并将其加载到扩展服务类中
但当我尝试获取配置值时会出现错误,错误如下:
无法实例化服务kr.co.composer.callrecord.recorder.CallRecordService:java.lang.NullPointerException
第行:
final SharedPreferences mSharedPreference=PreferenceManager.getDefaultSharedPreferences(getApplicationContext())代码>
在布局Configuration
I中保存编辑文本:
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", ""));
}
}
在onCreate()之前不能调用getApplicationContext()。相反,您可以这样做:
public class CallRecordService extends Service {
@Override
public void onCreate() {
final SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
serverURL = sp.getString("autoSave", "");
}
}
当应用程序尝试使用对象引用时抛出,该引用的值为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", ""));
}
}
Do
public class CallRecordService extends Service {
final SharedPreferences mSharedPreference=
@Override
public void onCreate() {
PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); // You can pass context here
serverURL =(mSharedPreference.getString("autoSave", ""));
}
}
将mSharedPreference
初始化移动到内部onCreate()
,然后删除final
修饰符。您的上下文似乎为空谢谢@MikeM。你的答案有效。请添加到答案以接受您的答案。谢谢。@VănLộc那很酷。简单的修复。如果其中一个答案对你有帮助,你可以接受其中一个。不过谢谢你。干杯@米肯。你真棒!谢谢我解决了我的问题。@IntelliJ仅供参考:OP谈论的是一项服务
;您引用了活动
的文档。此外,只能在构造函数中分配最终
字段。如果要在onCreate()
中显示mSharedPreference
初始化,则需要删除声明中的final
修饰符,并在onCreate()
中的第一行前面添加mSharedPreference=
@MikeM。先生,我错了。谢谢你的宝贵信息。