我正在尝试使用android-async-http库将文件异步上传到服务器。回调位于我调用的upload方法中。但是,在尝试从AsyncTask类调用该方法时出现错误。有没有人能发现哪里出了错?下面是我的上传方法:
public void upload(String title, String genre, String description, String songuri, int accountId) {
File song = new File(songuri);
try {
String url = Uri.parse(getResources().getString(R.string.audio_upload_url))
.buildUpon()
.appendQueryParameter("title", title)
.appendQueryParameter("tags", genre)
.appendQueryParameter("description", description)
.appendQueryParameter("accountId", String.valueOf(accountId))
.build().toString();
AsyncHttpResponseHandler httpResponseHandler = createHTTPResponseHandler();
RequestParams params = new RequestParams();
// this path could be retrieved from library or camera
//String imageFilePath = "/storage/sdcard/DCIM/Camera/IMG.jpg";
//params.put("data", new File(imageFilePath));
params.put("song", song);
AsyncHttpClient client = new AsyncHttpClient();
client.post(url, params, httpResponseHandler);
} catch (IOException e) {
e.printStackTrace();
}
}下面是我初始化AsyncHttpResponseHandler类的方法。
public AsyncHttpResponseHandler createHTTPResponseHandler() {
AsyncHttpResponseHandler handler = new AsyncHttpResponseHandler() {
@Override
public void onStart() {
super.onStart();
}
@Override
public void onProgress(int position, int length) {
super.onProgress(position, length);
// progressBar.setProgress(position);
//progressBar.setMax(length);
}
@Override
public void onFinish() {
super.onFinish();
}
@Override
public void onSuccess(int i, Header[] headers, byte[] bytes) {
}
@Override
public void onFailure(int i, Header[] headers, byte[] bytes, Throwable throwable) {
}
};
return handler;
}在我的AsyncTask类中,这就是我调用upload方法的方式。
@Override
protected UploadFragment doInBackground(UploadFragment... params) {
String title = titleEt.getText().toString();
String description = descriptionEt.getText().toString();
int user_id;
userdetails = sessionManager.getUserDetails();
User user = userdetails.get(0);
user_id = user.getUserid();
upload(title, "genre", description, songPath, user_id);
return null;
}由于窗口泄漏,我在AsyncTask类的onPreExecute方法的最后一行得到了错误,这意味着我在执行doInBackground()方法时得到了一个错误。
发布于 2014-12-02 15:30:38
使用谷歌提供的用于网络通信的Volley库。在android-async-http-library中,我们不能取消特定的请求,但可以使用volley。
https://stackoverflow.com/questions/27243868
复制相似问题