android - 在 Asynctask 中将 View 作为参数发送

标签 android view android-asynctask parameter-passing

我正在编写一个代码,在其中我膨胀 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/

相关文章:

Android Studio 无法下载组件

ios - 从 Xib 加载 View 在自动布局后调整框架 subview 的大小

java - Android 应用程序中用于多个 REST 端点的 AsyncTask

java - 如何延迟进程直到 AsyncTask 完成?

android - OnBackPressed 同一 Activity 的多个实例

android - 为什么Android无法识别颜色状态列表文件?

mysql - 在 MySQL 中创建一个 View ,其中包含从表中的行数据创建的列?

javascript - 导航猫 : Make a view and some field can be updated each time inputted

java - 循环 AsyncTask 以获取 JSON 并将其作为对象存储在同一列表中

android - 是否可以使用标志保持屏幕开启和调暗?