我有这些代码行,我想在getview()
的{{1}}方法中使用。
CustomAdapter
这是我的AsyncTask代码,我用来填充自定义listview。这段代码一直在运行,我不知道多少次。但是最后它在TextView( 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();
)上进行了如此多的更新后给了我正确的结果。这不仅会降低我的应用程序的性能,还会在到达结果之前在TextView上显示多个更新。
我在designation
变量中获取数据,查看我的代码。
数据来自azure但是如果你不是一个天蓝色的人,不要担心。请帮我解决Java问题。
问题
我的问题是如何在desig[0]
方法中使用Async task
。我必须做功能,我可以称之为后者。数据来自azure但不要担心,如果你不是一个天蓝色的家伙。只是帮助我解决Java问题。 plzz帮助
答案 0 :(得分:2)
getView
。所以不要忘记同时会有多个doInBackground
在运行。什么是designation
? ListView元素内部的视图?
修改强>
由于指定是每个单元格中的文本,因此您必须确保要升级的单元格是好的单元格。
我通常做的是使用我附加到循环视图的ViewHolder。然后我将ViewHolder
注册为听众(收听AsyncTask
)。
ViewHolder
启动请求并为AsyncTask
提供ID。然后,在AsyncTask
正在运行时,我会定期询问ViewHolder
是否提供给AsyncTask
的ID是好的。如果不是,我取消AsyncTask
(不需要同步)。
然后,当AsyncTask
完成时,我检查ID最后一次与ViewHolder
给出的ID匹配,并通知监听器(ViewHolder
)结果可用。
通过这种方式,您可以确保AsyncTask
无法正常工作。
但当然这取决于您在AsyncTask中实际执行的任务......
答案 1 :(得分:1)
调用Frag的side Activity或onActivityCreated中的AsyncTask子类,并将结果传递给CustomAdapter以更新视图。如果您可以播放您的活动或片段类,以查看适当的位置。
答案 2 :(得分:1)
您需要为您查看数据模型。比如创建一个包含所有显示信息的类(这里是if let deletedObjects = noti.userInfo?[NSDeletedObjectsKey] as? NSArray {
// use `deletedObjects` here
}
的字符串)。因此,您可以更新desig[0]
中的视图。
或者如果您需要仅在AsyncTask.onPostExecute()
获得时显示视图,请在从azure获取desig
时隐藏它或添加加载等待对话框。