我目前正在尝试获取 JSON 对象并将值存储到对象类中,然后将这些对象存储在列表中。我似乎能够将字符串值分配给变量,但 int 和 double 值不起作用。
我的代码是:
JSONObject json = new JSONObject(result);
ArrayList<Doormat> doormats = new ArrayList<>();
JSONArray jsonArray = json.optJSONArray("data");
for(int i = 0; i < Objects.requireNonNull(jsonArray).length(); i++){
JSONObject jsonData = jsonArray.optJSONObject(i);
int doormat_id = jsonData.optInt("doormat_id");
double latitude = jsonData.optDouble("latitude");
double longitude = jsonData.optDouble("longitude");
String created_by = jsonData.optString("created_by");
String shape = json.optString("shape");
String color = json.optString("color");
Doormat doormat = new Doormat(doormat_id, latitude, longitude, created_by, shape, color);
doormats.add(doormat);
}
当 JSONObject jsonData 通过 for 循环运行时(JSONArray 是一个对象数组),JSON 看起来像这样:
{"doormat_id":"176", "latitude":"28.135974884033203", "longitude":"-82.50953674316406", "created_by":"User", "shape":"default_shape", "color":"default_color" }
我对 Android 开发还很陌生,因此我们将不胜感激。谢谢!
我尝试提取“doormat_id”等值的字符串,但它们返回空白,并且我无法将它们解析为 int。
您可以使用GSON库将json数据转换为类对象。在 build.gradle(:app) 中提及这个库。
implementation 'com.google.code.gson:gson:2.8.6'
然后在活动中像这样使用它:
JSONObject obj = new JSONObject(result);
UserData user_data = (UserData) new Gson().fromJson(obj.toString(), UserData.class);
现在一些解释,假设我们有一个像这样的 json 对象:
{
"data": [{
"doormat_id": 12,
"latitude": 72.15642,
"longitude": 72.15642,
"created_by": "Batman",
"shape": "mascular",
"color": "black"
},
{
"doormat_id": 13,
"latitude": 72.15642,
"longitude": 72.15642,
"created_by": "Superman",
"shape": "mighty",
"color": "red"
}
]
}
现在创建此 json 对象名称 UserData 的 Model 类:
public class UserData {
private List<DataBean> data;
public List<DataBean> getData() {
return data;
}
public void setData(List<DataBean> data) {
this.data = data;
}
public static class DataBean {
private int doormat_id;
private double latitude;
private double longitude;
private String created_by;
private String shape;
private String color;
public int getDoormat_id() {
return doormat_id;
}
public void setDoormat_id(int doormat_id) {
this.doormat_id = doormat_id;
}
public double getLatitude() {
return latitude;
}
public void setLatitude(double latitude) {
this.latitude = latitude;
}
public double getLongitude() {
return longitude;
}
public void setLongitude(double longitude) {
this.longitude = longitude;
}
public String getCreated_by() {
return created_by;
}
public void setCreated_by(String created_by) {
this.created_by = created_by;
}
public String getShape() {
return shape;
}
public void setShape(String shape) {
this.shape = shape;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
}
}
现在你可以使用上面提到的Gson代码将json数据解析到UserData类,然后从user_data.getData();获取数组列表
P.s = 如果您想获取字符串中的所有 json 参数(例如 =doormat_id、经度等),则在 Model 类中将它们声明为 String,GSON 库将处理其余部分。
请使用以下陈述:
Double.parseDouble(jsonData.optString("latitude"))
// or
Double.valueOf(jsonData.optString("latitude")).doubleValue();
--------->
Integer.parseInt(jsonData.optString("doormat_id"))
//or
Integer.valueOf(jsonData.optString("doormat_id"));