LoopJ AndroidAsyncHttp не может разместить изображение с базовой аутентификацией

Я пытаюсь загрузить изображение в файл PHP на сервере, используя метод POST. Я пытался сделать это с помощью LoopJ AndroidAsyncHttp, но безуспешно. Сервер также требует базового имени пользователя и пароля для аутентификации. До сих пор мне удавалось успешно отправлять обычные параметры данных (это простые строковые пары с ключевыми значениями, такие как: «имя»: «Джо») и получать ответ от сервера. Однако, как только я пытаюсь прикрепить изображение к POST-запросу, запрос завершается с ошибкой, выдавая следующие ошибки:

Error Message: null
Error Cause: org.apache.http.client.NonRepeatableRequestException: Cannot retry request with a non-repeatable request entity

Код, который я использую, соответствует примерам, приведенным на http://loopj.com/android-async-http/ очень внимательно. Вот код, который я использую:

RequestParams params = new RequestParams();
params.put("name",name);


String path = "/path/to/img";
File myFile = new File(path, "picture.png");

if( myFile.exists() ) {
    try {
        params.put("picture", myFile);
    } catch(FileNotFoundException e) {
        Log.d("App","Error Attaching Picture: " + e.toString());
    }
} else {
    Log.d("App","File DOES NOT exist");
}


String urlString = "url-to-server";
AsyncHttpClient client = new AsyncHttpClient();
client.setBasicAuth("User", "Pass");
client.post(urlString, params, new AsyncHttpResponseHandler(){
        @Override
        public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
            super.onSuccess(statusCode, headers, responseBody);
        }

        @Override
        public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
            super.onFailure(statusCode, headers, responseBody, error);
            Log.d("App","Upload Failed!");
            Log.d("App","Error Message: " + error.getMessage());
            Log.d("App", "Error Cause: " + error.getCause());                   
        }

        @Override
        public void onStart() {
            super.onStart();
        }
});

Так что я делаю неправильно здесь? Я также дважды проверил, и файл, который я читаю, чтобы получить изображение, действительно существует, и в нем есть данные, поэтому я исключил это как потенциальную причину. Я слишком долго боролся с этой проблемой. Заранее спасибо всем, кто может помочь!


person Takide    schedule 30.07.2015    source источник


Ответы (1)


Это была ошибка в старой версии AsyncHTTPClient 1.4.4. Это можно исправить, обновив до версии 1.4.8. В вашем файле build.gradle в разделе зависимостей это должно выглядеть так:

compile 'com.loopj.android:android-async-http:1.4.8'
person Takide    schedule 09.09.2015