Я пытаюсь вызвать 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 секунд, чтобы изображение обновлялось.




Попробуй это
объявить 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();
}
});
}
}
Должен ли я поместить три верхние строки в свой метод oncreate?
@Jaan объявить Timer timer; глобально
Для этого можно использовать обработчик Android.
handler.postDelayed(handlerTask, 1000);
после того, как handlerTaskexвыполнится, вызовите его снова
Где мне нужно вызвать это только в методе oncreate?
после этого кода в 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);
Так что мне просто нужно «вставить» мой метод в метод выполнения?