使用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

回到顶部