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)