【问题标题】:MPAndroidChart inside Volley onResponseVolley onResponse 中的 MPAndroidChart
【发布时间】:2018-03-25 15:13:32
【问题描述】:

美好的一天, 这几天我一直在尝试解决这个问题。我正在尝试获取一些 json 数据并将其作为 MPandroidChart 库的饼图条目。如果我只是将它放在 onCreate 方法中并手动提供输入而不像这样:

pie_entry.add(new PieEntry(5, "test"));

但是,当我将它放在 volley 的 onResponse 方法中时,或者如果我尝试获取条目并将其发送到另一个方法然后将其添加到 pieChart,或者如果我尝试将条目添加到全局验证然后添加到图表它不起作用。这是我的代码:

String tag_String_reg = "reg_GetVoteResults";

    db = new SQLiteHandler(getApplicationContext());
    final HashMap<String, Object> myData;
    myData = db.getUserIDAndOrg();
    int userID = (int) myData.get(db.KEY_USER_ID);
    final String mOrg = (String) myData.get(db.KEY_USER_UID);

    StringRequest stringRequest = new StringRequest(Request.Method.POST,
            AppConfig.URL_GET_VOTERESULTS, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            try {
                JSONArray JArray = new JSONArray(response);
                for (int i = 0; i < JArray.length(); i++) {
                    JSONObject answerInfo = JArray.getJSONObject(i);
                    String answer = answerInfo.getString("answer");
                    float vote = answerInfo.getInt("answer_vote");
                    //vote_count = new ArrayList<>();
                    //anslist = new ArrayList<>();
                    //vote_count.add(vote);
                    //anslist.add(answer);
                    pie_entry.add(new PieEntry(vote, answer));
                }
                pie_entry.add(new PieEntry(5, "test"));
                pie_entry.add(new PieEntry(7, "test2"));
                Log.wtf("current name and int ", pie_entry.toString());
                //testing(pie_entry);
                //Log.wtf("final result: ", pe.toString());
                pieChart.setUsePercentValues(true);
                //Log.wtf("inside chart ", pe.toString());
                pieChart.getDescription().setEnabled(false);
                pieChart.setExtraOffsets(5, 10, 5, 5);
                pieChart.setDragDecelerationFrictionCoef(0.95f);
                pieChart.setDrawHoleEnabled(true);
                pieChart.setHoleColor(WHITE);
                pieChart.setTransparentCircleRadius(61f);

                PieDataSet dataSet = new PieDataSet(pie_entry, "Voting Results");
                dataSet.setSliceSpace(3f);
                dataSet.setSelectionShift(5f);
                dataSet.setColors(ColorTemplate.JOYFUL_COLORS);

                PieData data = new PieData((dataSet));
                data.setValueTextSize(10f);
                data.setValueTextColor(Color.YELLOW);

                pieChart.setData(data);
            } catch (JSONException e) {
                e.printStackTrace();
                Toast.makeText(getApplicationContext(), "Didnt work. Catch. "+ response.toString(), Toast.LENGTH_LONG).show();
                Log.d(TAG, "Didnt work. Error : "+e.toString());

            }

        }
    },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    if(error.getMessage()==null){
                        Toast.makeText(getApplicationContext(), " ERROR ", Toast.LENGTH_LONG).show();
                    }else{
                        Toast.makeText(getApplicationContext(), "Error. Please check your internet connection. ErrorListener. " + error.getMessage(), Toast.LENGTH_LONG).show();


                    }

                }
            }){
        @Override
        protected Map<String, String> getParams() {
            Map<String, String> params = new HashMap<String, String>();
            params.put("org_id", mOrg);
            params.put("question_id", question_id);
            return params;
        }
    };
    AppController.getInstance().addToRequestQueue(stringRequest, tag_String_reg);`

我很肯定 json 响应在我使用 Log.wtf 检查时有效 任何帮助将不胜感激。

另外,logcat 中没有错误,它只会显示我的 Log.wtf 的结果:

current name and int: [Entry, x: 0.0 y: 1.0, Entry, x: 0.0 y: 1.0, Entry, x: 0.0 y: 5.0, Entry, x: 0.0 y: 7.0]

【问题讨论】:

  • 任何帮助将不胜感激......
  • 如果您能添加返回的 JSON 结构,我将不胜感激...这可能会有所帮助。
  • @R.Zagórski 它的[{"answer":"test","answer_vote":"yes"},{"answer":"test2","answer_vote":"no"}]
  • 我真的不认为 json 是问题所在,我认为这与库本身以及它如何读取数据有关。开发者尚未在 github 上回复...

标签: android json android-volley mpandroidchart


【解决方案1】:

你没有忘记一个

pieChart.invalidate();

之后

pieChart.setData(data);

强制刷新图表?

【讨论】:

    【解决方案2】:

    pieChart.setData(data) 之后添加这些:

    pieChart.notifyDataSetChanged();
    pieChart.invalidate();
    

    当数据发生变化时,您需要像RecyclerView.Adapter那样通知图表视图底层数据的变化。

    【讨论】:

    • 是否有关于如何在创建图表时为其设置动画的文档?
    • 在此处查看文档:github.com/PhilJay/MPAndroidChart 会有选项。我没有使用动画,所以我不确定。
    • 也查看存储库的问题
    猜你喜欢
    • 2021-07-31
    • 2020-01-27
    • 1970-01-01
    • 2016-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多