Обновления Android JSON Live

Я не могу понять, как получать живые обновления в Android от API JSON, который обновляется каждые 2-3 секунды. Мне удалось загрузить код JSON, а затем создать несколько массивов и записать их в журнал, но значения API-интерфейса json меняются каждые 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");
        }


    }



}

3 ответа

Решение
 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 каждые 5 секунд, получая обновленную строку JSON

Я думаю, тебе нужен какой-то механизм опроса. Посмотрите на уведомления Firebase, потому что вы могли бы сделать так, чтобы ваш код на стороне сервера отправлял http-запрос на сервер firebase, и это вызовет push-уведомление на стороне сервера для вашего приложения, в котором у вас будет получатель, который будет запускать процесс поиска

Если вы абсолютно уверены в том, что обновления происходят каждые 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);
Другие вопросы по тегам