2015-04-05 1 views
2

Я пытаюсь добавить элемент в ListView динамически.

Он проверяет новую запись каждые 5 секунд и устанавливает ее в виде списка.

Это мой код:

public void T2TCheck(){ 
     try { 
      Runnable runnable = new Runnable() { 
       @Override 
       public void run() { 
        List<MessageDB> messageDBList = MessageDB.find(MessageDB.class, "read = 0"); 
        while (true) { 
         if (StaticMember.IS_ACTIVE) { 
          try { 
           for (int i = 0; i < messageDBList.size(); i++) { 
            list.add(new com.example.admin.chatsdk.Message("", messageDBList.get(i).getMessage(), "", messageDBList.get(i).getSent() + "")); 
            CustomAdapterM customAdapter = new CustomAdapterM(getApplicationContext(), android.R.layout.simple_list_item_1, list); 
            lv.setAdapter((customAdapter)); 
           } 

          } catch (Exception e) { e.printStackTrace();} 
         } 
         try { 
          Thread.sleep(5000); 
         } catch (Exception e) { e.printStackTrace();} 
        } 
       } 
      }; 
      Thread thread = new Thread(runnable); 
      thread.start(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

Я получаю исключение это заявление:

lv.setAdapter((customAdapter)); 

Мой исключение составляет:

java.lang.IllegalStateException: Observer [email protected] was not registered. 

Вот полный лог:

22/com.example.admin.chatsdk W/System.err﹕ java.lang.IllegalStateException: Observer [email protected] was not registered. 
04-05 21:32:19.657  507-1222/com.example.admin.chatsdk W/System.err﹕ at android.database.Observable.unregisterObserver(Observable.java:69) 
04-05 21:32:19.657  507-1222/com.example.admin.chatsdk W/System.err﹕ at android.widget.BaseAdapter.unregisterDataSetObserver(BaseAdapter.java:42) 
04-05 21:32:19.657  507-1222/com.example.admin.chatsdk W/System.err﹕ at android.widget.ListView.setAdapter(ListView.java:459) 
04-05 21:32:19.657  507-1222/com.example.admin.chatsdk W/System.err﹕ at com.example.admin.chatsdk.Messages$2.run(Messages.java:152) 
04-05 21:32:19.657  507-1222/com.example.admin.chatsdk W/System.err﹕ at java.lang.Thread.run(Thread.java:841) 

Пожалуйста, помогите мне решить эту проблему. Thanx заранее.

ответ

0

Я создавал CustomAdapterM объект в for loop, как вы можете увидеть в моем вопросе, который является неправильным.

шаги, чтобы решить вопрос:

1) в onCreate Methode я создал adapter object и установить adapter в listview.

CustomAdapterM customAdapter = new CustomAdapterM(getApplicationContext(), android.R.layout.simple_list_item_1, list); 
lv.setAdapter((customAdapter)); 

2) и вызовите функцию notifyDataSetChanged() после добавления новых элементов в список:

for (int i = 0; i < messageDBList.size(); i++) { 
    list.add(new com.example.admin.chatsdk.Message("", messageDBList.get(i).getMessage(), "", messageDBList.get(i).getSent() + "")); 
} 
customAdapter.notifyDataSetChanged(); 
+0

Expain, что ваш ответ. Что ты сделал? –

+1

Извините, я был новым, когда задал этот вопрос. Я отредактировал свой ответ. Пожалуйста, проверьте. –

+0

Отлично! теперь это полезно. Благодарю. –

1

Не должен ли следующий код быть снаружи для цикла? :

 CustomAdapterM customAdapter = new CustomAdapterM(getApplicationContext(), android.R.layout.simple_list_item_1, list); 
    lv.setAdapter((customAdapter));