在 getview() 方法中使用 Async Task
Using Async Task inside getview() method
我有这些代码行,我想在 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 代码,我用它来填充自定义列表视图。这段代码一直在 运行,我不知道有多少次。但最终在对 TextView (designation
) 进行了如此多的更新后,它给了我正确的结果。这不仅会降低我的应用程序的性能,还会在到达结果之前在 TextView 上显示多个更新。
我正在 desig[0]
变量中获取数据,看看我的代码。
数据来自 azure 但如果您不是 azure 的人,请不要担心。请在 Java 部分帮助我。
问题
我的问题是如何在 getview()
方法中使用 Async task
。我是否必须制作功能,我可以调用后者。数据来自 azure 但是如果你不是 azure 的人也不要担心。请在 Java 部分帮助我。请帮忙
每次必须绘制一行列表视图时,都会调用 getView
。所以不要忘记同时会有多个doInBackground
运行。什么是 designation
? ListView 元素内的视图 ?
编辑
由于名称是每个单元格中的文本,因此您必须确保要升级的单元格是好的单元格。
我通常做的是使用 ViewHolder 附加到回收视图。然后我将 ViewHolder
注册为监听器(监听 AsyncTask
)。
ViewHolder
启动请求并为 AsyncTask
提供一个 ID。然后,虽然 AsyncTask
是 运行,但我会定期询问 ViewHolder
提供给 AsyncTask
的 ID 是否正确。如果不是,我取消 AsyncTask
(不需要同步)。
然后,当 AsyncTask
完成时,我最后一次检查 ID 是否与 ViewHolder
给出的 ID 匹配,并通知侦听器 (ViewHolder
) 结果可用。
这样,您就可以确定 AsyncTask
没有白做。
但这当然取决于您在 AsyncTask 中实际执行的任务类型...
在Fragment的Activity侧或ActivityCreated上调用AsyncTask subclass并将结果传递给CustomAdapter以更新视图。如果你可以播放你的 Activity 或片段 class 看看放在哪里合适。
您需要制作一个数据模型供您查看。比如制作一个包含所有显示信息的 class(这里是 desig[0]
的字符串)。这样您就可以更新 AsyncTask.onPostExecute()
.
中的视图
或者如果您需要视图仅在 desig
获取时显示,请隐藏它或在从 azure 获取 desig
时添加一个加载等待对话框。
我有这些代码行,我想在 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 代码,我用它来填充自定义列表视图。这段代码一直在 运行,我不知道有多少次。但最终在对 TextView (designation
) 进行了如此多的更新后,它给了我正确的结果。这不仅会降低我的应用程序的性能,还会在到达结果之前在 TextView 上显示多个更新。
我正在 desig[0]
变量中获取数据,看看我的代码。
数据来自 azure 但如果您不是 azure 的人,请不要担心。请在 Java 部分帮助我。
问题
我的问题是如何在 getview()
方法中使用 Async task
。我是否必须制作功能,我可以调用后者。数据来自 azure 但是如果你不是 azure 的人也不要担心。请在 Java 部分帮助我。请帮忙
getView
。所以不要忘记同时会有多个doInBackground
运行。什么是 designation
? ListView 元素内的视图 ?
编辑
由于名称是每个单元格中的文本,因此您必须确保要升级的单元格是好的单元格。
我通常做的是使用 ViewHolder 附加到回收视图。然后我将 ViewHolder
注册为监听器(监听 AsyncTask
)。
ViewHolder
启动请求并为 AsyncTask
提供一个 ID。然后,虽然 AsyncTask
是 运行,但我会定期询问 ViewHolder
提供给 AsyncTask
的 ID 是否正确。如果不是,我取消 AsyncTask
(不需要同步)。
然后,当 AsyncTask
完成时,我最后一次检查 ID 是否与 ViewHolder
给出的 ID 匹配,并通知侦听器 (ViewHolder
) 结果可用。
这样,您就可以确定 AsyncTask
没有白做。
但这当然取决于您在 AsyncTask 中实际执行的任务类型...
在Fragment的Activity侧或ActivityCreated上调用AsyncTask subclass并将结果传递给CustomAdapter以更新视图。如果你可以播放你的 Activity 或片段 class 看看放在哪里合适。
您需要制作一个数据模型供您查看。比如制作一个包含所有显示信息的 class(这里是 desig[0]
的字符串)。这样您就可以更新 AsyncTask.onPostExecute()
.
或者如果您需要视图仅在 desig
获取时显示,请隐藏它或在从 azure 获取 desig
时添加一个加载等待对话框。