【问题标题】:How I can refres/update from server, in my ListView (CustomAdapter)如何在我的 ListView(自定义适配器)中从服务器刷新/更新
【发布时间】:2014-03-19 17:44:16
【问题描述】:

我有一个问题如何更新使用自定义适配器的ListView,我尝试执行thread while (true). Start() 以始终监听服务器(不起作用)。

我想更新列表(状态(离线、在线..)、图像等..)。比如在我的ListView

User 1 offine     
User 2, offine       
- Waiting, after 3 seconds     
User 1 online     
User 2, offline 

我已经读到这可以通过handler 来完成:

android listview update/refresh data without closing the app

https://stackoverflow.com/questions/18030607/update-list-view-in-android

但是有没有办法在没有处理程序的情况下从服务器刷新数据?

我加载列表(我如何总是实现?):

listAdapter1 = getListData();
customListAdapter = new CustomListAdapter(getApplicationContext(), listAdapter1);
user_list.setAdapter(customListAdapter);
egisterForContextMenu(user_list);

我的全日志猫:

03-17 22:46:07.439: E/AndroidRuntime(6026): FATAL EXCEPTION: main
03-17 22:46:07.439: E/AndroidRuntime(6026): java.lang.IllegalStateException: Observer android.widget.AbsListView$AdapterDataSetObserver@4e9c7894 was not registered.
03-17 22:46:07.439: E/AndroidRuntime(6026):     at android.database.Observable.unregisterObserver(Observable.java:69)
03-17 22:46:07.439: E/AndroidRuntime(6026):     at android.widget.BaseAdapter.unregisterDataSetObserver(BaseAdapter.java:42)
03-17 22:46:07.439: E/AndroidRuntime(6026):     at android.widget.AbsListView.onDetachedFromWindow(AbsListView.java:2638)
03-17 22:46:07.439: E/AndroidRuntime(6026):     at android.view.View.dispatchDetachedFromWindow(View.java:12160)
03-17 22:46:07.439: E/AndroidRuntime(6026):     at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:2570)
03-17 22:46:07.439: E/AndroidRuntime(6026):     at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:2568)
03-17 22:46:07.439: E/AndroidRuntime(6026):     at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:2568)
03-17 22:46:07.439: E/AndroidRuntime(6026):     at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:2568)
03-17 22:46:07.439: E/AndroidRuntime(6026):     at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:2568)
03-17 22:46:07.439: E/AndroidRuntime(6026):     at android.view.ViewRootImpl.dispatchDetachedFromWindow(ViewRootImpl.java:2820)
03-17 22:46:07.439: E/AndroidRuntime(6026):     at android.view.ViewRootImpl.doDie(ViewRootImpl.java:5162)
03-17 22:46:07.439: E/AndroidRuntime(6026):     at android.view.ViewRootImpl.die(ViewRootImpl.java:5145)
03-17 22:46:07.439: E/AndroidRuntime(6026):     at android.view.WindowManagerGlobal.removeViewLocked(WindowManagerGlobal.java:359)
03-17 22:46:07.439: E/AndroidRuntime(6026):     at android.view.WindowManagerGlobal.removeView(WindowManagerGlobal.java:309)
03-17 22:46:07.439: E/AndroidRuntime(6026):     at android.view.WindowManagerImpl.removeViewImmediate(WindowManagerImpl.java:84)
03-17 22:46:07.439: E/AndroidRuntime(6026):     at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3535)
03-17 22:46:07.439: E/AndroidRuntime(6026):     at android.app.ActivityThread.access$1200(ActivityThread.java:141)
03-17 22:46:07.439: E/AndroidRuntime(6026):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1309)
03-17 22:46:07.439: E/AndroidRuntime(6026):     at android.os.Handler.dispatchMessage(Handler.java:99)
03-17 22:46:07.439: E/AndroidRuntime(6026):     at android.os.Looper.loop(Looper.java:137)
03-17 22:46:07.439: E/AndroidRuntime(6026):     at android.app.ActivityThread.main(ActivityThread.java:5103)
03-17 22:46:07.439: E/AndroidRuntime(6026):     at java.lang.reflect.Method.invokeNative(Native Method)
03-17 22:46:07.439: E/AndroidRuntime(6026):     at java.lang.reflect.Method.invoke(Method.java:525)
03-17 22:46:07.439: E/AndroidRuntime(6026):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
03-17 22:46:07.439: E/AndroidRuntime(6026):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
03-17 22:46:07.439: E/AndroidRuntime(6026):     at dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

  • 如何填充您的 getlistData?有什么问题?请你解释一下吗?我的意思是,当你更新它时会发生什么?
  • 很难解释。为什么?因为我的方法有效且无效,如果我穿上线程,告诉我:“IllegalStateException.android.w Observer ...未注册”但如果我使用按钮,它可以工作(但我不想要按钮),我想要的是使用线程,我使用“带有可运行的线程”,“执行程序”并告诉我“.android.w Observer ...未注册”,我的意思是线程不记录里面的项目,不知道怎么注册。
  • 对这个问题有任何想法吗?
  • 能不能写满log cat,什么意思..没有注册
  • 我尝试将观察者 + 处理程序注册到线程中,当我全部工作时(线程、注册观察者 + 处理程序、+ 我的方法)调用“IllegalStateException:观察者 android...未注册。”总是称这个错误.. pff

标签: android facebook sqlite android-listview adapter


【解决方案1】:

其实有一种方法可以实现上述功能。请参阅以下几点,以便您了解这一点的想法/逻辑。

  • 为此,您需要警报管理器、广播接收器和服务。

  • AlarmManager 将帮助您每 3 秒检查一次更新。

  • BroadcastReceiver & Service 将帮助处理新的通知和更新 UI。

  • 您需要使用“notifyDataSetChanged()”方法来显示更新的列表视图。

这 4 个步骤足以实现上述逻辑。万一您有任何疑问,您可以与我讨论。

【讨论】:

  • 谢谢,对不起,我一直在忙,我保存你的答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多