--> myArrayList.add(i, new CalStats(name, extra, calories)); if that's the array list used by your adapter then you are modifying it outside of the UI thread.
On Sun, Oct 11, 2009 at 11:07 AM, ccfrazier2 <georgefraz...@yahoo.com> wrote: > > Yeah, it's the main thread of my app, here's the stack: > > myApp [Android Application] > myApp [Android Application] > DalvikVM[localhost:8613] > Thread [<3> main] (Suspended (exception IllegalStateException)) > Thread [<15> Binder Thread #3] (Running) > Thread [<13> Binder Thread #2] (Running) > Thread [<11> Binder Thread #1] (Running) > > > Thread [<3> main] (Suspended (exception IllegalStateException)) > ListView.layoutChildren() line: 1596 > ListView(AbsListView).onLayout(boolean, int, int, int, int) line: > 1112 > ListView(View).layout(int, int, int, int) line: 6569 > LinearLayout.setChildFrame(View, int, int, int, int) line: 1119 > LinearLayout.layoutVertical() line: 998 > LinearLayout.onLayout(boolean, int, int, int, int) line: 918 > LinearLayout(View).layout(int, int, int, int) line: 6569 > FrameLayout.onLayout(boolean, int, int, int, int) line: 333 > FrameLayout(View).layout(int, int, int, int) line: 6569 > LinearLayout.setChildFrame(View, int, int, int, int) line: 1119 > LinearLayout.layoutVertical() line: 998 > LinearLayout.onLayout(boolean, int, int, int, int) line: 918 > LinearLayout(View).layout(int, int, int, int) line: 6569 > PhoneWindow$DecorView(FrameLayout).onLayout(boolean, int, int, int, > int) line: 333 > PhoneWindow$DecorView(View).layout(int, int, int, int) line: 6569 > ViewRoot.performTraversals() line: 979 > ViewRoot.handleMessage(Message) line: 1613 > ViewRoot(Handler).dispatchMessage(Message) line: 99 > Looper.loop() line: 123 > ActivityThread.main(String[]) line: 4203 > Method.invokeNative(Object, Object[], Class, Class[], Class, int, > boolean) line: not available [native method] > Method.invoke(Object, Object...) line: 521 > ZygoteInit$MethodAndArgsCaller.run() line: 791 > ZygoteInit.main(String[]) line: 549 > NativeStart.main(String[]) line: not available [native method] > > None of my code in this stack. > > Any thoughts on how to track this down? I'm sure I'm doing something > wrong - but it was never a problem > as far as I knew running with 1.5. > > I spawn a thread at the end of "OnCreate" in my Activity that reads > values from a database and populates > the listView. The database reading is done in the worker thread, and I > sort the list and tell the arrayadapter > to notify tht the list has changed in a routine that gets called from > my handler, ie I post at the end of the run > method of the worker thread so I can notify the array adapter from the > UI thread. > > private void fillList(){ > Collections.sort(myArrayList); > // aa is an arrayAdapter > aa.notifyDataSetChanged(); > } > > Thanks for any thoughts you guys have on this. > > Very best, > > pawpaw17 > > On Oct 11, 10:20 am, RichardC <richard.crit...@googlemail.com> wrote: >> When you get the error, can you see from the traceback which thread >> you are in? >> >> -- >> RichardC >> >> On Oct 11, 4:06 pm, ccfrazier2 <georgefraz...@yahoo.com> wrote: >> >> >> >> > Romain, >> >> > thanks for confirming that this message is new in 1.6. >> >> > Actually, I mean to write "I'm sure my adapter mods are IN the UI >> > thread, not the background thread". Anything else that can cause this? >> >> > If I step through the code in the debugger I don't get the exception, >> > but I I run without stepping I do. Also, when I run the phone on >> > the app, I can get it to "work" 3 or 4 times, and then eventually I'll >> > get the force close. >> >> > Can anything else cause this? >> >> > Here's my code in the background thread: >> >> > public void run(){ >> > int i = 0; >> > lsDb.openDataBase(); >> > rescursor = lsDb.Search(); >> > if (rescursor.getCount() > 0){ >> > id_index = rescursor.getColumnIndex("_id"); >> > name_index = rescursor.getColumnIndex("Name"); >> > calories_index = rescursor.getColumnIndex("Calories"); >> > extra_index = rescursor.getColumnIndex("sodium"); >> > } >> > if (rescursor.moveToFirst()){ >> > do { >> > int id = rescursor.getInt(id_index); >> > String name = >> > rescursor.getString(name_index); >> > int calories = >> > rescursor.getInt(calories_index); >> > double extra= >> > rescursor.getDouble(extra_index); >> > // add >> > to array list >> > myArrayList.add(i, new CalStats(name, >> > extra, calories)); >> > i++; >> > } >> > while (rescursor.moveToNext()); >> > } >> > rescursor.close(); >> > lsDb.close(); >> > hh.post(postdoSearchDatabase); >> > } >> >> > The "post" at the end is to a handler. I **do** modify the adapter in >> > the run method there. >> >> > On Oct 11, 1:36 am, Romain Guy <romain...@google.com> wrote: >> >> > > It's not a bug, it's a message that was added to notify app developers >> > > of applications that are doing the wrong thing. >> >> > > > I'm sure my adapter mods are not in the UI thread. >> >> > > Which is exactly the problem. >> >> > > -- >> > > Romain Guy >> > > Android framework engineer >> > > romain...@android.com >> >> > > Note: please don't send private questions to me, as I don't have time >> > > to provide private support. All such questions should be posted on >> > > public forums, where I and others can see and answer them- Hide quoted >> > > text - >> >> - Show quoted text - > > > -- Romain Guy Android framework engineer romain...@android.com Note: please don't send private questions to me, as I don't have time to provide private support. All such questions should be posted on public forums, where I and others can see and answer them --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en -~----------~----~----~----~------~----~------~--~---