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, "請先拍視訊或照片!");
}
}