我在我的android应用程序中使用MPAndroidChart库用于饼图,使用mysql服务器数据。我使用volley库从服务器检索数据。
我能够成功检索数据json:
com.example.bharat.plantnow D/ChartActivity﹕ Location Response: [{"treecondition":"Balanced","Count":"2"},{"treecondition":"Dieseased","Count":"1"},{"treecondition":"Healthy","Count":"4"},{"treecondition":"Imbalance","Count":"2"},{"treecondition":"Transplanted","Count":"1"}]
但在饼图中,我只获得了最后一个价值,即#34;移植"使用Count" 1",仍然无法显示。 Pl帮助我在CODE中出错。
private boolean addData(){
String tag_string_req = "req_location";
showDialog();
StringRequest strReq = new StringRequest(Request.Method.POST,
AppConfig.URL_PIECHART, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d(TAG, "Location Response: " + response.toString());
hideDialog();
try {
JSONArray jTreeList = new JSONArray(response);
// boolean error = jObj.getBoolean("error");
// Check for error node in json
for (int i = 0; i < jTreeList.length(); i++) {
JSONObject location = jTreeList.getJSONObject(i);
String treecondition = location.getString("treecondition");
Integer count = location.getInt("Count");
ArrayList<Entry> yVals1 = new ArrayList<Entry>();
for (int j = 0; j < count; j++)
yVals1.add(new Entry((count), j));
ArrayList<String> xVals = new ArrayList<String>();
for(int j = 0; j < treecondition.length();j++)
xVals.add(treecondition);
//create pie data set
PieDataSet dataSet = new PieDataSet(yVals1,"First pie chart");
dataSet.setSliceSpace(3);
dataSet.setSelectionShift(5);
//add many colours
ArrayList<Integer> colors = new ArrayList<Integer>();
for (int c : ColorTemplate.VORDIPLOM_COLORS)
colors.add(c);
for (int c : ColorTemplate.JOYFUL_COLORS)
colors.add(c);
for (int c : ColorTemplate.COLORFUL_COLORS)
colors.add(c);
for (int c : ColorTemplate.LIBERTY_COLORS)
colors.add(c);
for (int c : ColorTemplate.PASTEL_COLORS)
colors.add(c);
colors.add(ColorTemplate.getHoloBlue());
dataSet.setColors(colors);
//instantiate pie data object now
PieData data = new PieData(xVals,dataSet);
data.setValueFormatter(new PercentFormatter());
data.setValueTextSize(11f);
data.setValueTextColor(Color.GRAY);
mChart.setData(data);
//undo all highlight
mChart.highlightValue(null);
//update pie chart
mChart.invalidate();
}
} catch (JSONException e) {
// JSON error
e.printStackTrace();
Toast.makeText(getApplicationContext(), "Json error: " + e.getMessage(), Toast.LENGTH_LONG).show();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e(TAG, "Login Error: " + error.getMessage());
Toast.makeText(getApplicationContext(),
error.getMessage(), Toast.LENGTH_LONG).show();
hideDialog();
}
});
// Adding request to request queue
AppController.getInstance().addToRequestQueue(strReq, tag_string_req);
return false;
}
答案 0 :(得分:1)
我99%确定我在下面显示的代码不符合您的预期:
String treecondition = location.getString("treecondition");
Integer count = location.getInt("Count");
ArrayList<Entry> yVals1 = new ArrayList<Entry>();
for (int j = 0; j < count; j++)
yVals1.add(new Entry((count), j));
ArrayList<String> xVals = new ArrayList<String>();
for(int j = 0; j < treecondition.length();j++)
xVals.add(treecondition);
我将评估此代码在PieChart
方面的作用:
您的第一个for-loop
具有count
变量中指定的迭代次数。然后,将count
变量添加到Entry
。这将导致每个切片具有相同的值并且大小相同,完全独立于您的数据。
您的第二个for-loop
包含与String-variable
treecondition
包含字符一样多的迭代次数。然后,在每次迭代中,始终将相同的字符串添加到x-values
数组中。例如,如果你有一个String
&#34;马&#34;,这将产生一个长度为5的x-values
数组,其中包含String
&#34;马&#34;五次。
如果不您希望代码执行的操作,那么我建议您再次检查for-loops
。
编辑:
我现在明白了。问题是你的&#34;计数&#34;变量为1.这意味着只会将一个Entry
添加到图表中 - 因此您只能看到一个Entry
。
单独添加更多x-values
不会在PieChart
上创建更多切片,因为切片上没有更多数据。