java如何检索JSON数据并使用MPAndroidChart绘制折线图,以及在安卓上的改进
我正在尝试使用改型检索数据,并使用MPAndroidChart将其放置。我可以从JSON中检索数据,还可以在一个线图上手动添加一个定义好的x,y(例如,x=1,y=1)
然而,我仍在学习MPLineChart和(特别是使用折线图),并开始学习如何将这两个概念结合起来-检索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"}]
# 1 楼答案
像这样更改getDataSet方法
然后
并从fetchData onResposne()方法调用这个getDataSet(List List)方法