我正在处理一个代码,在这个代码中,我正在充实视图,当用户单击一个视图时,我需要执行一个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
更多推荐
发布评论