【问题标题】:Get values on post execute在执行后获取值
【发布时间】:2017-05-18 17:12:14
【问题描述】:

我正在做一个从 json 文件读取的 Asynctask 函数。我希望在 postExecute 上将其传递给我拥有的另一个 Activity,例如字符串联系人的“nombre, categoria, hora, lugar ...”。如何在 postExecute 上获取联系人的值?有人可以帮助我吗?这是我的代码

private class GetProgramaSC extends AsyncTask<Void, Void, Void> {


        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            // Showing progress dialog
            pDialog = new ProgressDialog(getActivity());
            if(idioma.equalsIgnoreCase("es")){  
                pDialog.setMessage("Por favor espere...");
            }
            else{
                pDialog.setMessage("Itxaron mesedez...");
            }
            pDialog.setCancelable(false);
            pDialog.show();

        }

        @Override
        protected Void doInBackground(Void... arg0) {

                try {

                    JSONObject jsonObj = new JSONObject(loadJSONFromAsset());

                    // Getting JSON Array node
                   eventos = jsonObj.getJSONArray("results");

                    // looping through All Contacts
                    for (int i = 0; i < eventos.length(); i++) {
                        JSONObject c = eventos.getJSONObject(i);

                        String categoria = c.getString(TAG_CATEGORIA);
                        String nombre = c.getString(TAG_NOMBRE);
                        String hora = c.getString(TAG_HORA);
                        String lugar = c.getString(TAG_LUGAR);
                        String fecha = c.getString(TAG_FECHA);
                        String coordenadas = c.getString(TAG_COORDENADAS);
                        String info = c.getString(TAG_INFO);
                        String imagen= c.getString(TAG_IMAGEN);

                        // tmp hashmap for single contact
                        HashMap<String, String> contact = new HashMap<String, String>();

                        // adding each child node to HashMap key => value
                        contact.put("categoria", categoria);
                        contact.put("nombre", nombre);
                        contact.put("hora", hora);
                        contact.put("nombre_lugar", lugar);
                        contact.put("fecha", fecha);
                        contact.put("coordenadas", coordenadas);
                        contact.put("info", info);
                        contact.put("imagen", imagen);


                        // adding contact to contact list
                        eventosList.add(contact);
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }


            return null;


        }

        @Override
        protected void onPostExecute(Void result) {
            super.onPostExecute(result);
            // Dismiss the progress dialog
            if (pDialog.isShowing())
                pDialog.dismiss();




        }

    }

非常感谢

【问题讨论】:

标签: android android-asynctask


【解决方案1】:

将您的 AsyncTask 签名更改为:

private class GetProgramaSC extends AsyncTask&lt;Void, Void, List&lt;String&gt;&gt;

然后doInBackground 将不得不返回列表。因此,在doInBackground 末尾返回您的eventos,您将收到onPostExecute

private class GetProgramaSC extends AsyncTask<Void, Void, List<String>> {

...

    @Override
    protected List<String> doInBackground(Void... arg0) {

          ...

        return eventos;


    }

    @Override
    protected void onPostExecute(List<String> result) {
        super.onPostExecute(result);
        // Dismiss the progress dialog
        if (pDialog.isShowing())
            pDialog.dismiss();

    }

}

【讨论】:

  • 以后如何将“nombre”传递给另一个活动?谢谢
  • 放入你的意图并以此意图调用活动
  • 喜欢这个? Intent in = new Intent(getActivity(), AnotherActivity.class); in.putExtra("名词", 名词);
  • 是的,就是这样
【解决方案2】:

这很简单 将数据传递给后执行 随心所欲地处理数据

  private class GetProgramaSC extends AsyncTask<String, String, String> {


            @Override
            protected void onPreExecute() {
                super.onPreExecute();
                // Showing progress dialog
                pDialog = new ProgressDialog(getActivity());
                if(idioma.equalsIgnoreCase("es")){  
                    pDialog.setMessage("Por favor espere...");
                }
                else{
                    pDialog.setMessage("Itxaron mesedez...");
                }
                pDialog.setCancelable(false);
                pDialog.show();

            }

            @Override
            protected Void doInBackground(String... arg0) {



                return loadJSONFromAsset();


            }

            @Override
            protected void onPostExecute(String result) {
                super.onPostExecute(result);
                // Dismiss the progress dialog

      try {

                        JSONObject jsonObj = new JSONObject(result);

                        // Getting JSON Array node
                       eventos = jsonObj.getJSONArray("results");

                        // looping through All Contacts
                        for (int i = 0; i < eventos.length(); i++) {
                            JSONObject c = eventos.getJSONObject(i);

                            String categoria = c.getString(TAG_CATEGORIA);
                            String nombre = c.getString(TAG_NOMBRE);
                            String hora = c.getString(TAG_HORA);
                            String lugar = c.getString(TAG_LUGAR);
                            String fecha = c.getString(TAG_FECHA);
                            String coordenadas = c.getString(TAG_COORDENADAS);
                            String info = c.getString(TAG_INFO);
                            String imagen= c.getString(TAG_IMAGEN);

                            // tmp hashmap for single contact
                            HashMap<String, String> contact = new HashMap<String, String>();

                            // adding each child node to HashMap key => value
                            contact.put("categoria", categoria);
                            contact.put("nombre", nombre);
                            contact.put("hora", hora);
                            contact.put("nombre_lugar", lugar);
                            contact.put("fecha", fecha);
                            contact.put("coordenadas", coordenadas);
                            contact.put("info", info);
                            contact.put("imagen", imagen);


                            // adding contact to contact list
                            eventosList.add(contact);
                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }

 if (pDialog.isShowing())
                    pDialog.dismiss();




            }

        }

稍后将 hashmap 添加到 bundle 以传递活动

尝试如下: 后期执行

Bundle extras = new Bundle();
extras.putSerializable("HashMap",hashMap);
intent.putExtras(extras);

在另一个活动中

Bundle bundle = this.getIntent().getExtras();

if(bundle != null) {
   hashMap = bundle.getSerializable("HashMap");
}

【讨论】:

  • 以后如何将“nombre”传递给另一个活动?谢谢
【解决方案3】:

在 Intent 的帮助下无法将大量 String 数据传递给另一个 Activity,因此在解析 JSON 后,您可以将这些数据存储在 Application 类中,该类可以在项目内的任何位置调用。

【讨论】:

    【解决方案4】:

    使用 Object(任何你想要的结果)扩展你的类以获取结果

    public class GetProgramaSC extends AsyncTask<Void, Void, Object> {}
    

    使用 get() 方法调用 asyncTask,但请记住它会在主线程上运行。

    Object result = new GetProgramaSC().get();
    

    希望对你有帮助!

    【讨论】:

      【解决方案5】:
          @Override
              protected void onPostExecute(Void result) {
                  super.onPostExecute(result);
                  // Dismiss the progress dialog
                  if (pDialog.isShowing())
                      pDialog.dismiss();
                  Intent i = new Intent(getActivity, NewActivity.class);
                  i.putExtra("arraylist", eventolist);
                  startActivity(i);
      }
      

      然后是新活动:

      ArrayList<HashMap<String, String>> arraylist = (ArrayList<HashMap<String,String>>) getIntent().getSerializableExtra("arraylist");
      

      现在只需从新活动的arraylist 中提取hashmap 及其值! eg:- arraylist.get(0).get("nombre");

      【讨论】:

        猜你喜欢
        • 2012-02-20
        • 1970-01-01
        • 2015-05-23
        • 2022-01-20
        • 2014-08-05
        • 2020-02-12
        • 2019-02-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多