将视图作为Asynctask中的参数发送(Send view as a parameter in Asynctask)

编程入门 行业动态 更新时间:2024-10-24 07:27:04
视图作为Asynctask中的参数发送(Send view as a parameter in 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 ""; } }

任何想法来解决这个问题?

谢谢并为我的英语不好而感到抱歉

I'm working on a code in which I am inflating views, when the user clicks on one view I need to perform a parse a URL, and then check that the parse returns me. The problem is that I need to do in an asynctask parse to not get an exception, and the check I do before the end of the task.

The ideal would be to send the view as a parameter to the AsyncTask to send all my code to the Asynctask. But not is how to make this last

I put the code to make it easier to understand.

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 ""; } }

Any idea to resolve this problem?

Thanks and sorry for my bad english

最满意答案

您可以将其作为参数传递给构造函数并将其存储在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 ref文档以了解如何在类定义上使用泛型参数;-) http://developer.android.com/reference/android/os/AsyncTask.html

You can put it as a parameter to the contructor and store it on the AsyncTask object. Store it as a WeakReference and check it on the onPostExecute, much like the best practices displaying images from the official doc at 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 ... } } } }

BTW, see the AsyncTask ref docs to learn how to use the generic arguments on the class definition ;-) at http://developer.android.com/reference/android/os/AsyncTask.html

更多推荐

本文发布于:2023-07-04 11:08:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1023599.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:视图   参数   Asynctask   parameter   Send

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!