@Cyrill4505

Получение данных с сервера Android без нажатий на кнопку, как организовать?

Всем привет. Подскажите пожалуйста, как ( и какой либрой) организовать получение данных с сервера без нажатий на кнопку в андроид приложении. На данный момент есть приложение которое получает данные с сервера по нажатию на кнопку. Хотелось бы от этого избавиться и получать данные например раз в n секунд. Использую OkHttp.
вот пример моего говнокода)
public class MainActivity extends AppCompatActivity {

    Button button;
    TextView getTemperature;
    private OkHttpClient client;

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

        button = findViewById(R.id.submitButton);
        getTemperature = findViewById(R.id.getTemperature);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                getWeb();
            }
        });
        client = new OkHttpClient();
    }

    private void getWeb(){
        Request request = new Request.Builder().url("http://192.168.0.23:3000").build();
        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        getTemperature.setText("в работе возникла ошибка, скорее всего отсутствует интернет");
                    }
                });
            }

            @Override
            public void onResponse(Call call, final Response response) {
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        try{
                            getTemperature.setText(response.body().string());
                        }
                       catch (IOException ioe){
                           getTemperature.setText("r");
                       }
                    }
                });
            }
        });
    }
}
  • Вопрос задан
  • 994 просмотра
Решения вопроса 1
RATlius
@RATlius
Разработчик Android
Создать фоновый таймер для загрузки данных:
AsyncLoaderTimer bgTimer = new AsyncLoaderTimer(); //новое поле класса MainActivity

    class AsyncLoaderTimer extends AsyncTask<Long, Void, Void> {//класс фонового таймера

        @Override
        protected Void doInBackground(Long... longs) {
            while (isCancelled()) {
                try {
                    Thread.sleep(longs[0]);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                publishProgress();
            }
            return null;
        }

        @Override
        protected void onProgressUpdate(Void... values) {
            getWeb();
        }
    }

    @Override
    protected void onStart() {
        super.onStart();
        bgTimer.execute(2_000L); //интервал миллисекунд
    }

    @Override
    protected void onStop() {
        super.onStop();
        bgTimer.cancel(false);
    }


То как Вы хотите реализовать обновление данных - не лучшая практика. Вам лучше посмотреть как реализовывать такие клиент-серверные решения.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы