У меня есть кусок кода в Android приложение, которое отправляет данные на мой сервер (к HTTPS URL), как, например:ASN.1Exception в Android при отправке данных на сервер
private void sendData(String serverUrl, byte[] message) {
HttpURLConnection conn = null;
try {
URL url = new URL(serverUrl);
conn = (HttpURLConnection) url.openConnection();
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setRequestMethod("POST");
conn.setFixedLengthStreamingMode(message.length);
conn.setRequestProperty("Content-Type", "application/json;charset=utf-8");
conn.setRequestProperty("X-Requested-With", "XMLHttpRequest");
OutputStream os = new BufferedOutputStream(conn.getOutputStream());
os.write(message);
os.flush();
conn.connect();
} catch (Exception e) {
//TODO: log exception and continue gracefully
} finally {
if (conn != null)
conn.disconnect();
}
}
Однако я продолжаю видеть следующее исключение происходит время от времени эпизодически на некоторых устройствах (обычно Samsung с Jelly Beans версии [SDK 16, 17 или 18]):
org.apache.harmony.security.asn1.ASN1Exception: Wrong content for ASN.1 integer at [15].
An integer MUST be encoded in minimum number of octets
java.lang.RuntimeException: org.apache.harmony.security.asn1.ASN1Exception:
Wrong content for ASN.1 integer at [15]. An integer MUST be encoded in minimum number of octets
at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.verifyCertificateChain(OpenSSLSocketImpl.java:586)
at org.apache.harmony.xnet.provider.jsse.NativeCrypto.SSL_do_handshake(Native Method)
at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:371)
at libcore.net.http.HttpConnection.setupSecureSocket(HttpConnection.java:209)
at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.makeSslConnection(HttpsURLConnectionImpl.java:478)
at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.connect(HttpsURLConnectionImpl.java:433)
at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:289)
at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:239)
at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:80)
at libcore.net.http.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:188)
at libcore.net.http.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:281)
at com.myapp.Reporter.sendData(Reporter.java:45)
Я искал в интернете и Google с высоким и низким, но не смог выяснить, что это значит или как его решить.
У кого-нибудь есть идеи?
Я предлагаю вам использовать библиотеку волейбола для всех ваших сетевых вызовов. Его простой в использовании и менее сложный. Http: //developer.android.com/training/volley/index.html – Arshad
Спасибо. Однако мой код находится в качестве третьей стороны в приложении, я не могу предположить, что он использует залп, и я не хочу добавлять его в качестве зависимости. –