2015-12-16 1 views
1

Я использую библиотеку для круговой диаграммы в приложении для Android, используя данные сервера mysql. Я использовал библиотеку волейбола для извлечения данных с сервера.Android MPAndroidChart получение частичной круговой диаграммы: получение данных с сервера с использованием библиотеки волейбола

я смог получить 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"}] 

Но в круговой диаграмме, я получаю только последнее значение т.е. «Transplated» с графом «1», остальные не в состоянии отобразить. Помогите мне, где я ошибаюсь в КОДЕ.

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; 





} 

ответ

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-variabletreecondition имеет символы. Затем вы всегда добавляете ту же строку в ваш массив x-values на каждой итерации. Если вы, например, имеете String «Лошадь», это приведет к массиву x-values длиной 5, содержащему String «Лошадь» пять раз.

Если это не то, что вы ожидаете, что ваш код, чтобы сделать, то я предлагаю вам проверить for-loops снова.

EDIT:

я получаю сейчас. Проблема в том, что ваша переменная «count» равна 1. Это означает, что на диаграмму будет добавлен только один Entry, и поэтому вы можете увидеть только один Entry.

Только добавление большего количества x-values не будет создавать больше фрагментов на PieChart, поскольку данных для срезов больше нет.

+0

Точно, что я хочу. Он работает только для одного фрагмента в моей последней итерации, но я хочу показать все из них. Положите меня. – Bharat

+0

Можете ли вы показать изображение того, как выглядит диаграмма? –

+0

Посмотрите на эту ссылку: https://drive.google.com/file/d/0B5oCnX38dLZ_S0lDeVdMU19IelE/view?usp=sharing – Bharat

 Смежные вопросы

  • Нет связанных вопросов^_^