3

I'm trying to send a picture to rails server from Android. But when I send, I get the following error.

09-19 23:22:11.810: W/System.err(2704): org.apache.http.client.ClientProtocolException                                                                                        
09-19 23:22:12.000: W/System.err(2704):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:557)
09-19 23:22:12.020: W/System.err(2704):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
09-19 23:22:12.020: W/System.err(2704):     at com.loopj.android.http.AsyncHttpRequest.makeRequest(AsyncHttpRequest.java:73)
09-19 23:22:12.050: W/System.err(2704):     at com.loopj.android.http.AsyncHttpRequest.makeRequestWithRetries(AsyncHttpRequest.java:92)
09-19 23:22:12.050: W/System.err(2704):     at com.loopj.android.http.AsyncHttpRequest.run(AsyncHttpRequest.java:54)
09-19 23:22:12.050: W/System.err(2704):     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:444)
09-19 23:22:12.050: W/System.err(2704):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
09-19 23:22:12.050: W/System.err(2704):     at java.util.concurrent.FutureTask.run(FutureTask.java:138)
09-19 23:22:12.050: W/System.err(2704):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
09-19 23:22:12.060: W/System.err(2704):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
09-19 23:22:12.070: W/System.err(2704):     at java.lang.Thread.run(Thread.java:1019)
09-19 23:22:12.250: W/System.err(2704): Caused by: org.apache.http.client.NonRepeatableRequestException: Cannot retry request with a non-repeatable request entity
09-19 23:22:12.320: W/System.err(2704):     at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:413)
09-19 23:22:12.360: W/System.err(2704):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
09-19 23:22:12.370: W/System.err(2704):     ... 10 more

What's weird is I don't get this error every time uploading a picture, just sometimes when doing the same process. Here are my codes. I'm using "AsyncHttpClient" (http://loopj.com/android-async-http/) for http connection.

public class AsynchConnector{
    static AsyncHttpClient client = new AsyncHttpClient();
    private static final String BASE_URL = Environment.SERVER_URL;

    public static void post(String url, RequestParams params, AsyncHttpResponseHandler responseHandler){
        Log.w("web", "sending POST requset to " + getAbsoluteUrl(url));
        client.post(getAbsoluteUrl(url), params, responseHandler);
    }
}


public static void postPicture(String serverAlbumId, String serverUserId, String filePath){
    RequestParams params = new RequestParams();
    params.put("user_id", CameraApp.sp.getString("server_user_id", ""));
    params.put("picture[album_id]", serverAlbumId);
    params.put("picture[user_id]", serverUserId);

    try{
        params.put("picture[image]", StorageAccessor.getPictureAsFile(filePath));
    }catch(FileNotFoundException e){
        Log.e("---", "no image file found ");
    }

    Log.i("----------", "starting to post picture");
    AsynchConnector.post(PICTURE_PATH, params, new AsyncHttpResponseHandler(){
        public void onSuccess(String response) {
            Log.i("POST_PICTURE_RESOPNSE", response);
        }
    });
}
3
  • Were you ever able to resolve this, by any chance? I'm having the exact same issue, and my code is very similar to yours. Commented Oct 17, 2012 at 19:20
  • 1
    I think that was due the OutputStream writer used in AsynchHttpClient. This post might help understanding what's happening. old.nabble.com/… And I solved this by implementing onFailure(Throwable error) method in ResponseHandler that does the same thing again. (in my case, invoking postPicture method.) Commented Oct 18, 2012 at 7:01
  • Any Luck finding the solution? Commented Feb 27, 2013 at 15:08

1 Answer 1

1

That was due the OutputStreamWriter class used in AsynchHttpClient. This post might help understanding what's happening.

http://httpcomponents.10934.n7.nabble.com/Http-Multi-part-exception-when-using-InputStreamBody-td12820.html

And I solved this by implementing onFailure(Throwable error) method in ResponseHandler that does the same thing again. (in my case, invoking postPicture method.)

Sign up to request clarification or add additional context in comments.

1 Comment

I tried this solution but now I am getting a never ending loop through the onFailure Method. Am I implementing your solution wrong?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.