gpt4 book ai didi

Android MPAndroidChart 获取部分饼图 : retrieving data from server using volley library

转载 作者:行者123 更新时间:2023-11-30 01:42:20 31 4
gpt4 key购买 nike

我正在使用 MPAndroidChart我的 android 应用程序中的饼图库,使用 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"}]

但在饼图中,我只得到最后一个值,即计数为“1”的“Transplated”,仍然无法显示。请帮助我在代码中出错的地方。

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;





}

最佳答案

我 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 循环 的迭代次数与 count 变量中指定的次数相同。然后将 count 变量添加到 Entry。这将导致每个切片具有相同的值和相同的大小,完全独立于您的数据。

  • 您的第二个 for-loop 的迭代次数与 String-variable treecondition 的字符数一样多。然后,您总是在每次迭代中将相同的字符串添加到您的 x-values 数组中。例如,如果您有一个 String“Horse”,这将生成一个长度为 5 的 x-values 数组,其中包含 String“Horse”五次。

如果那不是您希望您的代码执行的操作,那么我建议您再次检查您的for-loops

编辑:

我现在明白了。问题是您的“计数”变量为 1。这意味着只有一个 Entry 将被添加到图表中 - 因此您只能看到一个 Entry

单独添加更多 x 值 不会在 PieChart 上创建更多切片,因为切片没有更多数据。

关于Android MPAndroidChart 获取部分饼图 : retrieving data from server using volley library,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34306012/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com