android 齐射和 JSON

android with volley and JSON

最近我一直在开发我被分配到的应用程序。 我制作了一个文本视图来显示我从 JSON url 从 raspberry pi 加载的一些数据(我知道这很愚蠢,但我不在乎)。 现在我想在一个叫做 'barchart' 的东西中显示相同的数据。这是一个著名的 api,由 mikephil 制作(如果您想知道,可以使用“https://github.com/PhilJay/MPAndroidChart”)。 我似乎无法让它工作。我得到了应用程序 运行,它可以显示图形,但它没有用数据填充它,它保持在 0.0...

现在我的问题来了:谁能告诉我我做错了什么?

public class grafiek extends Activity {

//public static final String JSON_URL = "http://myip/test.php";
//public static String agv = "";
//public static String binnenschip = "";
/*public static String vrachtwagen;
public static String zeeschip;
public static String opslag;
public static String trein;
public static String diversen;*/

public static int agvz;
public static int binns;
/*public static int vracht;
public static int zschip;
public static int opsl;
public static int trei;
public static int divers;*/
//String aantalAgv = MainActivity.agv;
//String aantalBinnenschip = MainActivity.binnenschip;
//String aantalVrachtwagen=MainActivity.vrachtwagen;
//String aantalZeeschip=MainActivity.zeeschip;
//String aantalOpslag=MainActivity.opslag;
//String aantalTrein=MainActivity.trein;
//String aantalDiversen=MainActivity.diversen;
int counter = 0;
String loginURL="http://myip/test.php";
String datas = "";
RequestQueue requestQueue;
BarChart chart;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.grafiek);
    if(savedInstanceState!=null){
        Log.d("STATE", savedInstanceState.toString());
    }
    requestQueue = Volley.newRequestQueue(this);
    chart = (BarChart) findViewById(R.id.chart);
    JsonObjectRequest jor = new JsonObjectRequest(Request.Method.GET, loginURL, null,
            new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {

                    try{

                        JSONArray ja = response.getJSONArray("result");
                        for(int i=0; i < ja.length(); i++){

                            JSONObject jsonObject = ja.getJSONObject(i);

                            // int id = Integer.parseInt(jsonObject.optString("id").toString());


                            String agv = jsonObject.getString("agv");
                            String binnenschip = jsonObject.getString("binnenschip");

                            agvz = Integer.parseInt(agv);
                            binns = Integer.parseInt(binnenschip);


                        }

                    }
                    catch(JSONException e){
                        e.printStackTrace();
                    }
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Log.e("Volley","Error");

                }
            }
    );
    requestQueue.add(jor);
    ArrayList<BarEntry> entries = new ArrayList<>();
    entries.add(new BarEntry(agvz, 0));
    entries.add(new BarEntry(binns, 1));
    BarDataSet dataset = new BarDataSet(entries, "Aantal containers");

    ArrayList<String> labels = new ArrayList<String>();
    labels.add("AGV");
    labels.add("Binnenschip");

    BarChart chart = new BarChart(this);
    setContentView(chart);

    BarData data = new BarData(labels, dataset);
    chart.setData(data);

    chart.setDescription("Aantal containers per platform");

    dataset.setColors(ColorTemplate.COLORFUL_COLORS);
    if(counter == 0) {
        chart.animateY(2500);
        counter++;
    }

}

如果有人能帮我解决这个问题,那就太好了!

由于Volley是异步的,所以你应该更新你的代码如下(请注意// MOVE HERE...):

           JsonObjectRequest jor = new JsonObjectRequest(Request.Method.GET, loginURL, null,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {

                        try{

                            JSONArray ja = response.getJSONArray("result");
                            for(int i=0; i < ja.length(); i++){

                                JSONObject jsonObject = ja.getJSONObject(i);

                                // int id = Integer.parseInt(jsonObject.optString("id").toString());


                                String agv = jsonObject.getString("agv");
                                String binnenschip = jsonObject.getString("binnenschip");

                                agvz = Integer.parseInt(agv);
                                binns = Integer.parseInt(binnenschip);

                                // MOVE HERE...
                                ArrayList<BarEntry> entries = new ArrayList<>();
                                entries.add(new BarEntry(agvz, 0));
                                entries.add(new BarEntry(binns, 1));
                                BarDataSet dataset = new BarDataSet(entries, "Aantal containers");

                                ArrayList<String> labels = new ArrayList<String>();
                                labels.add("AGV");
                                labels.add("Binnenschip");

                                BarChart chart = new BarChart(this);
                                setContentView(chart);

                                BarData data = new BarData(labels, dataset);
                                chart.setData(data);

                                chart.setDescription("Aantal containers per platform");

                                dataset.setColors(ColorTemplate.COLORFUL_COLORS);
                                if(counter == 0) {
                                    chart.animateY(2500);
                                    counter++;
                                }
                            }

                        }
                        catch(JSONException e){
                            e.printStackTrace();
                        }
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Log.e("Volley", "Error");

                    }
                }
        );
        requestQueue.add(jor);