如何使用 Retrofit 从 Json 数组列表中检索 MpAndroid 图表内的数据?
Posted
技术标签:
【中文标题】如何使用 Retrofit 从 Json 数组列表中检索 MpAndroid 图表内的数据?【英文标题】:How to retrieve data inside a MpAndroid chart from Json array list using Retrofit? 【发布时间】:2020-02-01 18:43:44 【问题描述】:这是我从服务器收到的 Json 响应:
"OpdIpdComparison": [
"Year": 2019,
"Month": 1,
"MonthString": "January",
"IPD": 35,
"OPD": 3,
"Percent": "12.0"
,
"Year": 2019,
"Month": 2,
"MonthString": "February",
"IPD": 40,
"OPD": 0,
"Percent": "Infinity"
,
"Year": 2019,
"Month": 3,
"MonthString": "March",
"IPD": 53,
"OPD": 0,
"Percent": "Infinity"
,
"Year": 2019,
"Month": 4,
"MonthString": "April",
"IPD": 47,
"OPD": 0,
"Percent": "Infinity"
]
这是我的模型类:
公共类 OpdIpdModel
@Json(name= "Year")
private Integer year;
@Json(name= "Month")
private Integer month;
@Json(name= "MonthString")
private String monthString;
@Json(name= "IPD")
private Integer iPD;
@Json(name= "OPD")
private Integer oPD;
@Json(name= "Percent")
private String percent;
public OpdIpdModel()
public OpdIpdModel(Integer year, Integer month, String monthString, Integer iPD, Integer oPD, String percent)
this.year = year;
this.month = month;
this.monthString = monthString;
this.iPD = iPD;
this.oPD = oPD;
this.percent = percent;
public Integer getYear()
return year;
public void setYear(Integer year)
this.year = year;
public Integer getMonth()
return month;
public void setMonth(Integer month)
this.month = month;
public String getMonthString()
return monthString;
public void setMonthString(String monthString)
this.monthString = monthString;
public Integer getiPD()
return iPD;
public void setiPD(Integer iPD)
this.iPD = iPD;
public Integer getoPD()
return oPD;
public void setoPD(Integer oPD)
this.oPD = oPD;
public String getPercent()
return percent;
public void setPercent(String percent)
this.percent = percent;
API 服务类:
public interface ApiService
@GET("/Report/GetOpdIpdComparison?departmentId=473")
Call<ModelResponse> getAllOpdIpdData();
ModelResponse 类
public class ModelResponse
//@SerializedName("OpdIpdComparison") //for gson converter
@Json(name = "OpdIpdComparison") //for moshi converter
private List<OpdIpdModel> OpdIpdComparison;
public ModelResponse(List<OpdIpdModel> opdIpdComparison)
OpdIpdComparison = opdIpdComparison;
public List<OpdIpdModel> getOpdIpdComparison()
return OpdIpdComparison;
public void setOpdIpdComparison(List<OpdIpdModel> opdIpdComparison)
OpdIpdComparison = opdIpdComparison;
检索 Jason 数据的主类:
public class OpdIpdAnalysis extends AppCompatActivity
ApiService service;
TokenManager tokenManager;
Call<ModelResponse> call;
private ListView mListView;
//GraphView
private BarChart mBarChart;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_opd_ipd_analysis);
mListView = findViewById(R.id.mListView);
//GraphView casting
mBarChart = (BarChart)findViewById(R.id.barChart);
//code for retrofit call
Call<List<OpdIpdModel>> call2 = service2.getGraphData();
call2.enqueue(new Callback<List<OpdIpdModel>>()
@Override
public void onResponse(Call<List<OpdIpdModel>> call, Response<List<OpdIpdModel>> response)
if (response.body() != null)
List<BarEntry> barEntries = new ArrayList<>();
for (OpdIpdModel opdIpdModel : response.body().getOpdIpdComparison())
barEntries.add(new BarEntry(opdIpdModel.getoPD(), opdIpdModel.getiPD()));
BarDataSet barDataSet = new BarDataSet(barEntries, "");
barDataSet.setColors(ColorTemplate.COLORFUL_COLORS);
BarData barData = new BarData();
barData.setBarWidth(0.9f);
mBarChart.setVisibility(View.VISIBLE);
mBarChart.animateY(4000);
mBarChart.setData(barData);
mBarChart.setFitBars(true);
Description description = new Description();
description.setText("Growth rate per month");
@Override
public void onFailure(Call<List<OpdIpdModel>> call, Throwable t)
myProgressBar.setVisibility(View.GONE);
Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), "Network Status: " + t.getMessage(), Snackbar.LENGTH_LONG);
View snackbarView = snackbar.getView();
snackbarView.setBackgroundColor(Color.parseColor("#e64a19"));
TextView tv = (TextView) snackbarView.findViewById(R.id.snackbar_text);
tv.setTextColor(Color.WHITE);
snackbar.show();
);
现在,当我启动我的应用程序时,它工作正常,但数据未显示 图视图。我该如何解决这个问题
我的布局没有问题。
提前致谢。
【问题讨论】:
您遇到的错误是什么?您的应用在哪一行崩溃? @Yserbius 应用程序现在工作正常,因为我根据 akshay_shahane 更新了我的代码,但问题是在 graphView 中没有显示任何内容,它是空白的。不知道为什么!! 您是否仍然面临或解决这个问题? 问题已解决,但我在 xAxis 上的标签仍有一些问题 【参考方案1】:您正在尝试循环 response.body()
这是 json 对象而不是数组
改成
for (OpdIpdModel opdIpdModel : response.body().getOpdIpdComparison())
【讨论】:
以上是关于如何使用 Retrofit 从 Json 数组列表中检索 MpAndroid 图表内的数据?的主要内容,如果未能解决你的问题,请参考以下文章
当列表的各个项目使用Retrofit和Gson的格式不同时,如何解析json列表?
如何使用 Retrofit 和 Jackson 读取嵌套的 JSON 数组?