2

我在客户端的 AsyncTask 中收到了 Android 服务器的响应。

问题是,如何强制客户端等待服务器响应?Reson 有时可能需要几分钟服务器才能响应。

更具体地说,如何检测 socket.getInputStream.read() 是否不包含任何内容,并强制客户端进入等待循环?

4

3 回答 3

4

我做了这样的代码

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());

                        }

希望这有帮助

于 2013-10-17T10:13:18.700 回答
0

您可以从 AsyncTask 向客户端发送广播。

  • 客户做他的工作。
  • 然后 AsyncTask 正在获取数据。
  • 当 AsyncTask 完成获取数据时,它会发送一个广播。
  • 客户端通过广播接收器接收广播,然后继续工作。-> 在互联网上搜索“Android BroadcastReceiver 教程”,你会找到很好的例子。

希望这会帮助你=)。

于 2013-10-17T10:10:43.753 回答
0

我已经停止使用 AsyncTask。相反,我使用带有 5 个固定线程池的 Android 的 ThreadPool 执行器:

ExecutorService executor = Executors.newFixedThreadPool(5);
        Runnable worker = new ServerThread();
        executor.execute(worker);

此代码位于客户端以及服务器端。优点是它比 AsyncTask 可靠得多。唯一的缺点是线程池的固定大小(但 AsyncTask 无论如何也受到限制)。

于 2013-11-04T10:55:16.333 回答