2013-10-17 88 views
2

我在客户端的AsyncTask中获取Android服务器的响应。Android:等待服务器响应

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

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

回答

0

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

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

希望这会帮助你=)。

+0

谢谢Amit&Tim,但是Tim的解决方案更像我想要的。蒂姆,我的AsyncTask在客户端。那么,广播接收器可以和AsyncTask一起使用吗? – Abhishek

+0

您可以随意发送广播(如果您有可发送的上下文)。你只需要注册一个广播接收器,它将接收广播并对其作出反应。 – Tim

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

         } 

希望这有助于

0

我一直在使用的AsyncTask停止。相反,我使用Android的ThreadPool执行器,其固定线程池为5:

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

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