为什么 json 数组只检索第一条记录
why json array retrieve just first record
那个问题是关于从 mysql 解析 json。我想在我的 android 应用程序中创建一个登录页面。
这是我的问题: 当应用程序处于调试状态时(实际上是 运行!)response(String json) 的值包含所有元素然后它将它们推荐给我的 ParseJSONuser。在这个 activity 中,jsonObject 的值也包含 json 中的所有元素,但是在我的 jsonArray 中,我看到 json 的第一条记录和, 当然 jsonArray.length() = 1, 为什么 jsonArray 只检索第一个元素(或 json 的一个记录).
这是 ParseJSON class:
public class ParseJSONUser {
private static String name_get, pass_get, email_get, imageid_get, credit_get, state_get;
public static final String JSON_ARRAY = "user";
public static final String KEY_NAME = "name";
public static final String KEY_EMAIL = "email";
public static final String KEY_PASS = "pass";
public static final String KEY_IMAGEID = "imageid";
public static final String KEY_CREDIT = "credit";
public static final String KEY_STATE = "state";
public ArrayList<ArrayList<String>> repository;
private JSONArray jsonArray = null;
private String json;
public ParseJSONUser(String json){
this.json = json;
}
protected void parseJSONuser(){
repository = new ArrayList<ArrayList<String>>();
JSONObject jsonObject = null;
try {
jsonObject = new JSONObject(json);
jsonArray = jsonObject.getJSONArray(JSON_ARRAY);
for(int i = 0; i<jsonArray.length() ; i++){
JSONObject jo = jsonArray.getJSONObject(0);
name_get = jo.getString(KEY_NAME);
email_get = jo.getString(KEY_EMAIL);
pass_get = jo.getString(KEY_PASS);
imageid_get = jo.getString(KEY_IMAGEID);
credit_get = jo.getString(KEY_CREDIT);
state_get = jo.getString(KEY_STATE);
ArrayList<String> al = new ArrayList<>();
al.add(0,name_get);
al.add(1,email_get);
al.add(2, pass_get);
al.add(3, imageid_get);
al.add(4, credit_get);
al.add(5, state_get);
repository.add(al);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
并且,我在 activity 中使用此方法从主机获取数据(很清楚!)
private void sendRequest() {
StringRequest stringRequest = new StringRequest(URL_GET,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
checkJSONuser(response);
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(GateActivity.this, error.getMessage(), Toast.LENGTH_LONG).show();
}
});
RequestQueue requestQueue = Volley.newRequestQueue(this);
requestQueue.add(stringRequest);
}
而且,我的主机中有 php 文件,用于获取所有 table(效果很好)
这是我的 php 代码:https://gist.github.com/sadeghmohebbi/ef6e1e7b5a529596396a7d58f462ef7e
对不起我的英语。请帮忙...谢谢
那是因为您总是在循环中获得第一个位置。
您应该使用 i
参数:
...
for(int i = 0; i<jsonArray.length() ; i++){
JSONObject jo = jsonArray.getJSONObject(i);
...
那个问题是关于从 mysql 解析 json。我想在我的 android 应用程序中创建一个登录页面。 这是我的问题: 当应用程序处于调试状态时(实际上是 运行!)response(String json) 的值包含所有元素然后它将它们推荐给我的 ParseJSONuser。在这个 activity 中,jsonObject 的值也包含 json 中的所有元素,但是在我的 jsonArray 中,我看到 json 的第一条记录和, 当然 jsonArray.length() = 1, 为什么 jsonArray 只检索第一个元素(或 json 的一个记录).
这是 ParseJSON class:
public class ParseJSONUser {
private static String name_get, pass_get, email_get, imageid_get, credit_get, state_get;
public static final String JSON_ARRAY = "user";
public static final String KEY_NAME = "name";
public static final String KEY_EMAIL = "email";
public static final String KEY_PASS = "pass";
public static final String KEY_IMAGEID = "imageid";
public static final String KEY_CREDIT = "credit";
public static final String KEY_STATE = "state";
public ArrayList<ArrayList<String>> repository;
private JSONArray jsonArray = null;
private String json;
public ParseJSONUser(String json){
this.json = json;
}
protected void parseJSONuser(){
repository = new ArrayList<ArrayList<String>>();
JSONObject jsonObject = null;
try {
jsonObject = new JSONObject(json);
jsonArray = jsonObject.getJSONArray(JSON_ARRAY);
for(int i = 0; i<jsonArray.length() ; i++){
JSONObject jo = jsonArray.getJSONObject(0);
name_get = jo.getString(KEY_NAME);
email_get = jo.getString(KEY_EMAIL);
pass_get = jo.getString(KEY_PASS);
imageid_get = jo.getString(KEY_IMAGEID);
credit_get = jo.getString(KEY_CREDIT);
state_get = jo.getString(KEY_STATE);
ArrayList<String> al = new ArrayList<>();
al.add(0,name_get);
al.add(1,email_get);
al.add(2, pass_get);
al.add(3, imageid_get);
al.add(4, credit_get);
al.add(5, state_get);
repository.add(al);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
并且,我在 activity 中使用此方法从主机获取数据(很清楚!)
private void sendRequest() {
StringRequest stringRequest = new StringRequest(URL_GET,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
checkJSONuser(response);
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(GateActivity.this, error.getMessage(), Toast.LENGTH_LONG).show();
}
});
RequestQueue requestQueue = Volley.newRequestQueue(this);
requestQueue.add(stringRequest);
}
而且,我的主机中有 php 文件,用于获取所有 table(效果很好) 这是我的 php 代码:https://gist.github.com/sadeghmohebbi/ef6e1e7b5a529596396a7d58f462ef7e
对不起我的英语。请帮忙...谢谢
那是因为您总是在循环中获得第一个位置。
您应该使用 i
参数:
...
for(int i = 0; i<jsonArray.length() ; i++){
JSONObject jo = jsonArray.getJSONObject(i);
...