如何操作JSONArray从PHP到Android
问题描述:
所以我有这个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();
}
}
}
答
您效应初探是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();
}
答
尝试使用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();
}
});
答
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();
}
答
您的回复数据是一个数组。你需要分析一个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();
}
}
你能告诉我们什么不起作用吗? – WasteD
你的回应是一个json数组而不是json对象。 –
[如何在Android中解析JSON]可能的重复(https://*.com/questions/9605913/how-to-parse-json-in-android) – UltimateDevil