Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法实例化服务>;java.lang.NullPointerException_Java_Android - Fatal编程技术网

无法实例化服务>;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。先生,我错了。谢谢你的宝贵信息。