Java Android调用api路由每隔几秒钟
我尝试每隔几秒钟调用一个api路由(方法)。该方法当前调用路由获取base64字符串,并将该字符串作为图像放在my imageview上。我怎么能经常每X秒打一次电话 当前该方法如下所示:Java Android调用api路由每隔几秒钟,java,android,api,retrofit,Java,Android,Api,Retrofit,我尝试每隔几秒钟调用一个api路由(方法)。该方法当前调用路由获取base64字符串,并将该字符串作为图像放在my imageview上。我怎么能经常每X秒打一次电话 当前该方法如下所示: public void getImageFromApi() { call = service.getStreamBase64(Utils.getApplicationname(), Utils.getStreamname()); call.enqueue(new retrofit2.Callb
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();
}
});
}
public void getImageFromApi(){
call=service.getStreamBase64(Utils.getApplicationname(),Utils.getStreamname());
call.enqueue(新的2.Callback(){
@凌驾
公共void onResponse(呼叫,改装2.响应){
if(response.issusccessful()){
试一试{
Log.e(“Tag”,response.body().string()+”);
String result=response.body().String();//保存base64字符串
字节[]decodedString=Base64.decode(结果,Base64.DEFAULT);
位图decodedByte=BitmapFactory.decodeByteArray(decodedString,0,decodedString.length);
//使imageview在相对布局中可见,它就在xml中。。。
RelativeLayout drawable=(RelativeLayout)findViewById(R.id.drawable);
可绘制.设置可见性(视图.可见);
drawable1.setImageBitmap(decodedByte);//将图像放在imageview上
}捕获(IOE异常){
e、 printStackTrace();
}
}否则{
if(response.code()==404){
Toasty.error(VideoChatActivity.this,“错误代码”+响应.Code()+“:无法访问API!”,Toast.LENGTH\u SHORT,true).show();
} }
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
Toasty.error(VideoChatActivity.this,“error.”,Toast.LENGTH_SHORT,true).show();
}
});
}
我需要每X秒调用一次,以便图像更新。试试这个
声明计时器
全局
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();
}
});
}
}
为此,您可以使用android处理程序
handler.postDelayed(handlerTask, 1000);
handlerTaskexecuted之后,在onCreate()中通过此代码再次调用它它将每隔10秒调用一次getImageFromApi()
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);
所以我只需要将我的方法“粘贴”到run方法中?我是否应该将前三行放在oncreate方法中?@Jaan declareTimer
globallyWhere我需要在oncreate方法中调用它吗?