2013-05-10 5 views
0

Я работаю в одном приложении, где я получаю непрерывный отклик от сервера, но когда я меняю страницу или перемещаюсь на другой экран, приложение получает stop.I принимаю ответ от сервера, но это не обновление в списке.Приложение останавливается при смене страницы

Я использовал onResume и способ тоже но все же я принимаю ошибку.

код;

protected class GetTask extends AsyncTask<Void, Void, Integer> { 

     @Override 
     protected Integer doInBackground(Void... params) { 
      // TODO Auto-generated method stub 
      try { 
       CallReceiveMsgAPIService(); 
      } catch (Exception e) { 
      } 
      return 0; 
     } 

     @Override 
     protected void onPostExecute(Integer result) { 
      // TODO Auto-generated method stub 
      super.onPostExecute(result); 
      try { 
       if (initiate != 1) { 
        mMessageHandle.sendEmptyMessage(0); 
        new GetTask().execute(); 

        } 
       } else { 


        mLiveChatList.setAdapter(adapter); 
        adapter.notifyDataSetChanged(); 
        mLiveChatList.requestLayout(); 
             alert(); 
       } 
      } catch (Exception e) { 
      } 

     } 
    } 

ошибка:

05-10 14:14:01.213: E/AndroidRuntime(277): FATAL EXCEPTION: main 
05-10 14:14:01.213: E/AndroidRuntime(277): java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread. [in ListView(2131361857, class android.widget.ListView) with Adapter(class com.$ChatListAdapter)] 
05-10 14:14:01.213: E/AndroidRuntime(277): at android.widget.ListView.layoutChildren(ListView.java:1492) 
05-10 14:14:01.213: E/AndroidRuntime(277): at android.widget.AbsListView.onTouchModeChanged(AbsListView.java:1960) 
05-10 14:14:01.213: E/AndroidRuntime(277): at android.view.ViewTreeObserver.dispatchOnTouchModeChanged(ViewTreeObserver.java:591) 
05-10 14:14:01.213: E/AndroidRuntime(277): at android.view.ViewRoot.ensureTouchModeLocally(ViewRoot.java:2021) 
05-10 14:14:01.213: E/AndroidRuntime(277): at android.view.ViewRoot.ensureTouchMode(ViewRoot.java:2005) 
05-10 14:14:01.213: E/AndroidRuntime(277): at android.view.ViewRoot.handleMessage(ViewRoot.java:1774) 
05-10 14:14:01.213: E/AndroidRuntime(277): at android.os.Handler.dispatchMessage(Handler.java:99) 
05-10 14:14:01.213: E/AndroidRuntime(277): at android.os.Looper.loop(Looper.java:123) 
05-10 14:14:01.213: E/AndroidRuntime(277): at android.app.ActivityThread.main(ActivityThread.java:4627) 
05-10 14:14:01.213: E/AndroidRuntime(277): at java.lang.reflect.Method.invokeNative(Native Method) 
05-10 14:14:01.213: E/AndroidRuntime(277): at java.lang.reflect.Method.invoke(Method.java:521) 
05-10 14:14:01.213: E/AndroidRuntime(277): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
05-10 14:14:01.213: E/AndroidRuntime(277): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
05-10 14:14:01.213: E/AndroidRuntime(277): at dalvik.system.NativeStart.main(Native Method) 

может кто-нибудь вытащить меня из этого .. @ Спасибо

+0

onResume и onPause пустые. В чем же необходимость опубликовать его? Posto your logcat и ** соответствующий ** фрагмент кода – Blackbelt

+0

@blackbelt Спасибо за ваш ответ, я удалю его – 2013-05-10 08:14:32

+0

@blackbelt здесь я добавил ошибку, которую я получаю во время прокрутки – 2013-05-10 08:16:24

ответ

0

вызов adapter.notifyDataSetChanged(); после есть изменения в списке, чтобы уведомить listView, что содержимое списка были изменены. Это, безусловно, решит эту ошибку.

protected class GetTask extends AsyncTask<Void, Void, Integer> { 
public interface TaskListener 
{ 
public void updateResult(Object result); 
} 
private TaskListener listener; 
     @Override 
     protected Integer doInBackground(Void... params) { 
      // TODO Auto-generated method stub 
      try { 
       CallReceiveMsgAPIService(); 
      } catch (Exception e) { 
      } 
      return 0; 
     } 

     @Override 
     protected void onPostExecute(Integer result) { 
      // TODO Auto-generated method stub 
      super.onPostExecute(result); 
      try { 
       if (initiate != 1) { 
        mMessageHandle.sendEmptyMessage(0); 
        new GetTask().execute(); 

        } 
       } else { 

      listener.updateResult(result); 
        //mLiveChatList.setAdapter(adapter); 
        //adapter.notifyDataSetChanged(); 
        // mLiveChatList.requestLayout(); 
             // alert(); 
       } 
      } catch (Exception e) { 
      } 

     } 
    } 

В действии реализовать этот интерфейс TaskListener и в методе updateresult код прокомментирован.

+0

Swati я пробовал, но его не работает .. – 2013-05-10 08:20:02

+0

Тогда, вероятно, есть некоторая ошибка в обработке ответов с сервера, можно ли добавить фрагмент кода, чтобы уточнить больше. –

+0

Swati Я добавил код – 2013-05-10 09:29:26

Смежные вопросы