您的位置:首页 > 移动开发 > Android开发

android模拟表单提交多数据

2015-10-09 16:49 405 查看
移动开发,经常会遇到图片(多图片),视频,录音,文本信息等复杂数据的提交问题,所以可以让android模拟web表单的方法一次行提交所有数据。我封装了一个公共类。直接上代码,下面的代码需要用到xUtils-2.6.14.jar,httpcore-4.3.3.jar,httpmime-4.3.6.jar

//多数据上传操作类

public class MultiUploadOperation {

private Activity activity;

private List<BasicNameValuePair> texts;

private HashMap<File, String> files;

private String url;

private Dialog dialog;

private OnMultiUploadLinister onMultiUploadLinister;

public MultiUploadOperation(Activity activity, String url,List<BasicNameValuePair> texts, HashMap<File, String> files) {

this.activity = activity;

this.texts = texts;

this.files = files;

this.url = url;

}

public void upload(boolean isShowDialog , String msg) {

if(isShowDialog){

//logingview

LogingDialogView dalogView = new LogingDialogView(activity);

dialog = dalogView.createDialog(msg);

dialog.show();

}

HttpEntity httpEntity = initHttpPostData(url, texts, files);

RequestParams params = new RequestParams("UTF-8");

params.setBodyEntity(httpEntity);

HttpUtils http = HttpUtilsHelper.getHttpUtils();

http.send(HttpMethod.POST, url, params, new RequestCallBack<String>() {

@Override

public void onFailure(HttpException arg0, String error) {

if (onMultiUploadLinister != null) {

onMultiUploadLinister.onFailure(error);

}

if (dialog != null) {

dialog.dismiss();

dialog = null;

}

}

@Override

public void onSuccess(ResponseInfo<String> responseInfo) {

String result = responseInfo.result;

if (onMultiUploadLinister != null) {

onMultiUploadLinister.onSuccess(result);

}

if (dialog != null) {

dialog.dismiss();

dialog = null;

}

}

});

}

/**

* 模拟表单 封装表单数据

*

* @return HttpPost

*/

private HttpEntity initHttpPostData(String url, List<BasicNameValuePair> texts, HashMap<File, String> files) {

MultipartEntityBuilder create = MultipartEntityBuilder.create();

//不要用这个会使服务器接收不到数据

//create.setCharset(Charset.forName("UTF-8"));

// 普通文本的发送,用户名&密码等

if (texts != null && texts.size() > 0) {

for (BasicNameValuePair iterable_element : texts) {

create.addTextBody(iterable_element.getName(),iterable_element.getValue() , ContentType.TEXT_PLAIN.withCharset("UTF-8"));

}

}

// 二进制的发送,文件

if (files != null && files.size() > 0) {

Set<Entry<File, String>> entrySet = files.entrySet();

for (Entry<File, String> iterable_element : entrySet) {

create.addBinaryBody(iterable_element.getValue(),iterable_element.getKey());

}

}

HttpEntity httpEntity = create.build();

return httpEntity;

}

public void setOnMultiUploadLinister(

OnMultiUploadLinister onMultiUploadLinister) {

this.onMultiUploadLinister = onMultiUploadLinister;

}

public interface OnMultiUploadLinister {

public void onSuccess(String result);

public void onFailure(String error);

}

-------------------------------

//使用

private void uploadVideoAndInfo(){

if(videoPath != null || imageNames.size() > 0){

String url = Common.BASE_RUL + "/road/insert";

int user_id = p.getInt("user_id", 0);

String latitude = p.getString("location_latitude", "");

String longitude = p.getString("location_longitude", "");

String address = p.getString("location_address", "");

String detail = input_video_info_detail.getText().toString();

ArrayList<BasicNameValuePair> texts = new ArrayList<BasicNameValuePair>();

texts.add(new BasicNameValuePair("user_id", Integer.valueOf(user_id).toString()));

texts.add(new BasicNameValuePair("longitude", longitude));

texts.add(new BasicNameValuePair("latitude", latitude));

texts.add(new BasicNameValuePair("address", address));

texts.add(new BasicNameValuePair("note", detail));


//封装录像和图片数据

HashMap<File, String> files = null;

if(videoPath != null){

if(files == null){

files = new HashMap<File, String>();

}

if(Utils.fileIsExists(videoPath)){

files.put(new File(videoPath) , "video");

}

if(Utils.fileIsExists(videoImgPath)){

files.put(new File(videoImgPath) , "video_img");

}

}

//封装图片数据

if(imageNames.size() > 0){

if(files == null){

files = new HashMap<File, String>();

}

for (int i = 0; i < imageNames.size(); i++) {

String name = imageNames.get(i);

String path = Common.IMAGE_FILE_PATH + "/" + name;

if(Utils.fileIsExists(path)){

files.put(new File(path) , "images[]");

}

}

}

MultiUploadOperation multiUpload = new MultiUploadOperation(this, url, texts, files);

multiUpload.upload(true , "正在上传...");

multiUpload.setOnMultiUploadLinister(new OnMultiUploadLinister() {

@Override

public void onSuccess(String result) {

try {

JSONObject jsonObj = new JSONObject(result);

int code = jsonObj.getInt("code");

if(code == 200){

ToastHelper.showShortToast(InputVideoAndInfoActivity.this, "上传成功");

finish();

}else{

ToastHelper.showShortToast(InputVideoAndInfoActivity.this, "上传未成功");

}

} catch (JSONException e) {

ToastHelper.showShortToast(InputVideoAndInfoActivity.this, "上传未成功");

}

}

@Override

public void onFailure(String error) {

ToastHelper.showShortToast(InputVideoAndInfoActivity.this, "网络超时,请稍候再试!");

}

});

}else{

ToastHelper.showShortToast(this, "请先拍视频或照片!");

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: