Java 应用程序关闭时服务崩溃

Java 应用程序关闭时服务崩溃,java,android,Java,Android,我正在开发一个应用程序来提醒我这些东西。我使用报警管理器重复报警但是当我设置多个警报时,如果我关闭应用程序,第一个警报服务崩溃,第二个警报工作正常。我不知道为什么。 广播接收机代码 public class broadcast extends WakefulBroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String intentID =

我正在开发一个应用程序来提醒我这些东西。我使用报警管理器重复报警但是当我设置多个警报时,如果我关闭应用程序,第一个警报服务崩溃,第二个警报工作正常。我不知道为什么。

广播接收机代码

public class broadcast extends WakefulBroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        String intentID = intent.getStringExtra("com.todolist.dailylist.data");
        Intent service = new Intent(context, service.class);
        service.putExtra("com.todolist.dailylist.listID", intentID);
        context.startService(service);
    }
}
当警报触发时,服务会显示一个覆盖窗口,就像最需要做的应用一样

服务舱

public class service extends Service {
    private WindowManager windowManager;
    private LayoutInflater inflater;
    private View myview;
    private diUtil databaseutil;
    private String listID;
    private String value = null;
    private TextView listTitle;
    private TextView listDescription;
    private RelativeLayout rootLayout;
    private RelativeLayout controllerIcons;
    private ImageButton doneImage;

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }


    @Override
    public void onCreate() {
        databaseutil = new diUtil(this);
        windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
        inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
        WindowManager.LayoutParams params = new WindowManager.LayoutParams(
                WindowManager.LayoutParams.MATCH_PARENT,
                WindowManager.LayoutParams.MATCH_PARENT,
                WindowManager.LayoutParams.TYPE_TOAST,
                WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
                PixelFormat.TRANSLUCENT);

        params.gravity = Gravity.TOP | Gravity.CENTER;

        myview = inflater.inflate(R.layout.notificationwindow , null);

        listTitle = (TextView)myview.findViewById(R.id.listTitleHeader);
        listDescription = (TextView)myview.findViewById(R.id.listDescriptionHeader);
        controllerIcons = (RelativeLayout)myview.findViewById(R.id.controller_icons);
        rootLayout = (RelativeLayout)myview.findViewById(R.id.layout_controller);
        doneImage = (ImageButton) myview.findViewById(R.id.doneIconController);
        windowManager.addView(myview, params);


    }


    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        listID = intent.getStringExtra("com.todolist.dailylist.listID");
        ArrayList<listData> data = databaseutil.getListitem(listID);
        for(int i=0; i < data.size();i++){
            listTitle.setText(data.get(i).getListName());
            if(data.get(i).getListText() != null){
                Toast.makeText(this, "description present", Toast.LENGTH_SHORT).show();

            }else if(data.get(i).getListText() == null){
                Toast.makeText(this, "description not present", Toast.LENGTH_SHORT).show();

            }

            doneImage.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    windowManager.removeView(myview);

                }
            });

        }

        return Service.START_STICKY;
    }





    @Override
    public void onDestroy() {
        windowManager.removeView(myview);
        super.onDestroy();
    }

}

有人知道为什么会发生这种情况,以及如何解决这个问题吗?。非常感谢你的阅读。非常感谢

提示:
原因:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“java.lang.String android.content.Intent.getStringExtra(java.lang.String)”
。调用
.getStringExtra
时,由
意图引起的问题为空。让我们调试以检查它,但第一次为空,如果有第二个警报,第二个警报工作正常,没有错误。我不明白你为什么会在谷歌上搜索关于:null Intent+onStartCommand的问题。因为问题来自
onStartCommand
方法。我不太擅长安卓系统,所以我可以帮你提供一个建议解决方案
public class service extends Service {
    private WindowManager windowManager;
    private LayoutInflater inflater;
    private View myview;
    private diUtil databaseutil;
    private String listID;
    private String value = null;
    private TextView listTitle;
    private TextView listDescription;
    private RelativeLayout rootLayout;
    private RelativeLayout controllerIcons;
    private ImageButton doneImage;

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }


    @Override
    public void onCreate() {
        databaseutil = new diUtil(this);
        windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
        inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
        WindowManager.LayoutParams params = new WindowManager.LayoutParams(
                WindowManager.LayoutParams.MATCH_PARENT,
                WindowManager.LayoutParams.MATCH_PARENT,
                WindowManager.LayoutParams.TYPE_TOAST,
                WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
                PixelFormat.TRANSLUCENT);

        params.gravity = Gravity.TOP | Gravity.CENTER;

        myview = inflater.inflate(R.layout.notificationwindow , null);

        listTitle = (TextView)myview.findViewById(R.id.listTitleHeader);
        listDescription = (TextView)myview.findViewById(R.id.listDescriptionHeader);
        controllerIcons = (RelativeLayout)myview.findViewById(R.id.controller_icons);
        rootLayout = (RelativeLayout)myview.findViewById(R.id.layout_controller);
        doneImage = (ImageButton) myview.findViewById(R.id.doneIconController);
        windowManager.addView(myview, params);


    }


    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        listID = intent.getStringExtra("com.todolist.dailylist.listID");
        ArrayList<listData> data = databaseutil.getListitem(listID);
        for(int i=0; i < data.size();i++){
            listTitle.setText(data.get(i).getListName());
            if(data.get(i).getListText() != null){
                Toast.makeText(this, "description present", Toast.LENGTH_SHORT).show();

            }else if(data.get(i).getListText() == null){
                Toast.makeText(this, "description not present", Toast.LENGTH_SHORT).show();

            }

            doneImage.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    windowManager.removeView(myview);

                }
            });

        }

        return Service.START_STICKY;
    }





    @Override
    public void onDestroy() {
        windowManager.removeView(myview);
        super.onDestroy();
    }

}
 Process: com.todolist.dailylist, PID: 5601
                                                 java.lang.RuntimeException: Unable to start service com.todolist.dailylist.services.service@6a10f79 with null: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Intent.getStringExtra(java.lang.String)' on a null object reference
                                                     at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3314)
                                                     at android.app.ActivityThread.-wrap21(ActivityThread.java)
                                                     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1565)
                                                     at android.os.Handler.dispatchMessage(Handler.java:102)
                                                     at android.os.Looper.loop(Looper.java:154)
                                                     at android.app.ActivityThread.main(ActivityThread.java:6077)
                                                     at java.lang.reflect.Method.invoke(Native Method)
                                                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
                                                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
                                                  Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Intent.getStringExtra(java.lang.String)' on a null object reference
                                                     at com.todolist.dailylist.services.service.onStartCommand(service.java:74)
                                                     at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3297)
                                                     at android.app.ActivityThread.-wrap21(ActivityThread.java) 
                                                     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1565) 
                                                     at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                     at android.os.Looper.loop(Looper.java:154) 
                                                     at android.app.ActivityThread.main(ActivityThread.java:6077) 
                                                     at java.lang.reflect.Method.invoke(Native Method) 
                                                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) 
                                                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)