android 显示多条数据格式,Multipart上传的进度条,包含多个Android文件

编辑:已解决,向下滚动;)

按照教程here,

我在AsyncTask中实现了一个进度条对话框,以显示上传数据的百分比.目前它只是显示从0%到100%,然后它被卡在100%,直到所有数据上传.我正在尝试上传一个Json字符串加上4个图像.

码:

private class UploaderTask extends AsyncTask {

private ProgressDialog dialog;

protected Context mContext;

long totalSize;

public UploaderTask(Context context) {

mContext = context;

}

@Override

protected void onPreExecute() {

dialog = new ProgressDialog(mContext);

dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);

dialog.setTitle("Uploading data");

dialog.setCancelable(false);

//dialog.setIndeterminate(true);

dialog.setMessage("Please wait...");

dialog.show();

//dialog.setProgress(0);

}

@Override

public String doInBackground(JSONArray... json) {

String responseMessage = "";

int counter = 0;

try {

CustomMultiPartEntity entity = new CustomMultiPartEntity(new ProgressListener() {

@Override

public void transferred(long num) {

publishProgress((int) ((num / (float) totalSize) * 100));

}

});

HttpClient httpclient = new DefaultHttpClient();

HttpPost httppost = new HttpPost(URL);

//convert JSON array to String (first element contains the whole of data)

String json_encoded_string = json[0].toString();

//add json data

entity.addPart("json", new StringBody(json_encoded_string));

//get all images plus data and add them to the Multipart Entity

for (images_cursor.moveToFirst(); !images_cursor.isAfterLast(); images_cursor.moveToNext()) {

counter++;

//Get image and convert to byte array

byte[] image_ba = images_cursor.getBlob(images_cursor.getColumnIndex("image"));

long image_unit_id = images_cursor.getLong(images_cursor.getColumnIndex("unit_id"));

String image_caption = images_cursor.getString(images_cursor.getColumnIndex("caption"));

//add image to multipart

entity.addPart("image" + counter, new ByteArrayBody(image_ba, "image" + counter + ".jpg"));

//add unit _id to multipart

entity.addPart("image_unit_id" + counter, new StringBody(String.valueOf(image_unit_id)));

//add caption to multipart

entity.addPart("image_caption" + counter, new StringBody(String.valueOf(image_caption)));

}

totalSize = entity.getContentLength();

httppost.setEntity(entity);

HttpResponse response = httpclient.execute(httppost);

InputStream inputStream = response.getEntity().getContent();

responseMessage = inputStreamToString(inputStream);

//log out response from server

longInfo(responseMessage);

}

//show error if connection not working

catch (SocketTimeoutException e) {

e.printStackTrace();

responseMessage = "unreachable";

}

catch (ConnectTimeoutException e) {

e.printStackTrace();

responseMessage = "unreachable";

}

catch (Exception e) {

e.printStackTrace();

responseMessage = "unreachable";

}

return responseMessage;

}

@Override

protected void onProgressUpdate(Integer... progress) {

dialog.setProgress((int) (progress[0]));

}

@Override

protected void onPostExecute(String result) {

//result is the response back from "doInBackground"

dialog.cancel();

TextView response_holder = (TextView) findViewById(R.id.response);

//check if there were errors upoloading

if (result.equalsIgnoreCase("unreachable")) {

response_holder.setText("Error while uploading...Please check your internet connection and retry.");

return;

}

if (result.equalsIgnoreCase("error saving project data")) {

response_holder.setText("There was an error on the server saving the project data, please retry.");

return;

}

if (result.equalsIgnoreCase("error saving sites data")) {

response_holder.setText("There was an error on the server saving the sites data, please retry.");

return;

}

if (result.equalsIgnoreCase("project saved")) {

response_holder.setText("Data uploaded successfully!");

return;

}

if (result.equalsIgnoreCase("project already exist")) {

response_holder.setText("This project already exist!");

return;

}

}

}

我猜它只是计算json字符串的总大小,因为它是第一部分…任何建议?

编辑:可能重复,仍然没有解决方案here

编辑:已解决添加totalSize = entity.getContentLength();在发布实体之前,代码已更新

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值