【问题标题】:Android: Wait for server to respondAndroid:等待服务器响应
【发布时间】:2013-10-25 17:56:54
【问题描述】:

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

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

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

【问题讨论】:

    标签: android sockets android-asynctask client-server client


    【解决方案1】:

    我做了这样的代码

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

    希望对你有所帮助

    【讨论】:

      【解决方案2】:

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

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

      希望这对你有帮助 =)。

      【讨论】:

      • 感谢 Amit 和 Tim,但 Tim 的解决方案更像我想要的。蒂姆,我的 AsyncTask 在客户端。那么,广播接收器可以与 AsyncTask 一起使用吗?
      • 你可以从任何你想要的地方发送广播(如果你有一个可以发送它的上下文)。你只需要注册一个广播接收器,它会接收广播,然后对它做出反应。
      【解决方案3】:

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

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

      此代码位于客户端和服务器端。优点是它比 AsyncTask 可靠得多。唯一的缺点是线程池的大小是固定的(但 AsyncTask 也有限制)。

      【讨论】:

        猜你喜欢
        • 2017-06-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-20
        • 2012-04-09
        • 2020-12-30
        • 1970-01-01
        相关资源
        最近更新 更多