Java 改造Get数据对象
我有一个这样的数据,我想得到报告和标准数据Java 改造Get数据对象,java,retrofit,Java,Retrofit,我有一个这样的数据,我想得到报告和标准数据 { "response_code": 200, "message": "Your report data has been loaded.", "data": { "report": [ { "id_report": 1,
{
"response_code": 200,
"message": "Your report data has been loaded.",
"data": {
"report": [
{
"id_report": 1,
"report_name": "report name A"
},
{
"id_report": 2,
"report_name": "report name B"
}
],
"criteria": [
{
"id_criteria": 1,
"criteria_name": "criteria name A"
},
{
"id_criteria": 2,
"criteria_name": "criteria name B"
}
]
}
}
我使用改型获得java中的数据。这是我的java类
GetReport.java
@SerializedName("response_code")
private int response_code;
@SerializedName("status")
private boolean status;
@SerializedName("message")
private String message;
@SerializedName("data")
Call<Data> listData;
package com.example.retrofitapp;
import com.google.gson.annotations.SerializedName;
public class GetReport {
@SerializedName("response_code")
int response_code;
@SerializedName("message")
String message;
@SerializedName("data")
Data data;
public int getResponse_code() {
return response_code;
}
public void setResponse_code(int response_code) {
this.response_code = response_code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public Data getData() {
return data;
}
public void setData(Data data) {
this.data = data;
}}
package com.example.retrofitapp;
import com.google.gson.annotations.SerializedName;
public class Report {
@SerializedName("id_report")
int id_report;
@SerializedName("report_name")
String report_name;
public Report(int id_report, String report_name) {
this.id_report = id_report;
this.report_name = report_name;
}
public int getId_report() {
return id_report;
}
public void setId_report(int id_report) {
this.id_report = id_report;
}
public String getReport_name() {
return report_name;
}
public void setReport_name(String report_name) {
this.report_name = report_name;
}}
@SerializedName(“响应代码”)
专用int响应_码;
@序列化名称(“状态”)
私有布尔状态;
@SerializedName(“消息”)
私有字符串消息;
@SerializedName(“数据”)
调用列表数据;
Data.java
@SerializedName("report")
private List<Report> reportList;
@SerializedName("criteria")
private List<Criteria> criteriaList;
package com.example.retrofitapp;
import com.google.gson.annotations.SerializedName;
import java.util.List;
public class Data {
@SerializedName("report")
List<Report> reportList;
@SerializedName("criteria")
List<Criteria> criteriaList;
public List<Report> getReportList() {
return reportList;
}
public void setReportList(List<Report> reportList) {
this.reportList = reportList;
}
public List<Criteria> getCriteriaList() {
return criteriaList;
}
public void setCriteriaList(List<Criteria> criteriaList) {
this.criteriaList = criteriaList;
}}
@SerializedName(“报告”)
私人名单;
@SerializedName(“标准”)
私有列表标准列表;
这就是我所说的数据
public void populateData() {
Call<GetReport> getReportCall = apiInterface.getReportCall();
getReportCall.enqueue(new Callback<GetReport>() {
@Override
public void onResponse(Call<GetReport> call, Response<GetReport> response) {
response.body().getListData().enqueue(new Callback<Data>() {
@Override
public void onResponse(Call<Data> call, Response<Data> response) {
List<Report> reportList = response.body().getReportList();
Log.d("TAGGGGGGGGGG", String.valueOf(reportList.size()));
}
@Override
public void onFailure(Call<Data> call, Throwable t) {
t.printStackTrace();
}
});
}
@Override
public void onFailure(Call<GetReport> call, Throwable t) {
t.printStackTrace();
}
});
}
public void populateData(){
调用getReportCall=apiInterface.getReportCall();
getReportCall.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
response.body(){
@凌驾
公共void onResponse(调用、响应){
List reportList=response.body().getReportList();
Log.d(“tagggg”,String.valueOf(reportList.size());
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
t、 printStackTrace();
}
});
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
t、 printStackTrace();
}
});
}
当我运行程序时,我的活动立即关闭。当我查看logcat时,有太多的运行日志数据,因此我看不出错误在哪里。我已尝试使用以下代码解决您的问题。我复制并粘贴了您在JSONbin.io上提供的JSON,以便能够使用API调用调用它。我根本没有修改JSON的结构 应用程序build.gradle
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
GetReport.java
@SerializedName("response_code")
private int response_code;
@SerializedName("status")
private boolean status;
@SerializedName("message")
private String message;
@SerializedName("data")
Call<Data> listData;
package com.example.retrofitapp;
import com.google.gson.annotations.SerializedName;
public class GetReport {
@SerializedName("response_code")
int response_code;
@SerializedName("message")
String message;
@SerializedName("data")
Data data;
public int getResponse_code() {
return response_code;
}
public void setResponse_code(int response_code) {
this.response_code = response_code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public Data getData() {
return data;
}
public void setData(Data data) {
this.data = data;
}}
package com.example.retrofitapp;
import com.google.gson.annotations.SerializedName;
public class Report {
@SerializedName("id_report")
int id_report;
@SerializedName("report_name")
String report_name;
public Report(int id_report, String report_name) {
this.id_report = id_report;
this.report_name = report_name;
}
public int getId_report() {
return id_report;
}
public void setId_report(int id_report) {
this.id_report = id_report;
}
public String getReport_name() {
return report_name;
}
public void setReport_name(String report_name) {
this.report_name = report_name;
}}
Data.java
@SerializedName("report")
private List<Report> reportList;
@SerializedName("criteria")
private List<Criteria> criteriaList;
package com.example.retrofitapp;
import com.google.gson.annotations.SerializedName;
import java.util.List;
public class Data {
@SerializedName("report")
List<Report> reportList;
@SerializedName("criteria")
List<Criteria> criteriaList;
public List<Report> getReportList() {
return reportList;
}
public void setReportList(List<Report> reportList) {
this.reportList = reportList;
}
public List<Criteria> getCriteriaList() {
return criteriaList;
}
public void setCriteriaList(List<Criteria> criteriaList) {
this.criteriaList = criteriaList;
}}
Report.java
@SerializedName("response_code")
private int response_code;
@SerializedName("status")
private boolean status;
@SerializedName("message")
private String message;
@SerializedName("data")
Call<Data> listData;
package com.example.retrofitapp;
import com.google.gson.annotations.SerializedName;
public class GetReport {
@SerializedName("response_code")
int response_code;
@SerializedName("message")
String message;
@SerializedName("data")
Data data;
public int getResponse_code() {
return response_code;
}
public void setResponse_code(int response_code) {
this.response_code = response_code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public Data getData() {
return data;
}
public void setData(Data data) {
this.data = data;
}}
package com.example.retrofitapp;
import com.google.gson.annotations.SerializedName;
public class Report {
@SerializedName("id_report")
int id_report;
@SerializedName("report_name")
String report_name;
public Report(int id_report, String report_name) {
this.id_report = id_report;
this.report_name = report_name;
}
public int getId_report() {
return id_report;
}
public void setId_report(int id_report) {
this.id_report = id_report;
}
public String getReport_name() {
return report_name;
}
public void setReport_name(String report_name) {
this.report_name = report_name;
}}
更新client.java
package com.example.retrofitapp.api;
import com.google.gson.*;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
public class RetrofitClient {
public static Retrofit retrofit;
public static Retrofit getRetrofitClient(String baseUrl){
if(retrofit==null){
Gson gson = new GsonBuilder().setLenient().create();
retrofit = new Retrofit.Builder().baseUrl(baseUrl).addConverterFactory(GsonConverterFactory.create(gson)).build();
}
return retrofit;
}}
Constants.java
package com.example.retrofitapp;
public class Constants {
public static String base_url = "https://api.jsonbin.io/";
}
Api.java
package com.example.retrofitapp.api;
import com.example.retrofitapp.GetReport;
import retrofit2.Call;
import retrofit2.http.GET;
import retrofit2.http.Headers;
public interface Api {
@Headers("Secret-key:$2a$10$WxkkTylkdR7NwGSoPwrfy.Odxtj7MR2vDtYZBp9cOd0SaYGVRmhOm")
@GET("/b/5ff8172e63e86571a2e35639")
Call<GetReport> getReport();
}
package com.example.app.api;
导入com.example.involutionapp.GetReport;
2.电话;;
导入文件2.http.GET;
导入2.http.Headers;
公共接口Api{
@标题(“密钥:$2a$10$WxkkTylkdR7NwGSoPwrfy.Odxtj7MR2vDtYZBp9cOd0SaYGVRmhOm”)
@获取(“/b/5FF8172E63E86571AE35639”)
调用getReport();
}
MainActivity.java
package com.example.retrofitapp;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import com.example.retrofitapp.api.Api;
import com.example.retrofitapp.api.RetrofitClient;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//call method here
populateData();
}
private void populateData() {
Retrofit retrofit = RetrofitClient.getRetrofitClient(Constants.base_url);
Api api = retrofit.create(Api.class);
Call<GetReport> getReportCall = api.getReport();
//make asynchronous request
getReportCall.enqueue(new Callback<GetReport>() {
@Override
public void onResponse(Call<GetReport> call, Response<GetReport> response) {
if(response.code() == 200){
GetReport getReport = (GetReport) response.body();
//get response code
int responseCode = getReport.getResponse_code();
//get message
String message = getReport.getMessage();
//get data
Data data = getReport.getData();
//get reports(loop)
for(Report report : data.getReportList()){
//your report here
}
//get criteria(loop)
for(Criteria criteria : data.getCriteriaList()){
//your criteria here
}
}
}
@Override
public void onFailure(Call<GetReport> call, Throwable t) {
//do something if the request failed
}
});
}}
package com.example.app;
导入androidx.appcompat.app.appcompat活动;
导入android.os.Bundle;
导入com.example.app.api.api;
导入com.example.infrantApp.api.infrantClient;
2.电话;;
2.回拨;
2.回应;;
进口改装2.改装;
公共类MainActivity扩展了AppCompatActivity{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//在这里调用方法
填充数据();
}
私有void populateData(){
Refundation-Refundation=RefundationClient.getRefundationClient(Constants.base\uURL);
Api=改装.create(Api.class);
调用getReportCall=api.getReport();
//发出异步请求
getReportCall.enqueue(新回调(){
@凌驾
public void onResponse(调用调用,响应响应){
if(response.code()==200){
GetReport GetReport=(GetReport)response.body();
//获取响应代码
int responseCode=getReport.getResponse_code();
//得到消息
String message=getReport.getMessage();
//获取数据
Data Data=getReport.getData();
//获取报告(循环)
for(报告:data.getReportList()){
//你的报告在这里
}
//获取条件(循环)
对于(条件:data.getCriteriaList()){
//你的标准在这里
}
}
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
//如果请求失败,请执行某些操作
}
});
}}
这就是我解决问题的方法。我已尝试使用以下代码解决您的问题。我复制并粘贴了您在JSONbin.io上提供的JSON,以便能够使用API调用调用它。我根本没有修改JSON的结构 应用程序build.gradle
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
GetReport.java
@SerializedName("response_code")
private int response_code;
@SerializedName("status")
private boolean status;
@SerializedName("message")
private String message;
@SerializedName("data")
Call<Data> listData;
package com.example.retrofitapp;
import com.google.gson.annotations.SerializedName;
public class GetReport {
@SerializedName("response_code")
int response_code;
@SerializedName("message")
String message;
@SerializedName("data")
Data data;
public int getResponse_code() {
return response_code;
}
public void setResponse_code(int response_code) {
this.response_code = response_code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public Data getData() {
return data;
}
public void setData(Data data) {
this.data = data;
}}
package com.example.retrofitapp;
import com.google.gson.annotations.SerializedName;
public class Report {
@SerializedName("id_report")
int id_report;
@SerializedName("report_name")
String report_name;
public Report(int id_report, String report_name) {
this.id_report = id_report;
this.report_name = report_name;
}
public int getId_report() {
return id_report;
}
public void setId_report(int id_report) {
this.id_report = id_report;
}
public String getReport_name() {
return report_name;
}
public void setReport_name(String report_name) {
this.report_name = report_name;
}}
Data.java
@SerializedName("report")
private List<Report> reportList;
@SerializedName("criteria")
private List<Criteria> criteriaList;
package com.example.retrofitapp;
import com.google.gson.annotations.SerializedName;
import java.util.List;
public class Data {
@SerializedName("report")
List<Report> reportList;
@SerializedName("criteria")
List<Criteria> criteriaList;
public List<Report> getReportList() {
return reportList;
}
public void setReportList(List<Report> reportList) {
this.reportList = reportList;
}
public List<Criteria> getCriteriaList() {
return criteriaList;
}
public void setCriteriaList(List<Criteria> criteriaList) {
this.criteriaList = criteriaList;
}}
Report.java
@SerializedName("response_code")
private int response_code;
@SerializedName("status")
private boolean status;
@SerializedName("message")
private String message;
@SerializedName("data")
Call<Data> listData;
package com.example.retrofitapp;
import com.google.gson.annotations.SerializedName;
public class GetReport {
@SerializedName("response_code")
int response_code;
@SerializedName("message")
String message;
@SerializedName("data")
Data data;
public int getResponse_code() {
return response_code;
}
public void setResponse_code(int response_code) {
this.response_code = response_code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public Data getData() {
return data;
}
public void setData(Data data) {
this.data = data;
}}
package com.example.retrofitapp;
import com.google.gson.annotations.SerializedName;
public class Report {
@SerializedName("id_report")
int id_report;
@SerializedName("report_name")
String report_name;
public Report(int id_report, String report_name) {
this.id_report = id_report;
this.report_name = report_name;
}
public int getId_report() {
return id_report;
}
public void setId_report(int id_report) {
this.id_report = id_report;
}
public String getReport_name() {
return report_name;
}
public void setReport_name(String report_name) {
this.report_name = report_name;
}}
更新client.java
package com.example.retrofitapp.api;
import com.google.gson.*;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
public class RetrofitClient {
public static Retrofit retrofit;
public static Retrofit getRetrofitClient(String baseUrl){
if(retrofit==null){
Gson gson = new GsonBuilder().setLenient().create();
retrofit = new Retrofit.Builder().baseUrl(baseUrl).addConverterFactory(GsonConverterFactory.create(gson)).build();
}
return retrofit;
}}
Constants.java
package com.example.retrofitapp;
public class Constants {
public static String base_url = "https://api.jsonbin.io/";
}
Api.java
package com.example.retrofitapp.api;
import com.example.retrofitapp.GetReport;
import retrofit2.Call;
import retrofit2.http.GET;
import retrofit2.http.Headers;
public interface Api {
@Headers("Secret-key:$2a$10$WxkkTylkdR7NwGSoPwrfy.Odxtj7MR2vDtYZBp9cOd0SaYGVRmhOm")
@GET("/b/5ff8172e63e86571a2e35639")
Call<GetReport> getReport();
}
package com.example.app.api;
导入com.example.involutionapp.GetReport;
2.电话;;
导入文件2.http.GET;
导入2.http.Headers;
公共接口Api{
@标题(“密钥:$2a$10$WxkkTylkdR7NwGSoPwrfy.Odxtj7MR2vDtYZBp9cOd0SaYGVRmhOm”)
@获取(“/b/5FF8172E63E86571AE35639”)
调用getReport();
}
MainActivity.java
package com.example.retrofitapp;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import com.example.retrofitapp.api.Api;
import com.example.retrofitapp.api.RetrofitClient;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//call method here
populateData();
}
private void populateData() {
Retrofit retrofit = RetrofitClient.getRetrofitClient(Constants.base_url);
Api api = retrofit.create(Api.class);
Call<GetReport> getReportCall = api.getReport();
//make asynchronous request
getReportCall.enqueue(new Callback<GetReport>() {
@Override
public void onResponse(Call<GetReport> call, Response<GetReport> response) {
if(response.code() == 200){
GetReport getReport = (GetReport) response.body();
//get response code
int responseCode = getReport.getResponse_code();
//get message
String message = getReport.getMessage();
//get data
Data data = getReport.getData();
//get reports(loop)
for(Report report : data.getReportList()){
//your report here
}
//get criteria(loop)
for(Criteria criteria : data.getCriteriaList()){
//your criteria here
}
}
}
@Override
public void onFailure(Call<GetReport> call, Throwable t) {
//do something if the request failed
}
});
}}
package com.example.app;
导入androidx.appcompat.app.appcompat活动;
导入android.os.Bundle;
导入com.example.app.api.api;
导入com.example.infrantApp.api.infrantClient;
2.电话;;
2.回拨;
2.回应;;
进口改装2.改装;
公共类MainActivity扩展了AppCompatActivity{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//在这里调用方法
填充数据();
}
私有void populateData(){
Refundation-Refundation=RefundationClient.getRefundationClient(Constants.base\uURL);
Api=改装.create(Api.class);
调用getReportCall=api.getReport();
//发出异步请求
getReportCall.enqueue(新Ca)