0

从 android 应用程序调用 web 服务时,我得到了两到三个 execption。当我从 2.3.3(仿真器)版本的应用程序调用 web 服务时,我得到了 UnhostException 之类的异常,4.2.1(真实设备)版本上的 connectiontimeoutexception 并且在 3.1 版本上工作正常,我不知道为什么会这样。我试图从昨天开始解决这个异常,但已经解决了,如果代码中需要任何更改,请建议我。

LoginActivity 中,我调用了发出 http 请求的方法

List<NameValuePair> params = new ArrayList<NameValuePair>();
    params.add(new BasicNameValuePair("tag", login_tag));
    params.add(new BasicNameValuePair("email", username));
    params.add(new BasicNameValuePair("password", userpsw));
    JsonParserWebs jsonDataFromSrvr = new JsonParserWebs();
    String loginData = jsonDataFromSrvr.makeHttpReqToSrvr(loginUrl,"POST", params);

以下是调用webservice的JsonParserWebs

public String makeHttpReqToSrvr(String url,String requestType,List<NameValuePair> params) {
Log.i(JsonParserWebs.class.getName(),"URL..."+url);
HttpEntity httpEntity=null;

//making http request
try {

    if (requestType == "GET") {

        //connection time out
        HttpParams httpParameters = new BasicHttpParams();
        HttpConnectionParams.setConnectionTimeout(httpParameters, 5000);
        HttpConnectionParams.setSoTimeout(httpParameters, 10000);

        HttpClient httpClient = new DefaultHttpClient(httpParameters);
        String paramString =URLEncodedUtils.format(params, "utf-8");
        HttpGet httpGet = new HttpGet(url+"?"+paramString);



        HttpResponse httpResp = httpClient.execute(httpGet);
        httpEntity = httpResp.getEntity();

    }
    if (requestType == "POST") {

        //connection time out
        // From stackoverflow, I addes following three line but still got ConnectTimeoutException
        HttpParams httpParameters = new BasicHttpParams();
        HttpConnectionParams.setConnectionTimeout(httpParameters, 5000);
        HttpConnectionParams.setSoTimeout(httpParameters, 10000);

        HttpClient  httpClient = new DefaultHttpClient(httpParameters);
        HttpPost httpPost = new HttpPost(url);
        httpPost.setEntity(new UrlEncodedFormEntity(params));

        HttpResponse httpResp = httpClient.execute(httpPost);
        httpEntity = httpResp.getEntity();

    }

} catch (UnsupportedEncodingException e) {
    e.printStackTrace();
} catch (ClientProtocolException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}

try {

    json = EntityUtils.toString(httpEntity);
    Log.v("JSON", "data"+json);
} catch (Exception e) {
    e.printStackTrace();
} 
// try parse the string to a JSON object

return json;

}

提前致谢

4

2 回答 2

0

你需要使用 AsyncTask ,否则会崩溃!

于 2013-10-29T11:18:22.347 回答
0

1.当你使用耗时的过程时使用 AsyncTask 否则你会得到网络异常 2.在 .mainfeast 中获得 Internet 权限

于 2013-10-29T11:23:05.637 回答