我已经使用 asynctask 实现了带有进度条的上传文件,但大文件或上传多个文件会挂起我的活动,现在我想做同样的事情,但使用服务而不是使用 asynctask。这是我的代码..
private class UploadFileToServer extends AsyncTask<Void, Integer, String> {
@Override
protected void onPreExecute() {
// setting progress bar to zero
mBuilder.setProgress(100, 0, false);
mNotifyManager.notify(0, mBuilder.build());
super.onPreExecute();
}
@Override
protected void onProgressUpdate(Integer... progress) {
mBuilder.setProgress(100,
Integer.parseInt(String.valueOf(progress[0])), false);
mNotifyManager.notify(0, mBuilder.build());
}
@Override
protected String doInBackground(Void... params) {
return uploadFile();
}
private String uploadFile() {
String responseString = null;
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(***);
try {
AndroidMultiPartEntity entity = new AndroidMultiPartEntity(
new AndroidMultiPartEntity.ProgressListener() {
public void transferred(long num) {
publishProgress((int) ((num / (float) totalSize) * 100));
}
});
File sourceFile = new File(orignal1);
entity.addPart("image", new FileBody(sourceFile));
totalSize = entity.getContentLength();
httppost.setEntity(entity);
// Making server call
HttpResponse response = httpclient.execute(httppost);
HttpEntity r_entity = response.getEntity();
int statusCode = response.getStatusLine().getStatusCode();
if (statusCode == 200) {
// Server response
responseString = EntityUtils.toString(r_entity);
} else {
responseString = "Error occurred! Http Status Code: "
+ statusCode;
}
} catch (ClientProtocolException e) {
responseString = e.toString();
} catch (IOException e) {
responseString = e.toString();
}
return responseString;
}
@Override
protected void onPostExecute(String result) {
mBuilder.setContentText("Upload complete").setProgress(0, 0,false);
mNotifyManager.notify(6532365, mBuilder.build());
mNotifyManager.cancel(6532365);
super.onPostExecute(result);
}
}
使用这个库
https://github.com/gotev/android-upload-service https://github.com/gotev/android-upload-service
通过此服务,您可以显示当前进度,它将在后台运行,这将帮助您保持应用程序的性能。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)