我正在编写一个代码,在其中我膨胀 View ,当用户单击一个 View 时,我需要执行解析 URL,然后检查解析是否返回我。问题是我需要在 asynctask 解析中做才能不出现异常,以及我在任务结束前做的检查。
理想的情况是将 View 作为参数发送到 AsyncTask,以将我的所有代码发送到 AsyncTask。但不是如何让这成为最后
我把代码贴出来让大家更容易理解。
vMens.setOnClickListener(new View.OnClickListener() {
public void onClick(View vMens) {
int readOK=0;
try{
new taskMensaje(vMens).execute();
if(mess_gest.equals("1")){
readOK=1;
}else{
readOK=0;
}
}catch(Exception e){
Utils.showDialog(Calendario.this, "Error", "No se puede gestionar el mensaje");
}
if (readOK==0){
Mess.state = message.get(vMens.getId()).p1;
Mess.tittle = message.get(vMens.getId()).p2;
else{
//message no gest
}
}
});
private class taskMensaje extends AsyncTask<String, Void, View> {
@Override
protected String doInBackground(String... params) {
MensajeriaGestionablePARSER parserMensGest = new MensajeriaGestionablePARSER(urlMensGest);
gestionables = parserMensGest.parse();
mess_gest = gestionables.get(0).p0;
return "";
}
}
任何想法来解决这个问题?
感谢并抱歉我的英语不好
最佳答案
您可以将其作为参数传递给构造函数并将其存储在 AsyncTask 对象上。
将它存储为 WeakReference 并在 onPostExecute 上检查它,就像在 http://developer.android.com/training/displaying-bitmaps/process-bitmap.html 上显示来自官方文档的图像的最佳实践一样。
private class TaskMensaje extends AsyncTask<String, Void, Void> {
private WeakReference vRef;
... / your other stuff here
public TaskMensaje (View v) {
vRef = new WeakReference(v);
}
@Override
protected String doInBackground(String... params) {
MensajeriaGestionablePARSER parserMensGest = new MensajeriaGestionablePARSER(urlMensGest);
gestionables = parserMensGest.parse();
mess_gest = gestionables.get(0).p0;
return null;
}
@Override
protected onPostExecute(Void result) {
if (vRef != null && bitmap != null) {
final ImageView imageView = vRef.get();
if (imageView != null) {
// Do whatever you want with your ImageView
...
}
}
}
}
顺便说一句,请参阅 AsyncTask 引用文档以了解如何在类定义中使用泛型参数 ;-)
在 http://developer.android.com/reference/android/os/AsyncTask.html
关于android - 在 Asynctask 中将 View 作为参数发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13159650/