我正在尝试使用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();
}
});
那我在这里做错了什么? 我还仔细检查了我正在阅读的文件,以确保图像确实存在,并且确实存在数据,所以我已经将其作为潜在原因进行了排除。 我现在一直在努力解决这个问题。 提前感谢任何可以提供帮助的人!
答案 0 :(得分:1)
这是旧的1.4.4版本的AsyncHTTPClient中的一个错误。它可以通过更新到1.4.8版本来修复。在依赖项部分下的build.gradle文件中,它应如下所示:
compile 'com.loopj.android:android-async-http:1.4.8'