使用JSON数据绘制线图
我是Android开发的初学者,我正在上课。我的职责是将应用程序中的JSON数据显示为文本和图形。我正在使用Retrofit
2在一个活动中将其显示为文本,但是我在使用图形时遇到了问题,我不知道该怎么做(我仍在学习,到目前为止我所做的一切都是在帮助下来自教程)。
数据如下所示(这是一个示例):
{"id": 1,
"measurements": [{
"time": "18:25:43",
"value": 25.4
},
{
"time": "18:35:43",
"value": 27.3
},
{
"time": "18:45:21",
"value": 26.3
},
{
"time": "18:55:43",
"value": 25.2
},
{
"time": "19:05:43",
"value": 25.2
},
{
"time": "19:15:43",
"value": 25.2
},
{
"time": "19:25:43",
"value": 24.9
}]
}
我已经找到了,但是我不确定下一步该怎么做。我应该用数据制作两个数组列表(如果答案是,怎么做?),或者有更好的解决方案,直接使用时间和值,并以时间为X轴和值作为Y轴绘制图。
回答:
这是您的解决方案。
首先,您必须添加依赖项
dependencies{ compile 'com.github.PhilJay:MPAndroidChart:v2.2.3'
....}
现在在您的xml中添加以下代码
<com.github.mikephil.charting.charts.LineChart android:id="@+id/chart1"
android:layout_width="match_parent"
android:layout_height="match_parent" />
现在在您的Java代码中
ArrayList<Entry> x;ArrayList<String> y;
private LineChart mChart;
public String TAG = "YOUR CLASS NAME";
内部onCreate方法
x = new ArrayList<Entry>(); y = new ArrayList<String>();
mChart = (LineChart) view.findViewById(R.id.chart1);
mChart.setDrawGridBackground(false);
mChart.setDescription("");
mChart.setTouchEnabled(true);
mChart.setDragEnabled(true);
mChart.setScaleEnabled(true);
mChart.setPinchZoom(true);
mChart.setMarkerView(mv);
XAxis xl = mChart.getXAxis();
xl.setAvoidFirstLastClipping(true);
YAxis leftAxis = mChart.getAxisLeft();
leftAxis.setInverted(true);
YAxis rightAxis = mChart.getAxisRight();
rightAxis.setEnabled(false);
Legend l = mChart.getLegend();
l.setForm(Legend.LegendForm.LINE);
单击按钮时调用此方法。
private void drawChart() { String tag_string_req = "req_chart";
StringRequest strReq = new StringRequest(Request.Method.POST, "YOUR URL",
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d(TAG, "Response: " + response);
try {
JSONObject jsonObject = new JSONObject(response);
String id = jsonObject.getString("id");
JSONArray jsonArray = jsonObject.getJSONArray("measurements");
for (int i = 0; i < jsonArray.length(); i++) {
int value = jsonObject.getInt("value");
String date = jsonObject.getString("time");
x.add(new Entry(value, i));
y.add(date);
}
LineDataSet set1 = new LineDataSet(x, "NAV Data Value");
set1.setLineWidth(1.5f);
set1.setCircleRadius(4f);
LineData data = new LineData(y, set1);
mChart.setData(data);
mChart.invalidate();
} catch (Exception e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e(TAG, "Error: " + error.getMessage());
}
});
strReq.setRetryPolicy(new RetryPolicy() {
@Override
public void retry(VolleyError arg0) throws VolleyError {
}
@Override
public int getCurrentTimeout() {
return 0;
}
@Override
public int getCurrentRetryCount() {
return 0;
}
});
strReq.setShouldCache(false);
AppController.getInstance().addToRequestQueue(strReq, tag_string_req);
}
如此处的AppController代码
public class AppController extends Application {public static final String TAG = AppController.class.getSimpleName();
private RequestQueue mRequestQueue;
private static AppController mInstance;
@Override
public void onCreate() {
super.onCreate();
mInstance = this;
}
public static synchronized AppController getInstance() {
return mInstance;
}
public RequestQueue getRequestQueue() {
if (mRequestQueue == null) {
mRequestQueue = Volley.newRequestQueue(getApplicationContext());
}
return mRequestQueue;
}
public <T> void addToRequestQueue(Request<T> req, String tag) {
req.setTag(TextUtils.isEmpty(tag) ? TAG : tag);
getRequestQueue().add(req);
}
}
希望这会帮助你。如果有任何问题,请通知我。
以上是 使用JSON数据绘制线图 的全部内容, 来源链接: utcz.com/qa/422880.html