3

Я пытаюсь загрузить изображение из этого URL:Android HttpURLConnection getInputStream бросает NullPointerException

https://hme_player_pictures.s3.amazonaws.com/test-512813ed3b83286c72f376c7-thumb100.jpg

здесь укладывают след:

03-21 12:58:04.040: W/System.err(7084): java.lang.NullPointerException 
03-21 12:58:04.040: W/System.err(7084):  at libcore.net.http.HttpConnection$Address.hashCode(HttpConnection.java:343) 
03-21 12:58:04.045: W/System.err(7084):  at java.util.HashMap.get(HashMap.java:298) 
03-21 12:58:04.050: W/System.err(7084):  at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:67) 
03-21 12:58:04.050: W/System.err(7084):  at libcore.net.http.HttpConnection.connect(HttpConnection.java:128) 
03-21 12:58:04.050: W/System.err(7084):  at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:308) 
03-21 12:58:04.055: W/System.err(7084):  at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.makeSslConnection(HttpsURLConnectionImpl.java:460) 
03-21 12:58:04.055: W/System.err(7084):  at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.connect(HttpsURLConnectionImpl.java:432) 
03-21 12:58:04.055: W/System.err(7084):  at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:282) 
03-21 12:58:04.060: W/System.err(7084):  at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:232) 
03-21 12:58:04.065: W/System.err(7084):  at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:273) 
03-21 12:58:04.065: W/System.err(7084):  at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:168) 
03-21 12:58:04.070: W/System.err(7084):  at libcore.net.http.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:270) 
03-21 12:58:04.070: W/System.err(7084): ... 

код:

URL imageUrl = new URL(url); 
HttpURLConnection c = (HttpURLConnection)imageUrl.openConnection(); 
InputStream in = c.getInputStream(); // Nullpointer exception on this line, c is definitely not null, I debugged 

Может 't выяснить, почему он бросает NullPointerException. Вышеупомянутый URL-адрес действительно работает в браузере.

ответ

1

Как подозреваемой вопрос был с именем хоста URL амазонских s3.

поэтому я изменил

https://hme_player_pictures.s3.amazonaws.com/test-512813ed3b83286c72f376c7-thumb100.jpg

в

https://s3.amazonaws.com/hme_player_pictures/test-512813ed3b83286c72f376c7-thumb100.jpg

, и она работала. Теперь мой код Java счастлив!

+1

Проблема может быть «_» (подчеркивание) в URL: http://developers.facebook.com/bugs/436848366360282/ –

3

Для чего это стоит, я вижу много ошибок из библиотеки Android HTTP. Из сканера штрих-кода я получаю следы стека от примерно 35 миллионов человек, и поэтому я думаю, что видел одно из всех. Вот и все странные вещи, которые мы просто ловим и глотаем в приложении, внизу. Я рекомендую вам обходить его как ошибку платформы и изящно терпеть неудачу.

https://code.google.com/p/zxing/source/browse/trunk/android/src/com/google/zxing/client/android/HttpHelper.java

private static int safelyConnect(String uri, HttpURLConnection connection) throws IOException { 
    try { 
     connection.connect(); 
    } catch (NullPointerException npe) { 
     // this is an Android bug: http://code.google.com/p/android/issues/detail?id=16895 
     Log.w(TAG, "Bad URI? " + uri); 
     throw new IOException(npe.toString()); 
    } catch (IllegalArgumentException iae) { 
     // Also seen this in the wild, not sure what to make of it. Probably a bad URL 
     Log.w(TAG, "Bad URI? " + uri); 
     throw new IOException(iae.toString()); 
    } catch (SecurityException se) { 
     // due to bad VPN settings? 
     Log.w(TAG, "Restricted URI? " + uri); 
     throw new IOException(se.toString()); 
    } catch (IndexOutOfBoundsException ioobe) { 
     // Another Android problem? https://groups.google.com/forum/?fromgroups#!topic/google-admob-ads-sdk/U-WfmYa9or0 
     Log.w(TAG, "Bad URI? " + uri); 
     throw new IOException(ioobe.toString()); 
    } 
    try { 
     return connection.getResponseCode(); 
    } catch (NullPointerException npe) { 
     // this is maybe this Android bug: http://code.google.com/p/android/issues/detail?id=15554 
     Log.w(TAG, "Bad URI? " + uri); 
     throw new IOException(npe.toString()); 
    } catch (NumberFormatException nfe) { 
     // Again seen this in the wild for bad header fields in the server response! 
     Log.w(TAG, "Bad server status? " + uri); 
     throw new IOException(nfe.toString()); 
    } 
    } 
+0

Есть много подобных проблем. Я просто предлагаю, что это не то, что ваше приложение совершило неправильно. В этом случае делать нечего, кроме как грамотно обходите его. –

+0

У меня разная трассировка стека, чем code.google.com/p/android/issues/detail?id=15554 Я думаю, что это что-то связано с соединением https или URL-адресом узла амазонок. Кроме того, 'openConnection()' вызов преуспевает, но 'getInputStream()' fail – Saqib

Смежные вопросы