在Asynctask中将视图作为参数发送

jlo*_*pez 3 android view parameter-passing android-asynctask

我正在编写一个代码,我在其中膨胀视图,当用户单击一个视图时,我需要执行解析URL,然后检查解析是否返回给我.问题是我需要在asynctask解析中做到不能获得异常,并且在任务结束之前进行检查.

理想的做法是将视图作为参数发送到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 "";
    }
}
Run Code Online (Sandbox Code Playgroud)

有什么想法解决这个问题吗?

谢谢,抱歉我的英语不好

rgr*_*cha 7

您可以将它作为参数添加到构造函数并将其存储在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
               ...
           }
       }
    }
}
Run Code Online (Sandbox Code Playgroud)

顺便说一句,请参阅AsyncTask参考文档以了解如何在类定义中使用泛型参数;-)在http://developer.android.com/reference/android/os/AsyncTask.html