简体   繁体   English

在 SharedPreference.Editor 上调用 putString 时,我的应用程序强制关闭

[英]My app force close when call putString on SharedPreference.Editor

The problem occurs when I call putString to SharedPreference.当我将 putString 调用到 SharedPreference 时会出现问题。 My program is first run through TileService which runs a ForegroundService then from ForegroundService opens an Activity and in this Activity I call putString to a SharedPreference.我的程序首先通过运行 ForegroundService 的 TileService 运行,然后从 ForegroundService 打开一个活动,在这个活动中我调用 putString 到 SharedPreference。

How to make it work perfectly?如何让它完美运行?

TileService瓷砖服务

...
    @Override
    public void onClick()
    {
        super.onClick();
        Intent intent = new Intent(mContext,AdzanService.class);
        if(mTileEnabled)
            intent.setAction("STOP_SERVICE");
        else
            intent.setAction("START_SERVICE");
        startForegroundService(intent);
        mTileEnabled = !mTileEnabled;
    }
...

Service服务

...
    @Override
    public int onStartCommand(Intent intent, int flags, int startId)
    {
        if (intent.getAction().equals("STOP_SERVICE"))
        {
            stopForeground(true);
            stopSelf();
        }
...

Activity活动

...
    private void save(){
        mEditor.putString("setting_location",((EditText)findViewById(R.id.setting_location)).getText().toString());
        mEditor.putString("setting_times",((RadioButton)findViewById(((RadioGroup)findViewById(R.id.setting_times)).getCheckedRadioButtonId())).getTag().toString());
        mEditor.apply();
    }
...

Error错误

java.lang.RuntimeException: Unable to start service in.blackant.adzan.AdzanService@873299c with null: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Intent.getAction()' on a null object reference
    at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3722)
    at android.app.ActivityThread.access$1600(ActivityThread.java:198)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1686)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loop(Looper.java:193)
    at android.app.ActivityThread.main(ActivityThread.java:6693)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:495)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:860)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Intent.getAction()' on a null object reference
    at in.blackant.adzan.AdzanService.onStartCommand(AdzanService.java:97)
    at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3703)
    ... 8 more

As the error message states, the Intent in your service class is null when you call intent.getAction()正如错误消息所述,当您调用intent.getAction()时,您的服务类中的 Intent 为 null

Intent is nullable here according to the docs 根据文档,这里的意图可以为空

The Intent supplied to Context.startService(Intent), as given. This may be null if the service is being restarted after its process has gone away, and it had previously returned anything except START_STICKY_COMPATIBILITY.

Adding a null check before you check getAction() will fix the crash, but you might want to look into why your service is being restarted在检查getAction()之前添加空检查将修复崩溃,但您可能需要查看服务重新启动的原因

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM