Маршрут API вызова Android каждые несколько секунд

Я пытаюсь вызвать api-маршрут (метод) каждые несколько секунд. Метод в настоящее время вызывает маршрут, получает строку base64 и помещает строку как изображение в мое изображение. Как я могу постоянно вызывать это каждые Х секунд.

В настоящее время метод выглядит так:

public void getImageFromApi() {
    call = service.getStreamBase64(Utils.getApplicationname(), Utils.getStreamname());
    call.enqueue(new retrofit2.Callback<ResponseBody>() {
        @Override
        public void onResponse(Call<ResponseBody> call, retrofit2.Response<ResponseBody> response) {
            if (response.isSuccessful()) {
                try {
                    Log.e("Tag", response.body().string() + " ");
                    String result = response.body().string(); // holds the base64 string
                    byte[] decodedString = Base64.decode(result, Base64.DEFAULT);
                    Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);

                    // Make the imageview visible inside the relative layout, it is GONE inside the xml ...
                    RelativeLayout drawable = (RelativeLayout) findViewById(R.id.drawable);
                    drawable.setVisibility(View.VISIBLE);

                    drawable1.setImageBitmap(decodedByte); // put image on imageview
                } catch (IOException e) {
                    e.printStackTrace();
                }
            } else {
                if (response.code() == 404) {
                    Toasty.error(VideoChatActivity.this, "Error Code " + response.code() + ": Cannot not access the API!", Toast.LENGTH_SHORT, true).show();
                }                 }
        }

        @Override
        public void onFailure(Call<ResponseBody> call, Throwable t) {
            Toasty.error(VideoChatActivity.this, "Error.", Toast.LENGTH_SHORT, true).show();
        }
    });
}

Мне нужно вызывать это каждые X секунд, чтобы изображение обновлялось.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
6
0
443
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Попробуй это

объявить Timer глобальным

Timer timer;

добавьте этот код в метод onCreate()

timer = new Timer();
timer.scheduleAtFixedRate(new RemindTask(), 0, 3000); // delay in seconds

создайте новый класс, подобный этому

private class RemindTask extends TimerTask {


        @Override
        public void run() {
            runOnUiThread(new Runnable() {
                public void run() {

                    // call your method here

                   getImageFromApi();
                }
            });

        }
    }

Так что мне просто нужно «вставить» мой метод в метод выполнения?

Jaan 27.03.2018 10:42

Должен ли я поместить три верхние строки в свой метод oncreate?

Jaan 27.03.2018 10:44

@Jaan объявить Timer timer; глобально

AskNilesh 27.03.2018 11:18

Для этого можно использовать обработчик Android.

handler.postDelayed(handlerTask, 1000); 

после того, как handlerTaskexвыполнится, вызовите его снова

Где мне нужно вызвать это только в методе oncreate?

Jaan 27.03.2018 11:18

после этого кода в onCreate (); он будет вызывать getImageFromApi () каждые 10 секунд

 long SECOND_IN_MILLI = 10000//10 seconds
     final Handler timerHandler = new Handler();
                                     final Runnable timerRunnable = new Runnable() {
                                         @Override
                                         public void run() {
                                             getImageFromApi();
                                            timerHandler.postDelayed(this, SECOND_IN_MILLI);
                                         }
                                     };
                                     timerHandler.postDelayed(timerRunnable, SECOND_IN_MILLI);

Другие вопросы по теме