【问题标题】:pass arraylist from asynctask to the method calling it android将 arraylist 从 asynctask 传递给调用它的方法 android
【发布时间】:2013-11-28 13:49:43
【问题描述】:

我有一个场景,我在按钮的 onclicklistener 中调用 asynctask。在 asynctask 的 post execute 方法中,我在 arraylist 中添加值,我想返回到调用 asynctask 的方法

这是我的异步任务

 public class FetchtopTask extends AsyncTask<String, String, String>{

            @Override
            protected String doInBackground(String... params) {
                // TODO Auto-generated method stub

                 try {


                     String getitemcode=params[0];
                        // Building Parameters
                        ArrayList<NameValuePair> params1 = new ArrayList<NameValuePair>();
                       params1.add(new BasicNameValuePair("ItemCode",getitemcode));
                        Log.d("request!", "starting");
                        response = CustomHttpClient.executeHttpPost("http://10.0.2.2/top.php",params1);


                        String retstring=response.toString();
                        Log.d(retstring,"stringggggg");
                        return retstring;
                    }
                 catch(Exception io){
                 msg = "No Network Connection";
                 }
                 return null;
           }


             @Override
                protected void onPostExecute(String sJson) {
                          try {
                                    JSONArray aJson = new JSONArray(sJson);


                                    for(int i=0;i<aJson.length();i++)
                                    {
                                         JSONObject jsonO = aJson.getJSONObject(i);
                                         top1.add(jsonO.getString("MName"));
                                         top2.add(jsonO.getString("Amount"));
                                         top3.add(jsonO.getString("TaxStruct"));

                               }

                          }catch(JSONException e){
                               msg = "Invalid response";
                           }
                        }

     }

我想将 top1,top2,top3 数组列表传递给调用方法 请帮助我实现这一目标。

【问题讨论】:

  • 你想把它退回到哪里??全局声明你的arraylist 有什么问题你能解释清楚吗?
  • 我想将arraylist返回给调用异步任务的方法,它是按钮onclicklistener。

标签: android arraylist android-asynctask


【解决方案1】:

您可以使用 ArrayList 的 ArrayList:

ArrayList<ArrayList<String>> tops= new ArrayList<ArrayList<String>>();

tops.add(top1);
tops.add(top2);
tops.add(top3);

return tops;

【讨论】:

  • 我应该如何从 postexecute 方法返回数组列表??
  • return 表示不是实际返回,因为 onPostExecute 不会返回任何您可以使用的处理程序或最简单的方法,您可以使用此参数调用另一个函数。对 AsyncTask 进行更多研究。
【解决方案2】:

嘿,只需在 btn Click 中调用 AsyncTask 并在后执行方法中 调用另一个方法,该方法将使用在 post Execute 中创建的 Array。

@Override
            protected void onPostExecute(String sJson) {
                      try {
                                JSONArray aJson = new JSONArray(sJson);
                                for(int i=0;i<aJson.length();i++)
                                {
                                     JSONObject jsonO = aJson.getJSONObject(i);
                                     top1.add(jsonO.getString("MName"));
                                     top2.add(jsonO.getString("Amount"));
                                     top3.add(jsonO.getString("TaxStruct"));

                                     anotherMethod(top);
                           }
                      }catch(JSONException e){
                           msg = "Invalid response";
                       }
                    }

【讨论】:

  • 我想在调用异步任务的 buttonclicklistener 中使用这个数组列表
  • 你不能这样做,因为在 btn click listner ArrayList 将 null 因为 asynctask 就像线程一样。所以你想使用 arraylist 那么你应该在 post execute 中使用第二种方法来对数组列表数据执行操作。
  • 后执行中的第二种方法是什么意思?
猜你喜欢
  • 2014-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-20
  • 2013-07-15
  • 2017-02-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多