I'm attempting to write a simple API management class and running into an
issue when using HttpUrlConnection to POST content on a Galaxy Nexus
recently upgraded to 4.2.
In effect, attempting to post content fails on the first attempt with an
EOFException:
java.io.EOFException
> at libcore.io.Streams.readAsciiLine(Streams.java:203)
> at libcore.net.http.HttpEngine.readResponseHeaders(HttpEngine.java:573)
> at libcore.net.http.HttpEngine.readResponse(HttpEngine.java:821)
> at
> libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:283)
> at
> libcore.net.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:495)
> at com.murts.network.APIClient.post(APIClient.java:126)
> at com.murts.network.APIManager$1.doInBackground(APIManager.java:49)
The second attempt to post (with the same data) will work fine, as will
every alternate attempt to do so after that.
The code is as follows:
URL url = new URL(urlString);
> connection = (HttpURLConnection) url.openConnection();
> connection.setUseCaches(false);
> connection.setDoOutput(true);
> connection.setRequestProperty("Content-type", "application/json;
> charset=utf-8");
> connection.setFixedLengthStreamingMode(postContent.getBytes().length);
>
> output = connection.getOutputStream();
> output.write(postContent.getBytes());
> if (connection.getResponseCode() / 100 == 2) {
> Ln.d("Seemed to work: " + connection.getResponseCode());
> return new NetworkResponse(NetworkStatus.OKAY,
> connection.getResponseCode(), "");
> } else {
> String errorResponse = new String(readStream(connection.getErrorStream()));
> Ln.e(TAG , "Error: " + errorResponse);
>
> String statusLine;
> if (connection.getHeaderFields().get(null) != null && (statusLine =
> connection.getHeaderFields().get(null).get(0)) != null &&
> TextUtils.split(statusLine, " ").length > 2) {
> int potentialStatusCode = Integer.parseInt(TextUtils.split(statusLine, "
> ")[1]);
> Ln.d("Parsed out empty response to reveal: " + potentialStatusCode);
> return new NetworkResponse(NetworkStatus.OKAY, potentialStatusCode, "");
> }
> }
> } catch (IOException e) {
> Ln.e(e);
> } finally {
> if (connection != null) {
> connection.disconnect();
> }
> }
Testing on a 4.2 image on an emulator seems to work well, as does testing
on previous versions of Android on an emulator (2.3+).
I can't see any immediate issues with the code (it may looks hackish in
parts, but that's due more to being churned over thanks to endless
frustration with this issue) but perhaps I've missed something?
Anyone have any thoughts with this, on either a Galaxy Nexus in general or
with 4.2 specifically?
Thanks in advance for any assistance (or even thoughts at all.)
Ryan
--
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en