android是挂起而android没有找到连接

时间:2011-02-21 09:53:31

标签: android

我正在创建一个Android应用程序但是找不到(如果?)服务器,它会挂起工具包(SDK /模拟器?)。 我附上了我的登录代码。请帮我找到解决方案。我只是想要,如果服务器不可用,我的应用程序将保持登录页面而不会自行挂起。

当我调试我的代码时,我没有获得httpResponse的值,并且在此行之后

HttpResponse httpResponse = httpclient.execute(httpPost);

问题发生了

public String login(String userName, String password){
        try {
            String url = URL+ "?flag="+"on"+"&user="+userName+"&pass="+password;
            httpPost = new HttpPost(url);
            HttpResponse httpResponse = httpclient.execute(httpPost);
            int statuscode = httpResponse.getStatusLine().getStatusCode();
            if (statuscode == 200) {
                String responseMsg = getResponse(httpResponse); 
                return responseMsg;
            }else{
                Log.e(TAG, statuscode+"");
            }
        } catch (ClientProtocolException e) {
            Log.e(TAG, e.getMessage(),e);
        } catch (IOException e) {
            Log.e(TAG, e.getMessage(),e);
        }
        return null;
    }

4 个答案:

答案 0 :(得分:2)

查看此How to set HttpResponse timeout for Android in Java。并且真的应该在单独的线程/ AsyncTask中进行所有网络通信,而不是在主线程上。

答案 1 :(得分:2)

如果您的模拟器上的UI挂起,您可能会在UI线程上执行网络操作 - 这将阻止所有UI操作,直到网络操作完成。在这里阅读如何在一个线程中运行此代码: http://developer.android.com/resources/articles/painless-threading.html

答案 2 :(得分:2)

您还应考虑定义超时(例如5秒),以便系统长时间不尝试连接到无法访问的服务器。

final HttpParams httpParams = httpClient.getParams();
HttpConnectionParams.setConnectionTimeout(httpParams, 5000);
HttpConnectionParams.setSoTimeout(httpParams, 5000);

答案 3 :(得分:1)

你有某种例外吗?如果网址格式不正确,您将获得MalformedURLException,如果服务器不可用/链接已损坏IOException

您希望通过ResponseHandler

传递回复
ResponseHandler<String> responseHandler = new BasicResponseHandler();
try {
   responseString = mHttpClient.execute(post, responseHandler);
   Log.d(TAG, "doHTTPpost responseString = " + responseString);
} catch (ClientProtocolException e) {
   //handle it 
} catch (IOException e) {
  //handle it
} catch (IllegalStateException e) {
  //handle it              
} finally {
  //handle it
}