2016-12-30 53 views
-1

当我从露天天气api变成黑暗天空api时,我发现连接有问题。为什么InputStream不能在Android中使用HTTPS?

我只是想从那个api和开放的天气图api得到JSON响应,一切正常。现在我决定使用黑暗的天空API。我只是一如既往地调整了一切,但它不起作用。

也许它有一个https问题? (dark sky api使用https-URL,其中开放天气图api使用http-URL)。

反正我抓到一个IOException在

inputStream = connection.getInputStream(); 

这里是我的类:

import com.nymvno.hiob.prototyp_v30.Utils.Utils; 
import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.net.HttpURLConnection; 
import java.net.URL; 

public class WeatherHttpClient { 

public String getWeatherData(String place) { 
    HttpURLConnection connection; 
    InputStream inputStream; 

    try { 
     connection = (HttpURLConnection) (new URL(Utils.BASE_URL + place)).openConnection(); 
     connection.setRequestMethod("GET"); 
     connection.setDoInput(true); 
     connection.setDoOutput(true); 
     connection.connect(); 

     //Read the response 
     StringBuffer stringBuffer = new StringBuffer(); 
     inputStream = connection.getInputStream(); 
     BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); 
     String line; 

     while ((line = bufferedReader.readLine()) != null) { 
      stringBuffer.append(line + "\r\n"); 
     } 
     inputStream.close(); 
     connection.disconnect(); 

     return stringBuffer.toString(); 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    return null; 
} 
} 
+1

这是什么异常?您能否发布日志猫错误? –

+0

没有例外,我调试它,并找出它从被叫行跳转到返回空 – nymvno

+1

如果没有例外,为什么你的问题说有? – EJP

回答

-1

你必须从你的应用程序类

varify您的主机名检查我的代码

public class MyApp extends Application{ 
@Override 
    public void onCreate(){ 
     super.onCreate(); 
handleSSLHandshake(); 
} 

@SuppressLint("TrulyRandom") 
    public static void handleSSLHandshake() { 
     try { 
      TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() { 
       @Override 
       public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException { 

       } 

       @Override 
       public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException { 

       } 

       @Override 
       public java.security.cert.X509Certificate[] getAcceptedIssuers() { 
        return new java.security.cert.X509Certificate[0]; 
       } 


      }}; 

      SSLContext sc = SSLContext.getInstance("SSL"); 
      sc.init(null, trustAllCerts, new SecureRandom()); 
      HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); 
      HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() { 
       @Override 
       public boolean verify(String hostname, SSLSession arg1) { 
        if(hostname.equalsIgnoreCase("your host name")){ 
         return true; 
        }else { 
         return false; 
        } 

       } 
      }); 
     } catch (Exception ignored) { 
     } 
    } 


} 
+0

我真的不明白你到底在做什么。主机名可能是我的API密钥?我需要这个SSLHandshake处理程序吗? – nymvno

+0

请在您的软件包中添加应用程序类并添加到menifest.xml中。给我你的API网址,所以我建议什么是你的主机名 – frnd

相关问题