我在客户端的AsyncTask中获取Android服务器的响应。Android:等待服务器响应
问题是,我该如何强制客户端等待服务器响应? Reson有时可能需要几分钟的时间才能响应服务器。
更具体地说,如何检测socket.getInputStream.read()是否不包含任何内容,并强制客户端进入等待循环?
我在客户端的AsyncTask中获取Android服务器的响应。Android:等待服务器响应
问题是,我该如何强制客户端等待服务器响应? Reson有时可能需要几分钟的时间才能响应服务器。
更具体地说,如何检测socket.getInputStream.read()是否不包含任何内容,并强制客户端进入等待循环?
您可以从AsyncTask向客户端发送广播。
希望这会帮助你=)。
我已经做出了这样的代码
boolean status;
// isURLReachable is the method to check server is available or not
status = isURLReachable(context);
if (status == true) {
h.post(new Runnable() {
@Override
public void run() {
checkLoginDialogue
.setTitle("Authenticating User");
}
});
handlerForLogin.sendMessage(handlerForLogin
.obtainMessage());
} else {
h.post(new Runnable() {
@Override
public void run() {
if (checkLoginDialogue.isShowing()) {
checkLoginDialogue.dismiss();
}
}
});
System.out.println("status IS " + status);
handler.sendMessage(handler.obtainMessage());
}
希望这有助于
我一直在使用的AsyncTask停止。相反,我使用Android的ThreadPool执行器,其固定线程池为5:
ExecutorService executor = Executors.newFixedThreadPool(5);
Runnable worker = new ServerThread();
executor.execute(worker);
此代码位于客户端以及服务器端。优点是它比AsyncTask更可靠。唯一的缺点是线程池的固定大小(但AsyncTask也是有限的)。
谢谢Amit&Tim,但是Tim的解决方案更像我想要的。蒂姆,我的AsyncTask在客户端。那么,广播接收器可以和AsyncTask一起使用吗? – Abhishek
您可以随意发送广播(如果您有可发送的上下文)。你只需要注册一个广播接收器,它将接收广播并对其作出反应。 – Tim