【发布时间】:2021-04-26 11:06:59
【问题描述】:
我正在尝试使用改造检索数据并使用 MPAndroidChart 放置它们。我可以从 JSON 中检索数据,还可以在线图上手动添加定义的 x、y(例如 x=1、y=1)。
但是,我仍在学习 MPLineChart 和(尤其是 LineChart),并且对结合这两个概念感到震惊 - 检索 y1 和 y2 数据并使用这些数据随时间绘制折线图。谁能让我了解一下如何检索 JSON 数据和绘图?
这是我目前所拥有的:
主活动:
import com.github.mikephil.charting.charts.LineChart;
import com.github.mikephil.charting.components.XAxis;
import com.github.mikephil.charting.components.YAxis;
import com.github.mikephil.charting.data.Entry;
import com.github.mikephil.charting.data.LineData;
import com.github.mikephil.charting.data.LineDataSet;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
drawLineChart();
}
private void drawLineChart() {
LineChart lineChart = findViewById(R.id.chart);
List<Entry> lineEntries = getDataSet();
LineDataSet lineDataSet = new LineDataSet(lineEntries, getString(R.string.data1));
lineDataSet.setAxisDependency(YAxis.AxisDependency.LEFT);
lineDataSet.setHighlightEnabled(true);
lineDataSet.setLineWidth(2);
lineDataSet.setColor(Color.RED);
lineDataSet.setCircleColor(Color.YELLOW);
lineDataSet.setCircleRadius(6);
lineDataSet.setCircleHoleRadius(3);
lineDataSet.setDrawHighlightIndicators(true);
lineDataSet.setHighLightColor(Color.RED);
lineDataSet.setValueTextSize(12);
lineDataSet.setValueTextColor(Color.DKGRAY);
LineData lineData = new LineData(lineDataSet);
lineChart.getDescription().setTextSize(12);
lineChart.setDrawMarkers(true);
lineChart.getXAxis().setPosition(XAxis.XAxisPosition.BOTH_SIDED);
lineChart.animateY(1000);
lineChart.getXAxis().setGranularityEnabled(true);
lineChart.getXAxis().setGranularity(1.0f);
lineChart.getXAxis().setLabelCount(lineDataSet.getEntryCount());
lineChart.setData(lineData);
}
private List<Entry> getDataSet() {
List<Entry> lineEntries = new ArrayList<Entry>();
//lineEntries.add(new Entry(0, 1));
//lineEntries.add(new Entry(1, 2));
//lineEntries.add(new Entry(2, 3));
//lineEntries.add(new Entry(3, 4));
return lineEntries;
}
private void fetchData() {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(Api.BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
Api api = retrofit.create(Api.class);
Call<List<Details>> call = api.getstatus();
call.enqueue(new Callback<List<Details>>() {
@Override
public void onResponse(Call<List<Details>> call, Response<List<Details>> response) {
List<Details> adslist = response.body();
}
@Override
public void onFailure(Call<List<Details>> call, Throwable t) {
Toast.makeText(MainActivity.this, ""+t.getMessage().toString(), Toast.LENGTH_SHORT).show();
}
});
}
}
对于 gson:
public class Details {
@SerializedName("y1")
@Expose
private String y1;
@SerializedName("y2")
@Expose
private String y2;
@SerializedName("timestamps")
@Expose
private String timestamps;
public String getY1() {
return y1;
}
public void setY1(String y1) {
y1 = y1;
}
public String getY2() {
return y2;
}
public void setY2(String y2) {
y2 = y2;
}
public String getTimestamps() {
return timestamps;
}
public void setTimestamps(String timestamps) {
timestamps = timestamps;
}
}
对于 API:
public interface Api {
String BASE_URL = "http://..";
@GET("Api.php")
Call<List<Details>> getstatus();
}
而数据是:
[{"y1":"40","y2":"80","timestamps":"2020-1-10 18:00:34"},{"y1":"50","y2":"60","timestamps":"2020-1-10 17:40:20"},{"y1":"70","y2":"30","timestamps":"2020-1-10 17:20:34"}]
【问题讨论】:
-
您的响应中是否仅获得 y 坐标值,或者这是 (x,y) 值?
-
非常感谢您的回复!我的意思是只得到两个 y 值并绘制与时间的关系图!如果您对 x 轴也有时间建议?我要试一试,然后回复你!谢谢!
标签: java android json retrofit mpandroidchart