android模拟表单提交多数据

移动开发,经常会遇到图片(多图片),视频,录音,文本信息等复杂数据的提交问题,所以可以让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, "请先拍视频或照片!");
        }
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值