2017-08-06 4 views
0

2〜3秒ごとに更新されるjson apiからアンドロイドでライブアップデートを取得する方法がわかりません。私はJSONコードをダウンロードしていくつかの配列を作成してログに記録しましたが、JSON APIの値は2〜3秒ごとに変更されています。JSONをどのようにダウンロードするのか分かりません。あなたの助けを前もってありがとう!Android JSONライブアップデート

@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

問題が解決したと思われる場合は、緑色のチェックマークをクリックして「受け入れ済み」とマークしてください。これはまだ答えがない年上のSOに焦点を当てるのに役立ちます。 –

答えて

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

これは、あなたが定期的にAsyncTaskは、メソッドを実行する呼び出すことができ、すべての2~3秒を発生しますが、アップデートに関する絶対的に確信している場合ので、更新JSON文字列

+0

こんにちは@ user3450385 "5秒ごとに失敗しました" - user3450385 1時間前。 asyncTaskは、ファクトリを使用して新しいインスタンスを取得する必要がある場合にのみ実行できます。また、起こった失敗を説明できますか? –

0

あなたはポーリングメカニズムのいくつかの種類が必要だと思っています。あなたができることは、あなたのサーバー側のコードがfirebaseサーバーにHTTPリクエストをポストして、検索プロセスをトリガーする受信機を持つサーバーサイドのプッシュ通知をアプリケーションに送り込ませることであるから、Firebase通知を見てください。

+0

私はfirebaseを使い始めました。ファイアーベースサーバーのmylinkからJSONをストーリーすることを考えていました。どうすればいいですか? –

0

をフェッチし、5秒ごとにasynctaskを呼び出します。これは非常に良い習慣とはみなされませんが、あなたの仕事を完了させることができます。これらの行の何か:

private Timer autoRefresh; 

autoRefresh=new Timer(); 
    autoRefresh.schedule(new TimerTask() { 
     @Override 
     public void run() { 
      runOnUiThread(new Runnable() { 
       public void run() { 
        String result = null; 
        try{ 
        result = task.execute("thelinkIuse").get(); 
        } catch (InterruptedException | ExecutionException e) { 
        e.printStackTrace(); 
} 

       } 
      }); 
     } 
    }, 0, your_time_in_miliseconds);