LoopJ AndroidAsyncHttp不能使用基本身份验证POST图像

时间:2015-07-30 18:55:14

标签: android post basic-authentication android-async-http loopj

我正在尝试使用POST方法将图像上传到服务器上的PHP文件。我一直试图使用LoopJ AndroidAsyncHttp做到这一点但没有成功。服务器还需要基本的auth用户名和密码。到目前为止,我已经能够成功发布常规数据参数(这些是简单的字符串键值对,如:" name":" joe")并从服务器获取响应。但是,只要我尝试将图像附加到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();
        }
});

那我在这里做错了什么? 我还仔细检查了我正在阅读的文件,以确保图像确实存在,并且确实存在数据,所以我已经将其作为潜在原因进行了排除。 我现在一直在努力解决这个问题。 提前感谢任何可以提供帮助的人!

1 个答案:

答案 0 :(得分:1)

这是旧的1.4.4版本的AsyncHTTPClient中的一个错误。它可以通过更新到1.4.8版本来修复。在依赖项部分下的build.gradle文件中,它应如下所示:

compile 'com.loopj.android:android-async-http:1.4.8'