Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 条形图未显示正确的动态数据_Java_Android_Bar Chart_Mpandroidchart - Fatal编程技术网

Java 条形图未显示正确的动态数据

Java 条形图未显示正确的动态数据,java,android,bar-chart,mpandroidchart,Java,Android,Bar Chart,Mpandroidchart,我已经实现了条形图,其中数据将动态出现。在我的代码中,数据来自服务器,但图形显示的数据不正确,它只显示了-1、0和1位置。我正在使用条形图的com.github.PhilJay:MPAndroidChart:v2.2.4库 下面是我的片段类 public class MonthsFragment extends Fragment { public String user_id; // Session Manager Class UserSessionManager session; BarC

我已经实现了条形图,其中数据将动态出现。在我的代码中,数据来自服务器,但图形显示的数据不正确,它只显示了-1、0和1位置。我正在使用条形图的
com.github.PhilJay:MPAndroidChart:v2.2.4

下面是我的片段类

public class MonthsFragment extends Fragment {

public String user_id;
// Session Manager Class
UserSessionManager session;

BarChart chartUniqueVisitors;
ArrayList<BarEntry> BARENTRY ;
ArrayList<String> BarEntryLabels ;
BarDataSet Bardataset ;
BarData BARDATA ;

public float jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec;

public MonthsFragment(){}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view= inflater.inflate(R.layout.fragment_unique_visitors, container, false);

    session = new UserSessionManager(getContext());
    session.checkLogin();
    // get user data from session
    HashMap<String, String> user = session.getUserDetails();
    user_id = user.get(UserSessionManager.KEY_USER_ID);
    return view;
}

    private void getDataForBusinessAddress() {
        String URL ="XYZ.php?username="+user_id;
        StringRequest stringRequest = new StringRequest(Request.Method.POST,URL, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                Log.e("Response montghly____",response);

                JSONArray jsonarray = null;
                try {
                    jsonarray = new JSONArray(response);
                    for (int i = 0; i < jsonarray.length(); i++) {
                        JSONObject jsonobject = jsonarray.getJSONObject(i);
                        jan = Float.parseFloat(jsonobject.getString("Jan"));
                        feb = Float.parseFloat(jsonobject.getString("Feb"));
                        mar = Float.parseFloat(jsonobject.getString("Mar"));
                        apr = Float.parseFloat(jsonobject.getString("Apr"));
                        may = Float.parseFloat(jsonobject.getString("May"));
                        jun = Float.parseFloat(jsonobject.getString("Jun"));
                        jul = Float.parseFloat(jsonobject.getString("Jul"));
                        aug = Float.parseFloat(jsonobject.getString("Aug"));
                        sep = Float.parseFloat(jsonobject.getString("Sep"));
                        oct = Float.parseFloat(jsonobject.getString("Oct"));
                        nov = Float.parseFloat(jsonobject.getString("Nov"));
                        dec = Float.parseFloat(jsonobject.getString("Dece"));
                        AddValuesToBARENTRY(jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec);
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }

            }
        },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Toast.makeText(getContext(),error.getMessage().toString(),Toast.LENGTH_LONG).show();
                    }
                });

        RequestQueue requestQueue = Volley.newRequestQueue(getContext());
        requestQueue.getCache().clear();
        requestQueue.add(stringRequest);
    }

public void onViewCreated(View v, Bundle savedInstanceState) {
    super.onViewCreated(v, savedInstanceState);
    chartUniqueVisitors = (BarChart) v.findViewById(R.id.chartUniqueVisitors);

    getDataForBusinessAddress();

    BARENTRY = new ArrayList<>();
    BarEntryLabels = new ArrayList<String>();
    AddValuesToBarEntryLabels();
    Bardataset = new BarDataSet(BARENTRY, "Projects");
    BARDATA = new BarData(BarEntryLabels, Bardataset);
    Bardataset.setColors(ColorTemplate.COLORFUL_COLORS);
}
AddValuesToBarEntryLabels函数用于在Barchat上添加值

public void AddValuesToBarEntryLabels(){
    BarEntryLabels.add("Jan");
    BarEntryLabels.add("Feb");
    BarEntryLabels.add("Mar");
    BarEntryLabels.add("Apr");
    BarEntryLabels.add("May");
    BarEntryLabels.add("Jun");
    BarEntryLabels.add("Jul");
    BarEntryLabels.add("Aug");
    BarEntryLabels.add("Sep");
    BarEntryLabels.add("Oct");
    BarEntryLabels.add("Nov");
    BarEntryLabels.add("Dec");
  }
 }

输出是这样的,格式不正确谢谢

问题在于填写BarEntry

BARENTRY.add(new BarEntry(jan, 0));
BARENTRY.add(new BarEntry(feb, 1));
应该是:

BARENTRY.add(new BarEntry(0, jan));
BARENTRY.add(new BarEntry(1, feb));
第一个值索引(x值)第二个值是实际值-杆的高度(来自服务器)

在onCreate方法上也调用一次
setData
,现在在循环中调用它,它被多次调用

chartUniqueVisitors.setData(BARDATA);
这是我从你的数据中得到的


谢谢您的回复,先生,但现在图表显示为空。我已经更新了我的答案,请参见我如何更改代码的屏幕截图:我复制了您的代码,按照我在屏幕上指出的方式填充了数据,并将setData移到最后,结果显示出来。我认为您正在添加静态数据,这就是为什么它显示在图表上的原因。在我的例子中,我使用的是动态数据。我使用了和你们说的一样的东西,它是静态的,因为我不能调试你们的服务器数据:)我根据你们发布的内容给你们提供了解决方案。如果问题出在数据上,您应该调试itI used debug,并且响应数据即将到来
chartUniqueVisitors.setData(BARDATA);