当我在安卓工作室中使用凌空抽射时,如何获得响应并迭代 Json?如果是多维数组



我不能使用 JsonObjectRequest 而不是 StringRequest,因为我需要通过 POST 方法发送它

在分析了很多解决方案后,我在这里发布了问题

我的 php api 输出看起来像

[
  {
    "username": "arun",
    "password": "kumar"
  },
  {
    "username": "arun",
    "password": "ak"
  },
  {
    "username": "arun",
    "password": "mypass"
  },
  {
    "username": "arun",
    "password": "TestPW"
  }
]

Android方面,我使用以下代码从Web获取数据,在该方法中 公共无效响应()我不知道如何获得上面的json响应,并且还迭代响应以打印响应中的所有数据

String url = "http://myipaddress/index.php";
StringRequest request = new StringRequest(Request.Method.POST, url, new response.Listener<String>() {
  @Override
  public void onResponse(String response) {
    try {
      JSONObject jsonobject = new JSONObject(response);
      String output = "";
      for (int i = 0; i < jsonobject.length(); i++) {
        // print all usernames and passwords
      }
    } catch (JSONException e) {
      e.printStackTrace();
    }
  }
}, new Response.ErrorListener() {
  @Override
  public void onErrorResponse(VolleyError error) {
  }
}) {
  @Override
  protected Map<String, String> getParams() throws AuthFailureError {
    Map<String, String> params = new HashMap<>();
    params.put("username", username);
    return params;
  }
};
RequestQueue requestQueue = Volley.newRequestQueue(this);
requestQueue.add(request);
您需要

遍历JSONArray并将每个元素作为JSONObject获取,然后从每个属性中获取名为 "username""password"String属性。

试试这个:

    String url = "http://myipaddress/index.php";
    StringRequest request = new StringRequest(Request.Method.POST, url, new response.Listener<String>() {
      @Override
      public void onResponse(String response) {
        try {
          JSONArray array = new JSONArray(response);
          for (int i = 0; i < array.length(); i++) {
            JSONObject object = array.getJSONObject(i);
            final String username = object.getString("username");
            final String password = object.getString("password");
            // print the output
            Log.d("TAG", "username=" + username + ", password=" + password);
          }
        } catch (JSONException e) {
          e.printStackTrace();
        }
      }
    }, new Response.ErrorListener() {
      @Override
      public void onErrorResponse(VolleyError error) {
      }
    }) {
      @Override
      protected Map<String, String> getParams() throws AuthFailureError {
        Map<String, String> params = new HashMap<>();
        params.put("username", username);
        return params;
      }
    };
    RequestQueue requestQueue = Volley.newRequestQueue(this);
    requestQueue.add(request);

理想情况下,您应该改用类模型,并直接反序列化到此类中。

public class UserLoginInfo {
  public String username;
  public String password;
}

这将使对象更易于使用,并为您提供类型安全和自动完成的好处。

这是一个简短的谷歌搜索链接,介绍如何使用谷歌的gson库来做到这一点。

国际海事组织使用改造。

祝您编码愉快! :)

最新更新