我已经使用asynctask实现带进度条的上传文件,但大文件或上传多个文件挂断了我的活动,现在我想要做同样的事情,但使用服务而不是使用asynctask。这里是我的代码..Android使用服务进度条上传文件到服务器
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);
}
}
服务也运行在主线程所以如果u想要做繁重的操作建议里面使用AsynTask服务也。 – kevz
@kevz但服务不允许使用Asynctask –
当然可以。谷歌它多一点,我相信你会找到一个解决方案。 – kevz