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

Я создал приложение, которое получает информацию из 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);
}

}

1

Решение

Обработчик 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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]