Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 改造Get数据对象_Java_Retrofit - Fatal编程技术网

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)