android - 如何在 Android 中从 JSON 中提取数据
问题描述
如何从以下 JSON 响应中提取数据?它需要显示在回收卡视图中,但我被困在这里需要帮助才能完成该过程。如果您有任何 Android 初学者教程网站链接,请分享给我,以便我阅读并从中受益。
提前致谢。
JSON响应:
{
"is_retrieved":true,
"message":"Sites Found",
"data": [
{
"site_id":"1",
"site_name":"test",
"site_location":"test loc"
},
{
"site_id":"2",
"site_name":"test 1",
"site_location":"test 1 loc"
}
]
}
检索.java
package com.example.myapplication;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
import java.util.List;
public class Retrieve {
@SerializedName("is_retrieved")
@Expose
private Boolean isRetrieved;
@SerializedName("message")
@Expose
private String message;
@SerializedName("data")
@Expose
private List<Sites> data = null;
public Boolean getIsRetrieved() {
return isRetrieved;
}
public void setIsRetrieved(Boolean isRetrieved) {
this.isRetrieved = isRetrieved;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public List<Sites> getData() {
return data;
}
public void setData(List<Sites> data) {
this.data = data;
}
}
站点.java
package com.example.myapplication;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class Sites {
@SerializedName("site_id")
@Expose
private String siteId;
@SerializedName("site_name")
@Expose
private String siteName;
@SerializedName("site_location")
@Expose
private String siteLocation;
public String getSiteId() {
return siteId;
}
public void setSiteId(String siteId) {
this.siteId = siteId;
}
public String getSiteName() {
return siteName;
}
public void setSiteName(String siteName) {
this.siteName = siteName;
}
public String getSiteLocation() {
return siteLocation;
}
public void setSiteLocation(String siteLocation) {
this.siteLocation = siteLocation;
}
}
我的活动.java
ApiInterface apiService = ApiClient.getClient().create(ApiInterface.class);
Call <Retrieve> call = apiService.getSites();
call.enqueue(new Callback<Retrieve>() {
@Override
public void onResponse(Call<Retrieve> call, Response<Retrieve> response) {
loadProgress.setVisibility(View.GONE);
Retrieve Result = (Retrieve) response.body();
if(!Result.getIsRetrieved()){
Toast.makeText(getBaseContext(),Result.getMessage(), Toast.LENGTH_SHORT).show();
return;
}
}
@Override
public void onFailure(Call<Retrieve> call, Throwable t) {
textViewResult.setText(t.getMessage());
loadProgress.setVisibility(View.GONE);
Toast.makeText(getBaseContext(), "Retrieve Failed", Toast.LENGTH_SHORT).show();
}
});
解决方案
尝试这个:
JSONObject jsonObject = new JSONObject();
try {
JSONArray jsonArray = jsonObject.getJSONArray("data");
for (int x = 0;x < jsonArray.length();x++){
JSONObject jsonObjectInner = jsonArray.getJSONObject(x);
String site_id = jsonObjectInner.getString("site_id");
String site_name = jsonObjectInner.getString("site_name");
String site_location = jsonObjectInner.getString("site_location");
Log.i("data",site_id + "\n" + site_name + "\n" + site_location);
}
} catch (JSONException e) {
e.printStackTrace();
}
推荐阅读
- arrays - 即使我是方法变量,vueJs 也会更新道具
- variables - 强制编译错误 - 变量可能尚未在 Delphi 7 中初始化
- javascript - 如何检查空的文本输入
- c++ - 为什么 std::string.size() 在我的代码中表现异常?
- python - kivy, do 2 def in class
- javascript - 从数据库进行程序重建时如何重新绑定拖放事件
- spring - Spring Boot:在自定义自动配置 bean 中自动装配应用程序凭据返回 null
- javascript - 是否可以使用 Angular 将表单数据发送到外部链接?
- unity3d - 如何成为一名游戏程序员?
- django - DRF CamelCase 解析器无法处理动作