I'm experiencing some odd behavior in my HTTP requests.  I have some users 
that are saying that this call isn't ever coming back (the spinner marking 
it's asynchronous call never goes away).  I have seen this happen before, 
but I attributed it to the emulator going through Charles Proxy.  I haven't 
yet seen it on actual phone until now.

I'm not sure what would cause this to happen, which is why I'm posting it 
here.  Here's the call, using Jackson to deserialize the result into a 
Value Object.  The two spots I saw the emulator freeze are 
httpclient.execute(httpGet); and getObjectMapper().readValue(jp, 
SyncVO.class);.

While debugging, stepping over the offending statement caused the debugger 
to never gain control back of stepping.  Meanwhile, I see the request go 
out AND come back from the server through Charles.  It's just that the app 
doesn't seem to get the response and just sits there.

So, here's the code.  Thanks for any help!

    public SyncVO sync(String userId, long lastUpdate, boolean 
includeFetch) throws IOException {
        SyncVO result = null;

        String url = BASE_URL + "users/" + userId + "/sync" + "?" + 
"fetch=" + includeFetch;

        if (lastUpdate > 0) {
            url += "&updatedSince=" + lastUpdate;
        }

        DefaultHttpClient httpclient = new DefaultHttpClient();
        HttpGet httpGet = new HttpGet(url);

        httpGet.setHeader("Accept", "application/json");
        httpGet.setHeader("Accept-Encoding", "gzip");
        httpGet.setHeader(AUTHORIZATION, BEARER + " " + mOAuthToken);
        httpclient.getParams().setParameter(CoreProtocolPNames.USER_AGENT, 
USER_AGENT_STRING);
        
httpclient.getParams().setBooleanParameter(CoreProtocolPNames.USE_EXPECT_CONTINUE,
 
false);

        HttpResponse response = httpclient.execute(httpGet);

        if (isUnauthorized(response)) {
            APPLICATION.needReauthentication();
            return null;
        }
        
        if (response != null) {
            InputStream stream = response.getEntity().getContent();
            Header contentEncoding = 
response.getFirstHeader("Content-Encoding");
            if (contentEncoding != null && 
contentEncoding.getValue().equalsIgnoreCase("gzip")) {
                stream = new GZIPInputStream(stream);
            }
            
            InputStreamReader inReader = new InputStreamReader(stream, 
"UTF-8");
            JsonParser jp = mJsonFactory.createJsonParser(inReader);
            result = getObjectMapper().readValue(jp, SyncVO.class);
        }   

        return result;
    }

    private ObjectMapper getObjectMapper() {
        return (new ObjectMapper()
            .configure(Feature.AUTO_DETECT_FIELDS, true)
            .configure(Feature.FAIL_ON_UNKNOWN_PROPERTIES, false)
            .configure(JsonParser.Feature.ALLOW_UNQUOTED_CONTROL_CHARS, 
true));
    }

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to