【问题标题】:Filter Json Array data过滤 Json 数组数据
【发布时间】:2018-10-19 12:38:43
【问题描述】:

我有一个要在列表视图中解析的 json 数据。如何在我的列表视图中使用“PROMOS”和没有“PROMOS”来解析我的所有 json 数据...?我尝试过这种方式,但它只为我带来了 json 结果中的前 5 个数据,它不会加载项目“促销”部分 这是我的java类....

protected String doInBackground(String... strings) {
        prod = new ArrayList<>();
        lista_eligida = (ListView) findViewById(R.id.lista);

        String url = "http://danbijann.freeiz.com/tareas.json";
        HttpHandler sh = new HttpHandler();
        JSONObject jsonStr = sh.makeServiceCall(url);

        try {
            JSONObject jsonObj = new JSONObject(String.valueOf(jsonStr));
            Log.e("JSON", String.valueOf(jsonStr));
            JSONArray contacts = jsonObj.getJSONArray("PEDIDOS");
            for (int i = 0; i < contacts.length(); i++) {
                JSONObject c = contacts.getJSONObject(i);
                String prueba = "";
                if(jsonObj.has("prueba") && !jsonObj.isNull("prueba")){
                    prueba = c.getString("prueba");
                }

                String promocion = "";
                if(jsonObj.has("promocion") && !jsonObj.isNull("promocion")) {
                    promocion = c.getString("promocion");
                }

                String prueba2 = "";
                if(jsonObj.has("prueba2") && !jsonObj.isNull("prueba2")) {
                    prueba2 = c.getString("prueba2");
                }
                String codig = c.getString("codigo");
                String des = c.getString("descrip");
                String prec = c.getString("precio");
                String cantidad = c.getString("cantidad");
                String ubica = c.getString("ubica");




                HashMap<String, String> contacto = new HashMap<>();
                contacto.put("codigo", codig);
                contacto.put("descrip", des);
                contacto.put("precio", prec);
                contacto.put("cantidad", cantidad);
                contacto.put("ubica", ubica);
                contacto.put("preuba", prueba);
                contacto.put("promocion", promocion);
                contacto.put("prueba2", prueba2);

                Log.d("ADAP", codig);
                Log.d("ADAP", des);
                Log.d("ADAP", prec);
                Log.d("ADAP", cantidad);
                Log.d("ADAP", ubica);

                prod.add(contacto);
            }
        } catch (final JSONException e) {
            e.getMessage();
        }
        return null;
    }
    protected void onPostExecute(String result) {
        if (pDialog.isShowing())
            pDialog.dismiss();
        super.onPostExecute(result);
        final ListAdapter adapter = new SimpleAdapter(MainActivity.this, prod,
                R.layout.item_carrito, new String[]{ "codigo", "descrip", "precio", "cantidad","ubica","prueba","promocion","prueba2"},
                new int[]{R.id.txtcodigo, R.id.txtdescrip, R.id.txtprecio, R.id.cantidad, R.id.txtubica, R.id.txtprueba, R.id.txtpromo, R.id.txtprueba2});
        lista_eligida.setAdapter(adapter);

这是我的 JSON 文件

    {  
   "PEDIDOS":[  
      {  
         "codigo":"AB235695-1",
         "descrip":"MONITOR SAMDUNG DE 32 PULGADAS",
         "precio":"526559",
         "cantidad":"4",
         "ubica":"A:002 S:005 F:001"
      },
      {  
         "codigo":"B005695-5",
         "descrip":"CPU INTEL PRUEBA DE ESPACIO",
         "precio":"526559",
         "cantidad":"2",
         "PROMOS":[  
            {  
               "ubica":"A:002 S:005 F:001",
               "promocion":"50 off",
               "prueba":"datos mas por prueva",
               "prueba2":"otro mas "
            }
         ]
      },
      {  
         "codigo":"AB235-6",
         "descrip":"MONITOR SAMDUNG DE 32 PULGADAS",
         "precio":"526559",
         "cantidad":"2",
         "ubica":"A:002 S:005 F:001"
      },
      {  
         "codigo":"A56895-11",
         "descrip":"MONITOR SAMDUNG DE 32 PULGADAS",
         "precio":"526559",
         "cantidad":"14",
         "ubica":"A:002 S:005 F:001"
      },
      {  
         "codigo":"B04565-50",
         "descrip":"CPU INTEL PRUEBA DE ESPACIO",
         "precio":"526559",
         "cantidad":"20",
         "PROMOS":[  
            {  
               "ubica":"A:002 S:005 F:001",
               "promocion":"50 off",
               "prueba":"datos mas por prueva",
               "prueba2":"otro mas "
            }
         ]
      }
   ]
}

【问题讨论】:

标签: android json android-studio


【解决方案1】:

要从 PROMOS 获取数据,您必须浏览数组

protected String doInBackground(String... strings) {
    prod = new ArrayList<>();
    lista_eligida = (ListView) findViewById(R.id.lista);

    String url = "http://danbijann.freeiz.com/tareas.json";
    HttpHandler sh = new HttpHandler();
    JSONObject jsonStr = sh.makeServiceCall(url);

    try {
        JSONObject jsonObj = new JSONObject(String.valueOf(jsonStr));
        Log.e("JSON", String.valueOf(jsonStr));
        JSONArray contacts = jsonObj.getJSONArray("PEDIDOS");
        for (int i = 0; i < contacts.length(); i++) 
        {
            JSONObject c = contacts.getJSONObject(i);

            String codig = c.getString("codigo");
            String des = c.getString("descrip");
            String prec = c.getString("precio");
            String cantidad = c.getString("cantidad");

            String prueba = "";
            String prueba2 = "";
            String ubica = "";
            String promocion = "";

            if(jsonObj.has("PROMOS") && !jsonObj.isNull("PROMOS")) 
            {

                JSONArray promos = jsonObj.getJSONArray("PROMOS");
                for(int j=0;j<promos.length();j++)
                {


                        if(promos.get(j).has("ubica") && !promos.get(j).isNull("ubica")) {
                            ubica = c.getString("ubica");
                        }

                        if(promos.get(j).has("promocion") && !promos.get(j).isNull("promocion")) {
                            promocion = c.getString("promocion");
                        }

                        if(promos.get(j).has("prueba") && !promos.get(j).isNull("prueba")){
                            prueba = c.getString("prueba");
                        }

                        if(promos.get(j).has("prueba2") && !promos.get(j).isNull("prueba2")) {
                            prueba2 = c.getString("prueba2");
                        }

                }
            }



            HashMap<String, String> contacto = new HashMap<>();
            contacto.put("codigo", codig);
            contacto.put("descrip", des);
            contacto.put("precio", prec);
            contacto.put("cantidad", cantidad);
            contacto.put("ubica", ubica);
            contacto.put("preuba", prueba);
            contacto.put("promocion", promocion);
            contacto.put("prueba2", prueba2);

            Log.d("ADAP", codig);
            Log.d("ADAP", des);
            Log.d("ADAP", prec);
            Log.d("ADAP", cantidad);
            Log.d("ADAP", ubica);

            prod.add(contacto);
        }
    } catch (final JSONException e) {
        e.getMessage();
    }
    return null;
}

仅供参考:如果您的 PROMOS 数组包含超过 1 个对象,则只会添加最后一个对象,在这种情况下,您必须创建一个促销数组列表,然后在 HMAP 中添加数组列表

【讨论】:

  • 我得到一个错误错误:找不到符号方法有(字符串)
  • 是的,有方法只在 JSONObject 类中,promos.get(j) 是一个 jsonArray,所以只要检查是否不为空
猜你喜欢
  • 2021-10-30
  • 1970-01-01
  • 2021-05-29
  • 1970-01-01
  • 1970-01-01
  • 2013-01-19
  • 2016-05-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多