2017-10-13 56 views
-7

所以我有这个PHP文件返回一个JSONArray。如何操作JSONArray从PHP到Android

[ 
    { 
    "name": "SAMPLE NAME 1", 
    "number": "12345", 
    "entity": "User" 
    }, 
    { 
    "name": "SAMPLE NAME 2", 
    "number": "67890", 
    "entity": "Admin" 
    } 
] 

我对我的android应用程序使用了android volley。我想展示一个Toast,它会分别显示这些名字。

这是我的Android代码:

StringRequest stringReq = new StringRequest(Request.Method.POST, "http://myfile.php", new Response.Listener<String>() 
{ 
     @Override 
     public void onResponse(String response) { 
      try { 
       JSONObject json = new JSONObject(response); 
       Toast.makeText(getApplicationContext(), response, Toast.LENGTH_LONG).show(); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
+0

你能告诉我们什么不起作用吗? – WasteD

+2

你的回应是一个json数组而不是json对象。 –

+2

[如何在Android中解析JSON]可能的重复(https://stackoverflow.com/questions/9605913/how-to-parse-json-in-android) – UltimateDevil

回答

0

您效应初探是JSONArray,你想在JSONObject

解析试试这个解析您的JSON

try { 

     JSONArray jsonArray = new JSONArray("response"); 
     for (int i = 0; i < jsonArray.length(); i++) { 
      JSONObject object = jsonArray.getJSONObject(i); 
      String name = object.getString("name"); 
      String number = object.getString("number"); 
      String entity = object.getString("entity"); 

     } 

    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
0

尝试使用JsonArrayRequest这一个

 JsonArrayRequest req = new JsonArrayRequest("your url goes here", 
     new Response.Listener<JSONArray>() { 
      @Override 
      public void onResponse(JSONArray response) { 
       Log.d(TAG, response.toString()); 

       try { 

        jsonResponse = ""; 
        for (int i = 0; i < response.length(); i++) { 

         JSONObject jObject = (JSONObject) response 
           .get(i); 

        } 

       } catch (JSONException e) { 
        e.printStackTrace(); 
        Toast.makeText(getApplicationContext(), 
          "Error: " + e.getMessage(), 
          Toast.LENGTH_LONG).show(); 
       } 
      } 
     }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       VolleyLog.d(TAG, "Error: " + error.getMessage()); 
       Toast.makeText(getApplicationContext(), 
         error.getMessage(), Toast.LENGTH_SHORT).show(); 
      } 
     }); 
0
try { 

    JSONArray j = new JSONArray("response"); 
    for (int i = 0; i < j.length(); i++) { 
     JSONObject object = j.getJSONObject(i); 
     String name = object.getString("name"); 
     String number = object.getString("number"); 
     String entity = object.getString("entity"); 

    } 

} catch (JSONException e) { 
    e.printStackTrace(); 
} 
0

您的回复数据是一个数组。你需要分析一个JSONArray象下面这样:

JSONArray jsonArray = new JSONArray(response); 

,如果你想读的关键数据,你可以做象下面这样:

for (int index = 0; index < jsonArray.length(); index++) { 
    JSONObject object = jsonArray.optJSONObject(index); 
    if (object != null) { 
     String name = object.optString("name"); 
     String number = object.optString("number"); 
     String entity = object.optString("entity"); 
    } 
} 

但现在我见于Ger.Offen使用GSON数据解析到一个对象。见下。

步骤1:下面的行添加到你的摇篮配置

dependencies { 
    compile 'com.google.code.gson:gson:2.8.0' 
} 

步骤2:这样

import com.google.gson.annotations.Expose; 
import com.google.gson.annotations.SerializedName; 

public class UserModel { 

    @SerializedName("name") 
    @Expose 
    private String name; 
    @SerializedName("number") 
    @Expose 
    private String number; 
    @SerializedName("entity") 
    @Expose 
    private String entity; 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getNumber() { 
     return number; 
    } 

    public void setNumber(String number) { 
     this.number = number; 
    } 

    public String getEntity() { 
     return entity; 
    } 

    public void setEntity(String entity) { 
     this.entity = entity; 
    } 

} 

步骤3定义的usermodel类:在onResponse方法改变到波纹管:

Gson gson = new GsonBuilder().create(); 
ArrayList<UserModel> models = gson.fromJson(response, new TypeToken<ArrayList<UserModel>>() { 
}.getType()); 

现在您可以像这样访问您的数据

if (models != null && models.size() > 0) { 
    for (int i = 0; i < models.size(); i++) { 
     UserModel user = models.get(i); 
     user.getName(); 
     user.getEntity(); 
     user.getNumber(); 
    } 
}