java.lang.IllegalStateException: 观察者 android.widget.AbsListView$AdapterDataSetObserver 未注册
java.lang.IllegalStateException: Observer android.widget.AbsListView$AdapterDataSetObserver was not registered
我正在尝试在 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 android.widget.AbsListView$AdapterDataSetObserver@21dbdb80 was not registered.
这是完整的日志:
22/com.example.admin.chatsdk W/System.err﹕ java.lang.IllegalStateException: Observer android.widget.AbsListView$AdapterDataSetObserver@21dbdb80 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.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)
请指导我解决这个问题。提前致谢。
下面的代码不应该在 for 循环之外吗? :
CustomAdapterM customAdapter = new CustomAdapterM(getApplicationContext(), android.R.layout.simple_list_item_1, list);
lv.setAdapter((customAdapter));
我在 for loop
中创建了 CustomAdapterM
对象,正如您在我的问题中看到的那样,这是错误的。
解决问题的步骤:
1) 在 onCreate
方法中,我创建了 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();
我正在尝试在 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 android.widget.AbsListView$AdapterDataSetObserver@21dbdb80 was not registered.
这是完整的日志:
22/com.example.admin.chatsdk W/System.err﹕ java.lang.IllegalStateException: Observer android.widget.AbsListView$AdapterDataSetObserver@21dbdb80 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.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)
请指导我解决这个问题。提前致谢。
下面的代码不应该在 for 循环之外吗? :
CustomAdapterM customAdapter = new CustomAdapterM(getApplicationContext(), android.R.layout.simple_list_item_1, list);
lv.setAdapter((customAdapter));
我在 for loop
中创建了 CustomAdapterM
对象,正如您在我的问题中看到的那样,这是错误的。
解决问题的步骤:
1) 在 onCreate
方法中,我创建了 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();