Мое приложение принудительно закрывается при вызове putString для SharedPreference.Editor - PullRequest
0 голосов
/ 06 февраля 2020

Проблема возникает, когда я вызываю putString для SharedPreference. Моя программа сначала запускается через TileService, который запускает ForegroundService, затем из ForegroundService открывает Activity, и в этой Activity я вызываю putString для SharedPreference.

Как заставить его работать идеально?

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;
    }
...

Сервис

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

Активность

...
    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();
    }
...

Ошибка

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

1 Ответ

0 голосов
/ 06 февраля 2020

Как говорится в сообщении об ошибке, намерение в вашем классе обслуживания является нулевым, когда вы звоните intent.getAction()

Намерение здесь может иметь значение в соответствии с документами

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.

Добавление нулевой проверки перед проверкой getAction() исправит cra sh, но вы, возможно, захотите узнать, почему ваш сервис перезапускается

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...