0

我不知道如何从每 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");
        }


    }



}
4

3 回答 3

2
 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 秒调用一次 asynctask,从而获取更新的 JSON 字符串

于 2017-08-06T12:13:36.340 回答
1

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

于 2017-08-06T12:12:26.007 回答
0

如果您完全确定每 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);
于 2017-08-06T12:16:54.280 回答