Logo Hardware.com.br
NoCreativity
NoCreativity Super Participante Registrado
222 Mensagens 65 Curtidas

[Resolvido] Android Studio HttpURLConnection

#1 Por NoCreativity 28/08/2018 - 14:30
Oi. Estou com um problema com a classe HttpUrlConnection no Android Studio:

O meu código-fonte (dentro de "protected String doInBackground(Void... voids)" que está dentro da classe "DownloadJSON" que estende AsyncTask(Void, Void, String):

[===========================]

String urlWebService = (string da URL aqui);

URL url = new URL(urlWebService);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
StringBuilder sb = New StringBuilder();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(con.getInputStream()));
String json;
while ((json = bufferedReader.readLine()) != null) {
sb.append(json + "\n");
}

[===========================]

Erro no logcat:

[===========================]

/(nome do pacote) E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
Process: (nome do pacote), PID: 2775
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:300)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)
Caused by: java.lang.NullPointerException

at (nome do pacote).TelaPrincipal$1DownloadJSON.doInBackground(TelaPrincipal.java:492) (linha:
while ((json = bufferedReader.readLine()) != null) {)
at (nome do pacote).TelaPrincipal$1DownloadJSON.doInBackground(TelaPrincipal.java:441) (linha:
class DownloadJSON extends AsyncTask {)
at android.os.AsyncTask$2.call(AsyncTask.java:288)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)

[===========================]

O problema é que esse mesmo erro somente ocorre em dispositivos com API < 21 (Android 5.0), já os mesmos com API > 21 (Android 5.0), não ocorre e o código executa normalmente sem algum tipo de falha. Alguém poderia me ajudar...?
NoCreativity
NoCreativity Super Participante Registrado
222 Mensagens 65 Curtidas
#2 Por NoCreativity
28/08/2018 - 15:46
Problema Resolvido.

O problema estava no certificado. Adicionei os seguintes códigos no método protected void onCreate(Bundle savedInstanceState):

[======================]

TrustManager[] trustAllCerts = new TrustManager[]{
new X509TrustManager() {
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkClientTrusted(
java.security.cert.X509Certificate[] certs, String authType) {
}
public void checkServerTrusted(
java.security.cert.X509Certificate[] certs, String authType) {
}
}
};

try {
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
} catch (Exception e) {
}


[======================]

Espero que isso ajude outras pessoas.
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal