Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

"org.apache.http.client.NonRepeatableRequestException" when uploading a picture from Android

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);
        }
    });
}
like image 227
Ryo Avatar asked Sep 28 '26 07:09

Ryo


1 Answers

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.)

like image 116
Ryo Avatar answered Sep 29 '26 21:09

Ryo



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!