首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android HttpsURLConnection问题

Android HttpsURLConnection问题
EN

Stack Overflow用户
提问于 2014-04-25 21:17:38
回答 1查看 345关注 0票数 1

我在API 15 + 16上有问题,对于17我不知道,但我知道在18和19上它是有效的。

main.java:

代码语言:javascript
复制
...
    // Prozess/Thread für Internetverbindung/Daten abrufen
private class MyThread extends Thread {
    @Override
    public void run() {

        if (stop) {
            if (DEBUG) {
                Log.d(TAG, "Stop ist true");
            }
            // nicht weitermachen, da erst der User unter Optionen
            // die
            // Einstellungen ändern muss
        } else {
            int TIMEOUT_VALUE = 3000;
            for (int z = 0; z < datum.length; z++) {
                Resultat = null;
                Endres = null;
                if (DEBUG) {
                    Log.d(TAG, "Endres " + Endres + " " + Resultat);
                    Log.d(TAG, "z: " + z);
                }

                statusZaehler = statusZaehler + 100 / statusZ;
                if (DEBUG) {
                    Log.d(TAG, o + " thread start statusZaehler "
                            + statusZaehler);
                }
                o++;

                if (DEBUG) {
                    Log.d(TAG, "run1");
                }

                // try {
                if (DEBUG) {
                    Log.d(TAG, "run2");
                }
                // ### Datumseingabe bzw. Variable
                pruefdatum = datum[z];

                if (DEBUG) {
                    Log.d(TAG, "Prüfdatum: " + pruefdatum);
                }

                // ### URL Abfragen & Auslesen
                // URL url = null;

                if (!NetworkInfo(getBaseContext())) {
                    showDialog(DIALOG_ALERT);
                    progressThread.setState(ProgressThread.STATE_DONE);
                    stop1 = true;
                    break;
                } else {

                    // Datenabruf

                    // try {

                    if (DEBUG) {
                        Log.d(TAG, "Daten aus dem Internet abrufen "
                                + pruefdatum);
                    }

                    javax.net.ssl.SSLContext sslContext = null;
                    javax.net.ssl.SSLSocketFactory socketFactory = null;
                    try {

                        sslContext = SSLContext.getInstance("TLS"); // (1)
                        sslContext
                                .init(null,
                                        new TrustManager[] { de.mdisco.ssl.TrustManagerFactory
                                                .get() },
                                        new SecureRandom()); // (2)
                        socketFactory = sslContext.getSocketFactory();
                    } catch (Exception e) {
                        Log.e(TAG,
                                "Error in ssl connection " + e.toString());
                    }

                    HttpsURLConnection
                            .setDefaultSSLSocketFactory(socketFactory); // (3)
                    HttpsURLConnection
                            .setDefaultHostnameVerifier(new de.mdisco.ssl.TestX509HostnameVerifier()); // (4)

                    HttpsURLConnection httpsUrlConnection = null;

                    try {

                        httpsUrlConnection = (HttpsURLConnection) new URL(
                                "https://....."+ pruefdatum + "&asi=")
                                .openConnection();

                        httpsUrlConnection.setConnectTimeout(TIMEOUT_VALUE);
                        httpsUrlConnection.setReadTimeout(TIMEOUT_VALUE);

                        httpsUrlConnection.connect(); // (5)

                    } catch (ConnectTimeoutException e) {
                        Log.e("Timeout Exception: ", e.toString());
                        Log.d(TAG, "fehler: " + e.getMessage()
                                + " More than " + TIMEOUT_VALUE
                                + " elapsed.");
                        myProgressDialog.dismiss();
                        Connfehler();
                        stop1 = true;
                        break;
                    } catch (SocketTimeoutException ste) {
                        Log.e("Timeout Exception: ", ste.toString());
                        Log.d(TAG, "fehler: " + ste.getMessage()
                                + " More than " + TIMEOUT_VALUE
                                + " elapsed.");
                        myProgressDialog.dismiss();
                        Connfehler();
                        stop1 = true;
                        break;
                    } catch (MalformedURLException me) {
                        Log.d(TAG,
                                "fehler in Internetverbindung: "
                                        + me.getMessage());
                        myProgressDialog.dismiss();
                        Connfehler();
                        stop1 = true;
                        break; // finish();

                    } catch (IllegalStateException cause) {
                        Log.e(TAG,
                                "Error in https connection Illegal State "
                                        + cause.toString());

                    } catch (Exception e) {
                        Log.e(TAG,
                                "Error in https connection " + e.toString());
                    }
                    // HTML der Webseite auslesen:

                    String lesezeile = null;
                    try {
                        BufferedReader buffReader = new BufferedReader(
                                new InputStreamReader(httpsUrlConnection
                                        .getInputStream()),
                                8 * 1024);

                        while ((lesezeile = buffReader.readLine()) != null) {
                            if (Resultat == null) {

                                Resultat = lesezeile;

                            } else {

                                Resultat = Resultat + lesezeile;

                            }

                        }

                        if (DEBUG) {
                            Log.d(TAG, "Edatum " + pruefdatum);
                            Log.d(TAG, Resultat + "");
                        }
                        buffReader.close();
                    } catch (Exception e) {
                        Log.e(TAG,
                                "Error buffered Reader result "
                                        + e.toString());
                    }
                    httpsUrlConnection.disconnect();
                    Endres = Resultat;
                    statusZaehler = statusZaehler + 100 / statusZ;
                    if (DEBUG) {
                        Log.d(TAG, o + "thread Übergabe statusZaehler "
                                + statusZaehler);
                    }
                    o++;
                    parse();

                    /*
                     * } catch (MalformedURLException me) { Log.d(TAG,
                     * "fehler in Internetverbindung: " + me.getMessage());
                     * myProgressDialog.dismiss(); Connfehler(); stop1 =
                     * true; break; // finish(); }
                     */

                    if (DEBUG) {
                        Log.d(TAG, "Ende StartInternet");

                        Log.d(TAG, "parse+offline ende");
                    }

                }
                /*
                 * } catch (ConnectTimeoutException e) {
                 * Log.e("Timeout Exception: ", e.toString()); Log.d(TAG,
                 * "fehler: " + e.getMessage() + " More than " +
                 * TIMEOUT_VALUE + " elapsed."); myProgressDialog.dismiss();
                 * Connfehler(); stop1 = true; break; } catch
                 * (SocketTimeoutException ste) {
                 * Log.e("Timeout Exception: ", ste.toString()); Log.d(TAG,
                 * "fehler: " + ste.getMessage() + " More than " +
                 * TIMEOUT_VALUE + " elapsed."); myProgressDialog.dismiss();
                 * Connfehler(); stop1 = true; break; } catch (Exception e)
                 * { Log.e(TAG, "Error in http connection " + e.toString());
                 * 
                 * }
                 */
            }

        }
...

错误-日志:

04-25 23:05:17.562: E/Main(21301):https连接错误java.lang.NullPointerException 04-25 23:05:17.562: W/System.err(21301):java.lang.NullPointerException 04-25 23:05:17.572: W/System.err(21301):at java.lang.NullPointerException 04-25 23:05:17.572: W/System.err(21301):在de.mdisco.ssl.TrustManagerFactory$MeinX509TrustManager.checkServerTrusted(TrustManagerFactory.java:35) 04-25 23:05:17.572: W/System.err(21301):at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.verifyCertificateChain(OpenSSLSocketImpl.java:573) 04-25 23 :17.572: W/System.err(21301):at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.verifyCertificateChain(OpenSSLSocketImpl.java:573) 04-25 2305:17.572: W/System.err(21301):at org.apache.harmony.xnet.provider.jsse.NativeCrypto.SSL_do_handshake(Native方法) 04-25 23:05:17.572: W/System.err(21301):at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:371) 04-25 23:05:17.582: W/System.err(21301):at libcore.net.http.HttpConnection。libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.makeSslConnection(HttpsURLConnectionImpl.java:478) (HttpConnection.java:209) 04-25 23:17.582: W/System.err(21301):at setupSecureSocket 04-25 23:05:17.582: W/System.err(21301):at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.connect(HttpsURLConnectionImpl.java:433) 04-25 23:05:17.582: W/System.err(21301):at libcore.net.http.HttpEngine。libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:239) (HttpEngine.java:289) 04-25 23:17.582: W/System.err(21301):at sendSocketRequest 04-25 23:05:17.582: W/System.err(21301):at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:80) 04-25 23:05:17.582: W/System.err(21301):at libcore.net.http.HttpsURLConnectionImpl。连接( de.mdisco.HWRapp.Main$MyThread.run(Main.java:1204) ) 04-25 23:17.582: W/System.err(21301):at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.verifyCertificateChain(OpenSSLSocketImpl.java: 04-25 23:05:17.582: E/Main(21301):错误缓冲阅读器结果java.lang.NullPointerException 04-25 23:05:17.572: W/System.err(21301):at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.verifyCertificateChain(OpenSSLSocketImpl.java:573) 04-25 23:05:17.572: W/System.err(21301):at org.apache.harmony.xnet.provider.jsse.NativeCrypto.SSL_do_handshake(Native方法) 04-25 23:05:17.572: W/System.err(21301):at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:371) 04-25 23:05:17.582: 17.582: W/System.err(21301):at libcore.net.http.HttpConnection.setupSecureSocket(HttpConnection.java:209) 04-25 23:05:17.582: W/System.err(21301):at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.makeSslConnection(HttpsURLConnectionImpl.java:478) 04-25 23:05:17.582: W/System.err(21301):at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.connect(HttpsURLConnectionImpl.java:433) 04-25 23:05:17.582: W/System.err(21301):at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:289) 04-25 23:05:17.582: W/System.err(21301):at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:239) 04-25 23:05:17.582: W/System.err(21301):at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:80) 04-25 23:05:17.582: W/System.err(21301):at libcore.net.http.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:165) 04-25 23:05:17.582: W/System.err(21301):at de.mdisco.HWRapp.Main$MyThread.run(Main.java:1204) 04-25 23:05:17.582: E/Main(21301):错误缓冲读取器结果java.lang.NullPointerException

因此,我认为无法建立安全的SSL连接。

但是代码中的错误在哪里呢?

谢谢你的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-25 23:06:26

代码语言:javascript
复制
04-25 23:05:17.562: E/Main(21301): Error in https connection
java.lang.NullPointerException 04-25 23:05:17.562: W/System.err(21301):
java.lang.NullPointerException 04-25 23:05:17.572: W/System.err(21301):
     at de.mdisco.ssl.TrustManagerFactory$MeinX509TrustManager.checkServerTrusted(TrustManagerFactory.java:35)

此错误出现在信任管理器代码中,堆栈跟踪清楚地显示了这一点。它甚至告诉你电话号码。

这里的另一个问题是您打印的误导性错误消息。这里没有‘HTTPS连接中的错误’,只是您自己代码中的一个简单的NPE。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23303223

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档