android - 动态 MpAndroidChart 不工作

标签 android mpandroidchart

我正在使用 mpandroidchart Barchart 从网络响应中绘制数据,但是图表只绘制了一个点,但是响应超过了 10 个点 如何绘制这样的动态图表?

使用来自网络的响应我需要在条形图中绘制多个点帮助我使用以下代码

网络响应

[{"date(answerDate)":"2015-11-21","sum(answerSelectedCode)":"23"},{"date(answerDate)":"2015-11-23","sum (answerSelectedCode)":"21"}]

Java代码

import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.preference.PreferenceManager;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ScrollView;
import android.widget.TextView;
import android.widget.Toast;

import com.github.mikephil.charting.charts.BarChart;
import com.github.mikephil.charting.charts.LineChart;
import com.github.mikephil.charting.components.Legend;
import com.github.mikephil.charting.components.XAxis;
import com.github.mikephil.charting.components.YAxis;
import com.github.mikephil.charting.data.BarData;
import com.github.mikephil.charting.data.BarDataSet;
import com.github.mikephil.charting.data.BarEntry;
import com.github.mikephil.charting.utils.ColorTemplate;


import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.IOException;
import java.net.MalformedURLException;
import java.util.ArrayList;
import java.util.List;

       protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_profiles);
        toolbar = (Toolbar) findViewById(R.id.appBarSecond);
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        this.setTitle("Profile");

        BarChart chart = (BarChart) findViewById(R.id.chart);
        BarData data = new BarData(getXAxisValues(), getDataSet());
        chart.setData(data);
        YAxis leftAxis  = chart.getAxisLeft();
        YAxis rightAxis  = chart.getAxisRight();
        rightAxis.setAxisMaxValue(3);
        rightAxis.setLabelCount(3);

        leftAxis.setAxisMaxValue(3);
        leftAxis.setLabelCount(3);

        chart.setDescription("Productivity");
        chart.setBackgroundColor(Color.TRANSPARENT); //set whatever color you prefer
        chart.setDrawGridBackground(false);
        chart.animateXY(2000, 2000);
        chart.invalidate();



    }


      private ArrayList<BarDataSet> getDataSet() {
        ArrayList<BarDataSet> dataSets = null;

        final ArrayList<BarEntry> valueSet2 = new ArrayList<>();

        final Intent intent = getIntent();
        final String getUserId =  intent.getStringExtra("UserId");
        new Thread(new Runnable() {
            public void run() {
                HttpRequest req = null;
                try {
                    req = new HttpRequest("http://xyz.abc.in/response.php");
                    final String response = req.preparePost().withData("answerUserId="+getUserId).sendAndReadString();
                    System.out.println("Response"+response);

                    runOnUiThread(new Runnable() {
                        public void run() {
                            try {

                                JSONArray myObjects = new JSONArray(response);

                                for (int j = 0; j < myObjects.length(); j++) {
                                    JSONObject jsonobject = myObjects.getJSONObject(j);
                                    String Date = jsonobject.getString("date(answerDate)");
                                    Integer Total = Integer.valueOf(jsonobject.getString("sum(answerSelectedCode)"));


                                    valueSet2.add(new BarEntry(Total,j));
                                }

                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
                        }

                    });


                } catch (MalformedURLException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }).start();

        BarDataSet barDataSet2 = new BarDataSet(valueSet2, "Productivity");
        barDataSet2.setColor(Color.parseColor("#8BC34A"));
        dataSets = new ArrayList<>();
        dataSets.add(barDataSet2);
        return dataSets;
    }

     private ArrayList<String> getXAxisValues() {
        final ArrayList<String> xAxis = new ArrayList<>();
        final Intent intent = getIntent();
        final String getUserId =  intent.getStringExtra("UserId");
        new Thread(new Runnable() {
            public void run() {
                HttpRequest req = null;
                try {
                    req = new HttpRequest("http://abc.xre.in/response.php");
                    final String response = req.preparePost().withData("answerUserId="+getUserId).sendAndReadString();


                    JSONArray myObjects = null;
                    try {
                        myObjects = new JSONArray(response);

                        for (int ji = 0; ji < myObjects.length(); ji++) {
                            JSONObject jsonobject = myObjects.getJSONObject(ji);
                            final String Date = jsonobject.getString("date(answerDate)");
                            System.out.println("Date Response =====>: " + Date);
                            System.out.println("Loop "+ji+" executed");
                            xAxis.add(Date);
                        }

                    } catch (JSONException e) {
                        e.printStackTrace();
                    }






                } catch (MalformedURLException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }).start();



        return xAxis;

    }

最佳答案

您需要在 getDataSet 函数的 for 循环中每次调用 notifyDataSetChangedinvalidate

关于android - 动态 MpAndroidChart 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33885867/

相关文章:

android - 如何在 MPAndroidChart 中为单线图设置不同的样式?

android - NativeScript - 静态 XML/JS/CSS 是否可以在可分发的设备特定文件中加密

android - 使用 HttpURLConnection 和 HttpsURLConnection 连接到 https?

android - 是否可以更改 xml 中 TextClock View 显示的语言

android - MPAndroidChart - X 轴仅在顶部绘制标签

android - MPAndroidChart - getFormattedValue 方法中的错误值。他们来自哪里?

java - MPAndroidChart 未在 fragment 中显示

java - 安卓。如何克隆可编辑

java - 检测开发者设置 'do not keep activities'

android - 停止在 MPAndroidChart 中突出显示条形颜色?