Unable to resolve host: URL No address associated with hostname

匿名 (未验证) 提交于 2019-12-03 03:06:01

问题:

I have an web service call to bring down a JSON object and it only works if I have the IP address and not the host name. I have been fine using IP addresses but now I need to have the host name.

Here is my code

    StringBuilder stringBuilder = new StringBuilder();     HttpParams httpParams = new BasicHttpParams();     HttpConnectionParams.setConnectionTimeout(httpParams, 3000);     HttpConnectionParams.setSoTimeout(httpParams, 7000);     DefaultHttpClient httpClient = new DefaultHttpClient(httpParams);     HttpPost httpost = new HttpPost(URL);     try {         HashMap<String,String>  params = new HashMap<String,String>();         // Login info         params.put("username", edtUserName.getText().toString());          params.put("password", edtPass.getText().toString());         params.put("deviceOS", "Android");         params.put("deviceOSVersion", android.os.Build.VERSION.RELEASE);         params.put("language", "0");         //JSON object holding the login info         JSONObject holder = new JSONObject(params);          StringEntity se = new StringEntity(holder.toString());          httpost.setEntity(se);          httpost.setHeader("Content-Type", "application/json");         //Executing the call         HttpResponse response = httpClient.execute(httpost);         StatusLine statusLine = response.getStatusLine();         int statusCode = statusLine.getStatusCode();         if (statusCode == 200) {             HttpEntity entity = response.getEntity();             InputStream inputStream = entity.getContent();             BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));             String line;             while ((line = reader.readLine()) != null) {                 stringBuilder.append(line);             }             inputStream.close();         } else {             returnCode = -1;             Log.d("JSON", "Failed to download file");         }     } catch (Exception e) {         returnCode = -1;         Log.d("readJSONFeed", e.getLocalizedMessage());     }      return stringBuilder.toString(); 

I dont know why that doesn't work. I am testing on a phone with Wifi connection, My manifest has the <uses-permission android:name="android.permission.INTERNET" /> and <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

This web service does work. Just not on Android

If anyone has an idea that would be great, Thanks.

回答1:

I fixed it by removing these lines

HttpParams httpParams = new BasicHttpParams(); HttpConnectionParams.setConnectionTimeout(httpParams, 3000); HttpConnectionParams.setSoTimeout(httpParams, 7000); DefaultHttpClient httpClient = new DefaultHttpClient(httpParams); 

And replacing it with this code

HttpClient httpClient = MainActivity.createHttpClient();   public static HttpClient createHttpClient(){     try {         KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());         trustStore.load(null, null);          SSLSocketFactory sf = new MySSLSocketFactory(trustStore);         sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);          HttpParams params = new BasicHttpParams();         HttpConnectionParams.setConnectionTimeout(params, 15000);         HttpConnectionParams.setSoTimeout(params, 5000);          SchemeRegistry registry = new SchemeRegistry();         registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));         registry.register(new Scheme("https", sf, 443));          ClientConnectionManager ccm = new ThreadSafeClientConnManager(params, registry);          return new DefaultHttpClient(ccm, params);     } catch (Exception e) {         return new DefaultHttpClient();     } } 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!