我正在开发一个需要执行GET请求以更新屏幕上的TextView的应用程序,现在我用一个按钮来执行此操作,但是我需要不断更新textview。最好的方法或做法是什么?这里的请求代码,按钮只需调用它,并将响应字符串放在TextView上。
protected void getEquiposHTTP() {
//Método GET HTTP al servicio Cloudant IBM para las credenciales dadas
final OkHttpClient client = new OkHttpClient();
Uri.Builder builder = new Uri.Builder();
builder.scheme("https")
.authority("data")
.appendPath("data")
.appendPath("data")
.appendPath("data")
.appendPath("data")
.appendPath("data")
.appendQueryParameter("data", "data");
String myUrl = builder.build().toString();
byte[] encoding = Base64.encodeBase64(("data" + ":" + "data").getBytes());
String encodedString = new String(encoding);
final Request request = new Request.Builder()
.url(myUrl)
.addHeader("Content-Type", "application/json")
.addHeader("Authorization", "Basic " + encodedString)
.addHeader("cache-control", "no-cache")
.build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
String mMessage = e.getMessage().toString();
call.cancel();
Log.e(TAG, "Problem at HTTP connection and call.cancel() executed");
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response.isSuccessful()) {
try {
addToListEquipos(response.body().string());
} catch (Exception e) {
Log.e(TAG, "Problem at response of HTTP conection, response.isSuccessful() = true then try{} fail");
}
}
}
});
}
答案 0 :(得分:0)
一种实现此目的的方法是运行一个线程,该线程不断以较小的时间间隔命中服务器以获取新数据并更新ui。这不是处理问题的适当方法,因为即使没有更新,应用程序也会不断反复访问服务器。
第二种方法(这是首选方法,但需要额外的努力)是使用类似Push-notification Firebase Realtime Database的方法。 或XMPP服务器。这样,您的服务器就会将新数据告知客户端应用。
从Firebase实时数据库的官方网站
Firebase实时数据库是一个云托管数据库。数据存储为JSON,并实时同步到每个连接的客户端。当您使用我们的iOS,Android和JavaScript SDK构建跨平台应用程序时,您的所有客户端都共享一个实时数据库实例,并自动接收具有最新数据的更新。