【问题标题】:UnknownHostException in Android App but working in BrowserAndroid 应用程序中的 UnknownHostException 但在浏览器中工作
【发布时间】:2013-11-15 14:46:30
【问题描述】:

我知道这个问题已经在 SO 上被问过好几次了,但这些都不能解决我的问题。

我在 Manifest 文件中拥有所需的权限。 Webservice 在浏览器中运行良好,但在 Android 应用程序中出现 UnknownHostException。

这是我的机器人代码:

内部类:

private class WebService extends AsyncTask<String, Void, String>{
            @Override
            protected String doInBackground(String... urls){
                String res = "";
                _callService();
                return res;
            }
            @Override
            protected void onPostExecute(String result){
                progressDialog.dismiss();
                //reset();
            }
        }

_callService() 方法:

public void _callService(){
        try{
            HttpResponse response = null;
            HttpParams httpParameters = new BasicHttpParams();
            HttpConnectionParams.setConnectionTimeout(httpParameters, 400000);
            HttpConnectionParams.setSoTimeout(httpParameters, 600000);
            HttpClient httpclient = new DefaultHttpClient(httpParameters);
            HttpPost httppost = new HttpPost(CommonObject.URL + "CheckUser");
            List<NameValuePair> values = new ArrayList<NameValuePair>();

            values.add(new BasicNameValuePair("Type", String.valueOf(CommonObject.type)));

            if(s5.equalsIgnoreCase("Company Account")){
                values.add(new BasicNameValuePair("UserType", "2"));
                values.add(new BasicNameValuePair("CustomerFirstName", s6));
            }else{
                values.add(new BasicNameValuePair("UserType", "1"));
                values.add(new BasicNameValuePair("CustomerFirstName", s1));
            }

            values.add(new BasicNameValuePair("CustomerEmail", s2));
            values.add(new BasicNameValuePair("CustomerPhoneNo", s3));
            values.add(new BasicNameValuePair("CustomerAccountNo", s4));

            /* Log of above values*/
            Log.v("URL", CommonObject.URL + "CheckUser");
            Log.v("Type", String.valueOf(CommonObject.type));
            if(s5.equalsIgnoreCase("Company Account")){
                Log.v("UserType", "2");
                Log.v("CustomerFirstName", s6);
            }else{
                Log.v("UserType", "1");
                Log.v("CustomerFirstName", s1);
            }
            Log.v("CustomerEmail", s2);
            Log.v("CustomerPhoneNo", s3);
            Log.v("CustomerAccountNo", s4);

            try{
                httppost.setEntity(new UrlEncodedFormEntity(values));
            }catch (UnsupportedEncodingException e) {
                e.printStackTrace();
                Log.e("URL Encoded Form Entity Exception", e.getMessage().toString());
            }

            try{
                response = httpclient.execute(httppost);
            }catch (ClientProtocolException e) {
                e.printStackTrace();
                Log.e("Client Protocol Exception", e.getMessage().toString());
            }catch (IOException e) {
                e.printStackTrace();
                Log.e("IO Exception", e.getMessage().toString());
            }catch(Exception e){
                e.printStackTrace();
                Log.e("Exception", e.getMessage().toString());
            }

            final int statusCode = response.getStatusLine().getStatusCode();
            response_code = String.valueOf(response.getFirstHeader("ResponseCode")).trim();
            response_message = String.valueOf(response.getLastHeader("Message")).trim();

            Log.e("Exact Response From Server", String.valueOf(response));
            Log.e("ResponseCode", response_code);
            Log.e("Message", response_message);

            String content = "";
            if(statusCode == 200){
                HttpEntity mResEntityGet = response.getEntity();
                if (mResEntityGet != null) {
                    try {
                        content = EntityUtils.toString(mResEntityGet);
                    } catch (ParseException e) {
                        e.printStackTrace();
                        Log.e("Parse Exception", e.getMessage().toString());
                    } catch (IOException e) {
                        e.printStackTrace();
                        Log.e("IO Exception", e.getMessage().toString());
                    } catch(Exception e){
                        e.printStackTrace();
                        Log.e("Exception", e.getMessage().toString());
                    }

                    Log.v("CONTENT", content);

                    if(response_code.endsWith("200")){
                        //send_msg = "Mail send";
                    }else{
                        //send_msg = "";
                    }
                }
            }
        }catch(Exception e){
            Log.e("Error in _callService", e.getMessage().toString());
        }
    }

在按钮点击事件上这样调用:

WebService service = new WebService();
service.execute();

【问题讨论】:

  • 你错过了 INTERNET 权限
  • 发帖ConnectObject.URL
  • 我认为你应该发布你的清单,但是@blackbelt 所说的添加互联网权限很可能是问题
  • 您是否能够解决问题?
  • 谢谢@blackbelt...但我已经声明我拥有所有必需的权限,包括 INTERNET 和 ACCESS_NETWORK_STATE

标签: android web-services android-asynctask unknown-host


【解决方案1】:

确认 INTERNET 权限标签是否是清单标签的子标签,而不是应用标签的子标签。其他线程中也出现了类似的错误。 Android: UnknownHostException

编辑:如果您阅读了所有答案,则在该线程中,您的错误有多个“可能的解决方案”。

 <uses-permission android:name="android.permission.INTERNET" />
 <application>
 ...
 </application>

【讨论】:

  • @rui.mendes.. 已经在清单标签下而不是应用程序标签下。
  • 其他可能的问题: - 确保您有互联网连接 - 当您在模拟器中运行应用程序时,有时会发生这种情况。尝试重启模拟器解决问题。 - 尝试更改 minSdkVersion - 如果上述方法均无效,请尝试退后一步,确保您的设备或模拟器可以通过打开浏览器实际访问互联网。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-15
  • 2020-06-26
  • 1970-01-01
  • 1970-01-01
  • 2016-12-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多