如何在Java中使用带有多个相似参数的JSON请求/响应使用循环?

时间:2018-09-04 01:02:45

标签: java android json

是否有一种方法可以放置请求,并在值非常相似时循环使用响应?我想到了for循环,但找不到实现此目的的方法。

我正在从Android设备发送请求,并且TextView正在等待响应。收到响应后,我正在检查它是否为空或为null,如果不是,则设置TextView的文本并更改可见性(因为默认设置已消失)。

例如,这将是我的JSON

                {
                    spaghetti: [
                        {
                            strIngredient1: "1 pound ground beef",
                            strIngredient2: "1 onion, chopped",
                            strIngredient3: "null",
                            strIngredient4: "1 (28 ounce) can diced tomatoes",
                            strIngredient5: ""
                        }
                    ]
                }

我的状况:

                if(!"".equals(dinner.getStrIngredient1()) && !"null".equals(dish.getStrIngredient1())) {
                    firstIngredient.setText(dinner.getStrIngredient1());
                    firstIngredient.setVisibility(View.VISIBLE);
                }
                if(!"".equals(dinner.getStrIngredient2()) && !"null".equals(dish.getStrIngredient2())) {
                    secondIngredient.setText(dinner.getStrIngredient2());
                    secondngredient.setVisibility(View.VISIBLE);
                }
                ...

正如您在上面看到的,我有相似的值,我真的需要重复五次吗?有办法使它“干净”吗?

3 个答案:

答案 0 :(得分:0)

尝试这个。

try {
      JSONArray spaghetti = new JSONArray (your_response.getString("spaghetti"));
      for (int i = 1; i < spaghetti.length(); i++) {
        JSONObject json = new JSONObject(spaghetti.get(i).toString());
        switch(i) {
          case 1:
            if (json.getString("strIngredient" + i).length() > 0 && !"null".equals(json.getString("strIngredient" + i))) {
              firstIngredient.setText(json.getString("strIngredient" + i));
              firstIngredient.setVisibility(View.VISIBLE);
            }
            break;
          case 2:
            // So on and so fort.
            break;
        }
      }
    } catch (Exception e) {
      e.printStackTrace();
    }

答案 1 :(得分:0)

我认为是的,或者您可以使用切换用的大小写,但是文字也是如此。

答案 2 :(得分:0)

使用Java Reflection。 但是为此,您需要分别将firstIngredient,secondIngredient命名分别调整为原料1,原料2。

在您的成分数组列表上获取for循环 然后使用java反射动态地形成方法

Method method = obj.getClass().getMethod(methodName);//in methodname you can write method you like to invoke like ingredient+i
method.invoke(obj, arg1, arg2);