Как мне обновлять мое приложение каждую секунду данными из JSON?

1

Я создал приложение, которое получает информацию из URL-адреса JSON и помещает это в текстовое представление и BarChart (API-интерфейс mikephil), но я хочу, чтобы он обновлялся каждую секунду. Вот моя MainActivity:

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);

                            String agv = jsonObject.getString("agv");
                            String binnenschip = jsonObject.getString("binnenschip");
                            String vrachtwagen = jsonObject.getString("vrachtwagen");
                            String zeeschip = jsonObject.getString("zeeschip");
                            String opslag = jsonObject.getString("opslag");
                            String trein = jsonObject.getString("trein");
                            String diversen = jsonObject.getString("diversen");

                            agvz = Integer.parseInt(agv);
                            binns = Integer.parseInt(binnenschip);
                            vracht = Integer.parseInt(vrachtwagen);
                            zschip = Integer.parseInt(zeeschip);
                            opsl = Integer.parseInt(opslag);
                            trei = Integer.parseInt(trein);
                            divers = Integer.parseInt(diversen);

                            ArrayList<BarEntry> entries = new ArrayList<>();
                            entries.add(new BarEntry(agvz, 0));
                            entries.add(new BarEntry(binns, 1));
                            entries.add(new BarEntry(vracht, 2));
                            entries.add(new BarEntry(zschip, 3));
                            entries.add(new BarEntry(opsl, 4));
                            entries.add(new BarEntry(trei, 5));
                            entries.add(new BarEntry(divers, 6));
                            BarDataSet dataset = new BarDataSet(entries, "Aantal containers");

                            ArrayList<String> labels = new ArrayList<String>();
                            labels.add("AGV");
                            labels.add("Binnenschip");
                            labels.add("Vrachtwagen");
                            labels.add("Zeeschip");
                            labels.add("Opslag");
                            labels.add("Trein");
                            labels.add("Diversen");


                            chart = new BarChart(mContext);

                            setContentView(chart);

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

                            chart.setDescription("");

                            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);

Вот мой xml, который идет вместе с ним:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/grafiek"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
android:orientation="vertical" >
<com.github.mikephil.charting.charts.BarChart
    android:id="@+id/chart"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_weight="1"/>
<Button
    android:id="@+id/parseJsongraph"
    android:text="get DATA"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_weight="0" />
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/json"/>
</RelativeLayout>

и, наконец: вот где я начинаю свою деятельность:

public class MainMenu extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.menu);
    final Button grafiek = (Button) findViewById(R.id.grafiek);
    final Button info = (Button) findViewById(R.id.info);

    grafiek.setOnClickListener(new View.OnClickListener() {


        public void onClick(View v) {
            grafiek.setBackgroundColor(Color.GRAY);
            new CountDownTimer(1000, 50) {

                @Override
                public void onTick(long arg0) {
                }

                @Override
                public void onFinish() {
                    grafiek.setBackgroundColor(Color.BLACK);
                }
            }.start();
            goToGrafiek();

        }

    });
    info.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {

            info.setBackgroundColor(Color.GRAY);
            new CountDownTimer(1000, 50) {

                @Override
                public void onTick(long arg0) {
                }

                @Override
                public void onFinish() {
                    info.setBackgroundColor(Color.BLACK);
                }
            }.start();
            goToInfo();

        }

    });
}
private void goToGrafiek() {

    Intent intent = new Intent(MainMenu.this, grafiek.class);
    startActivity(intent);
}
private void goToInfo(){
    Intent intents = new Intent(MainMenu.this, MainActivity.class);
    startActivity(intents);
}

}

  • 0
    используйте gcm для обновления данных
  • 0
    Я думаю, что вы можете использовать обработчик для этого
Показать ещё 5 комментариев
Теги:
handler
android-volley

1 ответ

0

Обработчик autoUpdateHandler;

Добавьте это внутри своего OnCreateView

autoUpdateHandler= new Handler

Это вызовет ваш udpateChartFromJson() каждые 1 секунду.

autoUpdateHandler.postDelayed(new Runnable() {
            @Override
            public void run()
            {
                //start the following method every 1 second. 
                  updateChartFromJson(); 
                  autoUpdateHandler.postDelayed(this,1000);

            }
        },1000);

Из этих данных будет обновляться в фоновом режиме, поскольку Volley обрабатывает свой сетевой вызов как асинхронную задачу.

Это как обычный метод. Объявление:

 public void  updateChartFromJson()
    {
    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);

                                String agv = jsonObject.getString("agv");
                                String binnenschip = jsonObject.getString("binnenschip");
                                String vrachtwagen = jsonObject.getString("vrachtwagen");
                                String zeeschip = jsonObject.getString("zeeschip");
                                String opslag = jsonObject.getString("opslag");
                                String trein = jsonObject.getString("trein");
                                String diversen = jsonObject.getString("diversen");

                                agvz = Integer.parseInt(agv);
                                binns = Integer.parseInt(binnenschip);
                                vracht = Integer.parseInt(vrachtwagen);
                                zschip = Integer.parseInt(zeeschip);
                                opsl = Integer.parseInt(opslag);
                                trei = Integer.parseInt(trein);
                                divers = Integer.parseInt(diversen);

                                ArrayList<BarEntry> entries = new ArrayList<>();
                                entries.add(new BarEntry(agvz, 0));
                                entries.add(new BarEntry(binns, 1));
                                entries.add(new BarEntry(vracht, 2));
                                entries.add(new BarEntry(zschip, 3));
                                entries.add(new BarEntry(opsl, 4));
                                entries.add(new BarEntry(trei, 5));
                                entries.add(new BarEntry(divers, 6));
                                BarDataSet dataset = new BarDataSet(entries, "Aantal containers");

                                ArrayList<String> labels = new ArrayList<String>();
                                labels.add("AGV");
                                labels.add("Binnenschip");
                                labels.add("Vrachtwagen");
                                labels.add("Zeeschip");
                                labels.add("Opslag");
                                labels.add("Trein");
                                labels.add("Diversen");


                                chart = new BarChart(mContext); 

                                setContentView(chart);

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

                                chart.setDescription(""); 

                                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);

    }
  • 0
    поэтому я должен поставить обработчик autoUpdateHandler; под моим публичным классом MainActivity? если так, куда я должен поместить функцию postDelayed?
  • 0
    включите функцию postDelayed в вашей основной деятельности onCreateView

Ещё вопросы

Сообщество Overcoder
Наверх
Меню