我不能使用 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
库来做到这一点。
国际海事组织使用改造。
祝您编码愉快! :)