Android JSON 实时更新

Android JSON Live updates

我不知道如何从每 2-3 秒更新一次的 json api 中获取实时更新 android。我已经设法下载 JSON 代码,然后创建一些数组并记录它们,但是 json api 中的值每 2-3 秒更改一次,我不知道如何重新下载 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");
        }


    }



}

我认为您需要某种轮询机制。查看 Firebase 通知,因为你可以做的是让你的服务器端代码 post 向 firebase 服务器发出一个 http 请求,这将触发一个服务器端推送通知到你的应用程序,你将有一个接收器将触发检索过程

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

这将每 5 秒调用一次异步任务,从而获取更新后的 JSON 字符串

如果您完全确定更新每 2-3 秒发生一次,那么您可以定期调用 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);