如何在 Volley 中解析多维 json 数组?
How to parse multidimensional json array in Volley?
我将 PHP 中的 json_encoded 数组返回给我的 Android 客户端。我首先从服务器收集数据并将其输入到一个名为 "data":
的数组中
$data[] = array('name'=>$name, 'distance'=>(int)$distance, 'city'=>$city, 'state'=>$state, 'interest'=>$interest, 'avatar'=>$avatar);
然后,我将该数组放入另一个数组中以获得一个计数变量,这只是我的 for 循环中的一个增量。看起来像这样:
$response = array('data'=>$data, 'count'=>$count);
在 Android 方面,我通过以下方式检索:
StringRequest searchPostRequest = new StringRequest(Request.Method.POST, searchURL, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
mPlayerSuccess.start();
Log.d(TAG, "Complete Response: "+response);
JSONObject object = new JSONObject(response);
/*
*GET THE COMPLETE JSON ARRAY FROM SERVER
* ARRAY NAME IS "data"
* Strings are name, distance, city, state, interest, avatar
*/
JSONArray array = object.getJSONArray("data");
for(int i = 0; i < array.length(); i++) {
JSONObject jsonObject = array.getJSONObject(i);
String name = jsonObject.getString("name");
int distance = jsonObject.getInt("distance");
String city = jsonObject.getString("city");
String state = jsonObject.getString("state");
String interest = jsonObject.getString("interest");
String avatar = jsonObject.getString("avatar");
String formatted_avatar = avatar.replace("\", "");
int count = jsonObject.getInt("count");
Log.d(TAG, "Name Returned: "+name);
Log.d(TAG, "Distance Returned: "+distance);
Log.d(TAG, "City Returned: "+city);
Log.d(TAG, "State Returned: "+state);
Log.d(TAG, "Interest Returned: "+interest);
Log.d(TAG, "Avatar Returned: "+formatted_avatar);
Log.d(TAG, "Count: "+count);
这个returns(在我的日志中):
D/MainActivity: Complete Response: {"data":[{"name":"lgill10","distance":296,"city":"Clinton","state":"IL","interest":"3D printing","avatar":"..\/users\/lgill10\/uploads\/dj-franklin.jpg"},{"name":"lgill9","distance":316,"city":"Bloomington","state":"IL","interest":"3D printing","avatar":"css\/images\/user_default\/default_avatar.png"},{"name":"testuser2","distance":14,"city":"Jonesboro","state":"AR","interest":"3D printing","avatar":"css\/images\/user_default\/default_avatar.png"}],"count":3}
但是,我收到 "No Value for count,",这导致所有 'Log.d' 消息都没有显示。
我还尝试使用以下方法提取计数:
JSONArray count_array = object.getJSONArray("count");
JSONObject countObject = count_array.getJSONObject(0);
int count = countObject.getInt("count");
但随后它捕获了异常并告诉我:
Value 3 at count of type java.lang.Integer cannot be converted to JSONArray
它返回正确的计数 (3),但我不知道如何从多维数组中正确提取它。
如何获取计数值?我觉得这是一个小语法问题,我只是不知道如何纠正它。
我希望我在问之前能想到这一点,但我突然明白了。由于 count 变量实际上是数组长度,我访问它时使用:
int count = array.length();
Log.d(TAG, "Count: "+count);
哪个returns:
Count: 3
我将 PHP 中的 json_encoded 数组返回给我的 Android 客户端。我首先从服务器收集数据并将其输入到一个名为 "data":
的数组中$data[] = array('name'=>$name, 'distance'=>(int)$distance, 'city'=>$city, 'state'=>$state, 'interest'=>$interest, 'avatar'=>$avatar);
然后,我将该数组放入另一个数组中以获得一个计数变量,这只是我的 for 循环中的一个增量。看起来像这样:
$response = array('data'=>$data, 'count'=>$count);
在 Android 方面,我通过以下方式检索:
StringRequest searchPostRequest = new StringRequest(Request.Method.POST, searchURL, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
mPlayerSuccess.start();
Log.d(TAG, "Complete Response: "+response);
JSONObject object = new JSONObject(response);
/*
*GET THE COMPLETE JSON ARRAY FROM SERVER
* ARRAY NAME IS "data"
* Strings are name, distance, city, state, interest, avatar
*/
JSONArray array = object.getJSONArray("data");
for(int i = 0; i < array.length(); i++) {
JSONObject jsonObject = array.getJSONObject(i);
String name = jsonObject.getString("name");
int distance = jsonObject.getInt("distance");
String city = jsonObject.getString("city");
String state = jsonObject.getString("state");
String interest = jsonObject.getString("interest");
String avatar = jsonObject.getString("avatar");
String formatted_avatar = avatar.replace("\", "");
int count = jsonObject.getInt("count");
Log.d(TAG, "Name Returned: "+name);
Log.d(TAG, "Distance Returned: "+distance);
Log.d(TAG, "City Returned: "+city);
Log.d(TAG, "State Returned: "+state);
Log.d(TAG, "Interest Returned: "+interest);
Log.d(TAG, "Avatar Returned: "+formatted_avatar);
Log.d(TAG, "Count: "+count);
这个returns(在我的日志中):
D/MainActivity: Complete Response: {"data":[{"name":"lgill10","distance":296,"city":"Clinton","state":"IL","interest":"3D printing","avatar":"..\/users\/lgill10\/uploads\/dj-franklin.jpg"},{"name":"lgill9","distance":316,"city":"Bloomington","state":"IL","interest":"3D printing","avatar":"css\/images\/user_default\/default_avatar.png"},{"name":"testuser2","distance":14,"city":"Jonesboro","state":"AR","interest":"3D printing","avatar":"css\/images\/user_default\/default_avatar.png"}],"count":3}
但是,我收到 "No Value for count,",这导致所有 'Log.d' 消息都没有显示。
我还尝试使用以下方法提取计数:
JSONArray count_array = object.getJSONArray("count");
JSONObject countObject = count_array.getJSONObject(0);
int count = countObject.getInt("count");
但随后它捕获了异常并告诉我:
Value 3 at count of type java.lang.Integer cannot be converted to JSONArray
它返回正确的计数 (3),但我不知道如何从多维数组中正确提取它。
如何获取计数值?我觉得这是一个小语法问题,我只是不知道如何纠正它。
我希望我在问之前能想到这一点,但我突然明白了。由于 count 变量实际上是数组长度,我访问它时使用:
int count = array.length();
Log.d(TAG, "Count: "+count);
哪个returns:
Count: 3