Java 从ArrayList中删除某些内容后ActivityThread崩溃程序
好的,我的程序中有这个方法,从ArrayList中删除一个对象。(方法在这篇文章的底部)。它还做了一些其他的事情,但在调试了很多之后,我发现是这一行导致程序崩溃:Java 从ArrayList中删除某些内容后ActivityThread崩溃程序,java,android,arrays,collections,crash,Java,Android,Arrays,Collections,Crash,好的,我的程序中有这个方法,从ArrayList中删除一个对象。(方法在这篇文章的底部)。它还做了一些其他的事情,但在调试了很多之后,我发现是这一行导致程序崩溃: myTrackedEventsList.remove(currentEvent); 我试着在有和没有这条线的情况下运行块来测试这一点。没有这条线它就不会崩溃。 有趣的是,这行代码并没有直接使程序崩溃,实际上整个方法都在运行,它返回到我调用它的地方,这是我的代码 public void onClick(View v) {} 退出on
myTrackedEventsList.remove(currentEvent);
我试着在有和没有这条线的情况下运行块来测试这一点。没有这条线它就不会崩溃。
有趣的是,这行代码并没有直接使程序崩溃,实际上整个方法都在运行,它返回到我调用它的地方,这是我的代码
public void onClick(View v) {}
退出onClick方法后,它会跳转到
Activity.java -> View.java -> ActivityThread.jaca -> Handler.java and Looper.java
现在,我真的不知道这些类做什么,我也不知道为什么它们会导致我的程序崩溃。。。是ActivityThread.java导致程序崩溃
你能帮我找出程序崩溃的原因吗?=)
提前非常感谢您的帮助!
所有代码可在此处找到:
这是我得到的错误代码:
12-03 21:04:08.365 17346-17346/com.simonm.bigdaycountdown E/AndroidRuntime: FATAL EXCEPTION: main
12-03 21:04:08.365 17346-17346/com.simonm.bigdaycountdown E/AndroidRuntime: Process: com.simonm.bigdaycountdown, PID: 17346
12-03 21:04:08.365 17346-17346/com.simonm.bigdaycountdown E/AndroidRuntime: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference
12-03 21:04:08.365 17346-17346/com.simonm.bigdaycountdown E/AndroidRuntime: at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:394)
12-03 21:04:08.365 17346-17346/com.simonm.bigdaycountdown E/AndroidRuntime: at android.widget.ArrayAdapter.getView(ArrayAdapter.java:362)
12-03 21:04:08.365 17346-17346/com.simonm.bigdaycountdown E/AndroidRuntime: at android.widget.AbsListView.obtainView(AbsListView.java:2344)
12-03 21:04:08.365 17346-17346/com.simonm.bigdaycountdown E/AndroidRuntime: at android.widget.ListView.makeAndAddView(ListView.java:1864)
12-03 21:04:08.365 17346-17346/com.simonm.bigdaycountdown E/AndroidRuntime: at android.widget.ListView.fillDown(ListView.java:698)
12-03 21:04:08.365 17346-17346/com.simonm.bigdaycountdown E/AndroidRuntime: at android.widget.ListView.fillFromTop(ListView.java:759)
12-03 21:04:08.365 17346-17346/com.simonm.bigdaycountdown E/AndroidRuntime: at android.widget.ListView.layoutChildren(ListView.java:1673)
12-03 21:04:08.365 17346-17346/com.simonm.bigdaycountdown E/AndroidRuntime: at android.widget.AbsListView.onLayout(AbsListView.java:2148)
12-03 21:04:08.365 17346-17346/com.simonm.bigdaycountdown E/AndroidRuntime: at android.view.View.layout(View.java:15691)
12-03 21:04:08.365 17346-17346/com.simonm.bigdaycountdown E/AndroidRuntime: at android.view.ViewGroup.layout(ViewGroup.java:4967)
12-03 21:04:08.365 17346-17346/com.simonm.bigdaycountdown E/AndroidRuntime: at android.support.v4.widget.DrawerLayout.onLayout(DrawerLayout.java:1067)
12-03 21:04:08.365 17346-17346/com.simonm.bigdaycountdown E/AndroidRuntime: at android.view.View.layout(View.java:15691)
12-03 21:04:08.365 17346-17346/com.simonm.bigdaycountdown E/AndroidRuntime: at android.view.ViewGroup.layout(ViewGroup.java:4967)
12-03 21:04:08.365 17346-17346/com.simonm.bigdaycountdown E/AndroidRuntime: at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573)
12-03 21:04:08.365 17346-17346/com.simonm.bigdaycountdown E/AndroidRuntime: at android.widget.FrameLayout.onLayout(FrameLayout.java:508)
12-03 21:04:08.365 17346-17346/com.simonm.bigdaycountdown E/AndroidRuntime: at android.view.View.layout(View.java:15691)
12-03 21:04:08.365 17346-17346/com.simonm.bigdaycountdown E/AndroidRuntime: at android.view.ViewGroup.layout(ViewGroup.java:4967)
12-03 21:04:08.365 17346-17346/com.simonm.bigdaycountdown E/AndroidRuntime: at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703)
12-03 21:04:08.365 17346-17346/com.simonm.bigdaycountdown E/AndroidRuntime: at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557)
12-03 21:04:08.365 17346-17346/com.simonm.bigdaycountdown E/AndroidRuntime: at android.widget.LinearLayout.onLayout(LinearLayout.java:1466)
12-03 21:04:08.365 17346-17346/com.simonm.bigdaycountdown E/AndroidRuntime: at android.view.View.layout(View.java:15691)
12-03 21:04:08.365 17346-17346/com.simonm.bigdaycountdown E/AndroidRuntime: at android.view.ViewGroup.layout(ViewGroup.java:4967)
12-03 21:04:08.365 17346-17346/com.simonm.bigdaycountdown E/AndroidRuntime: at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573)
12-03 21:04:08.365 17346-17346/com.simonm.bigdaycountdown E/AndroidRuntime: at android.widget.FrameLayout.onLayout(FrameLayout.java:508)
12-03 21:04:08.365 17346-17346/com.simonm.bigdaycountdown E/AndroidRuntime: at android.view.View.layout(View.java:15691)
12-03 21:04:08.365 17346-17346/com.simonm.bigdaycountdown E/AndroidRuntime: at android.view.ViewGroup.layout(ViewGroup.java:4967)
12-03 21:04:08.365 17346-17346/com.simonm.bigdaycountdown E/AndroidRuntime: at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703)
12-03 21:04:08.365 17346-17346/com.simonm.bigdaycountdown E/AndroidRuntime: at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557)
12-03 21:04:08.365 17346-17346/com.simonm.bigdaycountdown E/AndroidRuntime: at android.widget.LinearLayout.onLayout(LinearLayout.java:1466)
12-03 21:04:08.365 17346-17346/com.simonm.bigdaycountdown E/AndroidRuntime: at android.view.View.layout(View.java:15691)
12-03 21:04:08.365 17346-17346/com.simonm.bigdaycountdown E/AndroidRuntime: at android.view.ViewGroup.layout(ViewGroup.java:4967)
12-03 21:04:08.365 17346-17346/com.simonm.bigdaycountdown E/AndroidRuntime: at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573)
12-03 21:04:08.365 17346-17346/com.simonm.bigdaycountdown E/AndroidRuntime: at android.widget.FrameLayout.onLayout(FrameLayout.java:508)
12-03 21:04:08.365 17346-17346/com.simonm.bigdaycountdown E/AndroidRuntime: at android.view.View.layout(View.java:15691)
12-03 21:04:08.365 17346-17346/com.simonm.bigdaycountdown E/AndroidRuntime: at android.view.ViewGroup.layout(ViewGroup.java:4967)
12-03 21:04:08.365 17346-17346/com.simonm.bigdaycountdown E/AndroidRuntime: at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2093)
12-03 21:04:08.365 17346-17346/com.simonm.bigdaycountdown E/AndroidRuntime: at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1850)
12-03 21:04:08.365 17346-17346/com.simonm.bigdaycountdown E/AndroidRuntime: at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1063)
12-03 21:04:08.365 17346-17346/com.simonm.bigdaycountdown E/AndroidRuntime: at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5807)
12-03 21:04:08.365 17346-17346/com.simonm.bigdaycountdown E/AndroidRuntime: at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)
12-03 21:04:08.365 17346-17346/com.simonm.bigdaycountdown E/AndroidRuntime: at android.view.Choreographer.doCallbacks(Choreographer.java:580)
12-03 21:04:08.365 17346-17346/com.simonm.bigdaycountdown E/AndroidRuntime: at android.view.Choreographer.doFrame(Choreographer.java:550)
12-03 21:04:08.365 17346-17346/com.simonm.bigdaycountdown E/AndroidRuntime: at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753)
12-03 21:04:08.365 17346-17346/com.simonm.bigdaycountdown E/AndroidRuntime: at android.os.Handler.handleCallback(Handler.java:739)
12-03 21:04:08.365 17346-17346/com.simonm.bigdaycountdown E/AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:95)
12-03 21:04:08.365 17346-17346/com.simonm.bigdaycountdown E/AndroidRuntime: at android.os.Looper.loop(Looper.java:135)
12-03 21:04:08.365 17346-17346/com.simonm.bigdaycountdown E/AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:5321)
12-03 21:04:08.365 17346-17346/com.simonm.bigdaycountdown E/AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
12-03 21:04:08.365 17346-17346/com.simonm.bigdaycountdown E/AndroidRuntime: at java.lang.reflect.Method.invoke(Method.java:372)
12-03 21:04:08.365 17346-17346/com.simonm.bigdaycountdown E/AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1016)
12-03 21:04:08.365 17346-17346/com.simonm.bigdaycountdown E/AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:811)
12-03 21:04:08.459 17346-17346/com.simonm.bigdaycountdown I/Process: Sending signal. PID: 17346 SIG: 9
这是deleteEvent()方法:
看起来您的myTrackedEventsList为空。检查向该数组添加数据的位置,并确保正在填充数据。这可能是由Log.i(someString,null)引起的
尝试调用listAdapter.notifyDataSetChanged()方法。我应该在哪里调用此方法?它有什么作用在调试时,它看起来不像那样,因为它在deleteEvent()方法之后直接跳转到Activity.java…我认为它必须是myTrackedEventsList.remove(currentEvent);因为当我拆下那条线时,它没有崩溃。。所以我想这必须在某个地方创建一些空对象,但是我测试过,在这行之后的ArrayList中也没有空对象。。。
protected void deleteEvent(){
if (currentEvent != null) {
eventNames.remove(currentEvent.getEventTitle());
//TODO: This line somehow crashes the program long after it has been executed, I have no idea why.
myTrackedEventsList.remove(currentEvent);
currentEvent.delete();
currentEvent = null;
Collections.sort(myTrackedEventsList);
if (myTrackedEventsList.size() > 0){
currentEvent = myTrackedEventsList.get(0);
updateUI();
}
updateEventDrawer();
}
if (myTrackedEventsList.size() == 0){
resetUI();
updateEventDrawer();
noEventsUI();
findViewById(R.id.getStartedText).setVisibility(View.VISIBLE);
((ImageView) findViewById(R.id.background)).setImageResource(R.mipmap.background);
}
}
String.valueOf(null) //return null
Log.i("eventListBEFORE", String.valueOf(myTrackedEventsList));