2017-08-06 5 views
0

Ich kann nicht herausfinden, wie man Live-Updates in Android von einem JSON API, das alle 2-3 Sekunden aktualisiert. Ich habe es geschafft, den JSON-Code herunterzuladen und dann einige Arrays zu erstellen und sie zu protokollieren, aber die Werte aus der JSON-API ändern sich alle 2-3 Sekunden und ich habe keine Ahnung, wie ich den JSON erneut herunterladen soll. Vielen Dank im Voraus für Ihre Hilfe!Android JSON Live-Updates

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    DownloadTask task = new DownloadTask(); 

    String result = null; 
    try{ 
     result = task.execute("thelinkIuse").get(); 
    } catch (InterruptedException | ExecutionException e) { 
     e.printStackTrace(); 
    } 

} 


public class DownloadTask extends AsyncTask<String, Void, String>{ 


    @Override 
    protected String doInBackground(String... urls) { 

     String result = ""; 
     URL url; 
     HttpURLConnection urlConnection = null; 


     while (true) { 
      try { 
       url = new URL(urls[0]); 
       urlConnection = (HttpURLConnection) url.openConnection(); 
       InputStream in = urlConnection.getInputStream(); 
       InputStreamReader reader = new InputStreamReader(in); 
       int data = reader.read(); 
       while (data != -1) { 
        char current = (char) data; 
        result += current; 
        data = reader.read(); 
       } 
       return result; 
      } catch (IOException e) { 
       e.printStackTrace(); 
       return "Failed"; 
      } 
     } 
    } 


    @Override 
    protected void onPostExecute(String result) { 
     super.onPostExecute(result); 


     try { 
      JSONArray arr = new JSONArray(result); 

      for (int i = 0; i < arr.length(); i++) { 

       JSONObject jsonPart = arr.getJSONObject(i); 
       symbols.add(jsonPart.getString("symbol")); 
       bids.add(jsonPart.getString("bid")); 
       asks.add(jsonPart.getString("ask")); 


      } 

      Log.i("Symbols", String.valueOf(symbols)); 
      Log.i("Bids", String.valueOf(bids)); 
      Log.i("Asks", String.valueOf(asks)); 


     } catch (JSONException e) { 
      e.printStackTrace(); 
      Log.i("failed", "failed"); 
     } 


    } 



} 
+0

Wenn Sie glauben, dass eine Antwort das Problem gelöst hat, markieren Sie es bitte als "akzeptiert", indem Sie auf das grüne Häkchen klicken. Dies hilft, den Fokus auf ältere SO zu richten, die immer noch keine Antworten haben. –

Antwort

1
Timer timer = new Timer(); 
     timer.scheduleAtFixedRate(new TimerTask() { 
      @Override 
      public void run() { 
       try{ 
        result =new DownloadTask().execute("thelinkIuse").get(); 
       } catch (InterruptedException | ExecutionException e) { 
        e.printStackTrace(); 
       } 
      } 
     },0,5000); 

Dies wird der AsyncTask alle 5 Sekunden aufrufen, damit die aktualisierte JSON-String holen

+0

hi @ user3450385 "es protokolliert alle 5 Sekunden fehlgeschlagen" - user3450385 vor 1 Stunde. Eine asyncTask kann nur ausgeführt werden, wenn Sie eine Factory zum Abrufen einer neuen Instanz verwenden möchten. Kannst du auch erklären, was passiert ist? –

0

Ich denke, Sie brauchen eine Art Polling-Mechanismus. Sehen Sie sich Firebase Notifications an, da Ihr serverseitiger Code eine http-Anfrage an den Firebase-Server senden kann und eine serverseitige Push-Benachrichtigung an Ihre App auslöst, in der Sie einen Empfänger haben, der den Abrufprozess auslöst

+0

Ich begann mit Firebase. Ich dachte daran, JSON von meinem Link auf dem Firebase-Server zu erzählen. Hast du eine Idee, wie ich das machen kann? –

0

Wenn Sie absolut sicher sind, über die Updates alle 2-3 Sekunden auftreten, dann können Sie in regelmäßigen Abständen die AsyncTask Methode ausführen aufrufen. Dies wird nicht als sehr gute Praxis angesehen, kann aber Ihre Arbeit erledigen. Etwas in diesen Zeilen: