我有这些代码行,我想在 CustomAdapter
的 getview()
方法中使用它们。
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
try {
final MobileServiceList<User> result =
mUser.where().field("name").eq(currentItem.getTo()).select("designation").execute().get();
int counter=
mUser.where().select("designation").execute().get().getTotalCount();
for (User item : result) {
// Log.i(TAG, "Read object with ID " + item.id);
desig[0] = item.getDesignation();
Log.v("FINALLY DESIGNATION IS", desig[0]);
}
} catch (Exception exception) {
exception.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
// gb.setDesignation(desig[0]);
designation.setText(desig[0]);
}
}.execute();
这是我的 AsyncTask 代码,我用它来填充自定义 ListView 。这段代码不断运行,我不知道多少次。但最终,经过对 TextView 的多次更新(designation
),它给了我正确的结果。这不仅会降低我的应用程序的性能,还会在达到结果之前在 TextView 上显示多个更新。
我正在 desig[0]
变量中获取数据,请查看我的代码。
数据来自 azure 但如果您不是 azure 人员,请不要担心。请帮我解决 Java 部分。
问题
我的问题是如何在 getview()
方法中使用异步任务
。我是否必须创建函数,我可以稍后调用它。数据来自 azure 但如果您不是 azure 人员,请不要担心。请帮我解决 Java 部分。请各位帮助一下
最佳答案
每次必须绘制一行 ListView 时都会调用
getView
。所以不要忘记会有多个doInBackground
同时运行。什么是名称
? ListView 元素内的 View ?
编辑
由于指定是每个单元格中的文本,因此您必须确保要升级的单元格是好的单元格。
我通常做的是使用 ViewHolder我将其附加到回收的 View 上。然后我将 ViewHolder 注册为监听器(监听 AsyncTask)。
ViewHolder
启动请求并向 AsyncTask
提供 ID。然后,当 AsyncTask
运行时,我会定期询问 ViewHolder
提供给 AsyncTask
的 ID 是否正确。如果不是,我取消 AsyncTask
(不需要同步)。
然后,当 AsyncTask
完成时,我最后一次检查 ID 是否与 ViewHolder
给出的 ID 匹配,并通知监听器 (ViewHolder
)表明结果可用。
这样,您就可以确保 AsyncTask
不会无缘无故地工作。
但是当然这取决于您在 AsyncTask 中实际执行的任务类型...
关于java - 在 getview() 方法中使用异步任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31785780/