Skip to content

Commit

Permalink
增加图片上传的基类方法
Browse files Browse the repository at this point in the history
  • Loading branch information
XinYiWorld committed Apr 25, 2017
1 parent eaf216f commit 2432288
Show file tree
Hide file tree
Showing 9 changed files with 168 additions and 14 deletions.
2 changes: 1 addition & 1 deletion .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import com.xinyi.czbasedevtool.base.bean.UploadFileWrapper;

import java.util.List;
import java.util.Map;

/**
* 发起一系列的网络请求接口,不用判断网络状态。
Expand Down Expand Up @@ -36,4 +37,10 @@ public interface I_Real_RequestServer {

//下载文件
void realDownloadFile(View executor,int requestCode,String fileUrl);

//上传单个文件(同时可以上传字段参数)
<T,K> void realUpOneFileAndData(View executor, int requestCode, Class<T> serviceClass, String methodName, final Class<K> convertedClass, Map<String,String> params, UploadFileWrapper uploadFileWrapper, boolean... isTargetBeanAsList);

//上传多个文件(同时可以上传字段参数)
<T,K> void realUpFilesAndData(View executor,int requestCode, Class<T> serviceClass, String methodName, final Class<K> convertedClass, Map<String,String> params,List<UploadFileWrapper> uploadFileWrappers, boolean... isTargetBeanAsList);
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import com.xinyi.czbasedevtool.base.bean.UploadFileWrapper;

import java.util.List;
import java.util.Map;

/**
* 准备发起一系列的网络请求接口,不过都需要判断网络状态。
Expand All @@ -28,12 +29,18 @@ public interface I_Try_RequestServer extends I_BindHttpResultHandler{
//不对服务器原始请求结果进行map映射
<T> void requestDataWithOutConvert(View executor,int requestCode,Class<T> serviceClass, String methodName, Object[] params);

//上传多个文件
//上传多个文件(只限于上传文件,没有上传字段参数)
<T> void uploadFiles(View executor,int requestCode,Class<T> serviceClass, String methodName, List<UploadFileWrapper> uploadFileWrappers);

//上传单个文件
//上传单个文件(只限于上传文件,没有上传字段参数)
<T> void uploadOneFile(View executor,int requestCode,Class<T> serviceClass, String methodName, UploadFileWrapper uploadFileWrapper);

//下载文件
void downloadFile(View executor,int requestCode,String fileUrl);

//上传单个文件(同时可以上传字段参数)
<T,K> void uploadOneFileAndData(View executor, int requestCode, Class<T> serviceClass, String methodName, final Class<K> convertedClass, Map<String,String> params, UploadFileWrapper uploadFileWrapper, boolean... isTargetBeanAsList);

//上传多个文件(同时可以上传字段参数)
<T,K> void uploadFilesAndData(View executor,int requestCode, Class<T> serviceClass, String methodName, final Class<K> convertedClass, Map<String,String> params,List<UploadFileWrapper> uploadFileWrappers, boolean... isTargetBeanAsList);
}
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
import com.xinyi.czbasedevtool.base.view.ContentViewHolder;

import java.util.List;
import java.util.Map;

/**
* BaseActivity抽象类-第1层
Expand Down Expand Up @@ -271,6 +272,16 @@ public void downloadFile(View executor, int requestCode, String fileUrl) {
}


@Override
public <T, K> void uploadOneFileAndData(View executor, int requestCode, Class<T> serviceClass, String methodName, Class<K> convertedClass, Map<String, String> params, UploadFileWrapper uploadFileWrapper, boolean... isTargetBeanAsList) {
httpMaster.uploadOneFileAndData(executor,requestCode,serviceClass,methodName,convertedClass,params,uploadFileWrapper,isTargetBeanAsList);
}

@Override
public <T, K> void uploadFilesAndData(View executor, int requestCode, Class<T> serviceClass, String methodName, Class<K> convertedClass, Map<String, String> params, List<UploadFileWrapper> uploadFileWrappers, boolean... isTargetBeanAsList) {
httpMaster.uploadFilesAndData(executor,requestCode,serviceClass,methodName,convertedClass,params,uploadFileWrappers,isTargetBeanAsList);
}

@Override
public void bindHttpResultHandler(I_HttpResultHandler i_httpResultHandler) {
httpMaster.bindHttpResultHandler(i_httpResultHandler);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import com.xinyi.czbasedevtool.base.view.ContentViewHolder;

import java.util.List;
import java.util.Map;

/**
* BaseActivity抽象类-第1层
Expand Down Expand Up @@ -234,6 +235,17 @@ public void downloadFile(View executor, int requestCode, String fileUrl) {
httpMaster.downloadFile(executor, requestCode, fileUrl);
}

@Override
public <T, K> void uploadOneFileAndData(View executor, int requestCode, Class<T> serviceClass, String methodName, Class<K> convertedClass, Map<String, String> params, UploadFileWrapper uploadFileWrapper, boolean... isTargetBeanAsList) {
httpMaster.uploadOneFileAndData(executor,requestCode,serviceClass,methodName,convertedClass,params,uploadFileWrapper,isTargetBeanAsList);
}

@Override
public <T, K> void uploadFilesAndData(View executor, int requestCode, Class<T> serviceClass, String methodName, Class<K> convertedClass, Map<String, String> params, List<UploadFileWrapper> uploadFileWrappers, boolean... isTargetBeanAsList) {
httpMaster.uploadFilesAndData(executor,requestCode,serviceClass,methodName,convertedClass,params,uploadFileWrappers,isTargetBeanAsList);
}


//绑定结果处理器
@Override
public void bindHttpResultHandler(I_HttpResultHandler i_httpResultHandler) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import okhttp3.ResponseBody;
Expand Down Expand Up @@ -188,6 +189,18 @@ public void downloadFile(View executor, int requestCode, String fileUrl) {
checkNetStateAndDecideIfGoNext(executor, requestCode, fileUrl);
}

@Override
public <T, K> void uploadOneFileAndData(View executor, int requestCode, Class<T> serviceClass, String methodName, Class<K> convertedClass, Map<String,String> params, UploadFileWrapper uploadFileWrapper, boolean... isTargetBeanAsList) {
ArrayList<UploadFileWrapper> uploadFileWrappers = new ArrayList<>();
uploadFileWrappers.add(uploadFileWrapper);
uploadFilesAndData(executor,requestCode,serviceClass,methodName,convertedClass,params,uploadFileWrappers,isTargetBeanAsList);
}

@Override
public <T, K> void uploadFilesAndData(View executor, int requestCode, Class<T> serviceClass, String methodName, Class<K> convertedClass, Map<String,String> params, List<UploadFileWrapper> uploadFileWrappers, boolean... isTargetBeanAsList) {
checkNetStateAndDecideIfGoNext(executor,requestCode,serviceClass,methodName,convertedClass,params,uploadFileWrappers,true,isTargetBeanAsList);
}


@Override
public void realDownloadFile(View executor, int requestCode, String fileUrl) {
Expand All @@ -202,6 +215,36 @@ public void realDownloadFile(View executor, int requestCode, String fileUrl) {

}

@Override
public <T, K> void realUpOneFileAndData(View executor, int requestCode, Class<T> serviceClass, String methodName, Class<K> convertedClass, Map<String,String> params, UploadFileWrapper uploadFileWrapper, boolean... isTargetBeanAsList) {
List<UploadFileWrapper> uploadFileWrappers = new ArrayList<>();
uploadFileWrappers.add(uploadFileWrapper);
realUpFilesAndData(executor,requestCode,serviceClass,methodName,convertedClass,params,uploadFileWrappers,isTargetBeanAsList);
}

@Override
public <T, K> void realUpFilesAndData(View executor, int requestCode, Class<T> serviceClass, String methodName, Class<K> convertedClass, Map<String,String> params, List<UploadFileWrapper> uploadFileWrappers, boolean... isTargetBeanAsList) {
if (progressView != null) {
progressView.onShowProgressDialog();
}
Method serviceExecuteMethod = reflectServiceMethod(serviceClass, methodName);

//如果方法名不存在抛出异常
ExceptionUtil.throwNullPointerException(serviceExecuteMethod, new ExceptionUtil.ExceptionHappenListener() {
@Override
public void doNext() {
hideProgressView();
}
});

try {
executeService(executor, requestCode, serviceClass, convertedClass, params, uploadFileWrappers,serviceExecuteMethod, isTargetBeanAsList);
} catch (Exception e) {
e.printStackTrace();
hideProgressView();
}
}


private <T> void checkNetStateAndDecideIfGoNext(final View executor, final int requestCode, final Class<T> serviceClass, final String methodName, final List<UploadFileWrapper> uploadFileWrappers) {
//网络环境判断
Expand Down Expand Up @@ -260,6 +303,32 @@ public void onClick(DialogInterface dialog, int which) {
}
}

private <T, K> void checkNetStateAndDecideIfGoNext(final View executor, final int requestCode, final Class<T> serviceClass, final String methodName, final Class<K> convertedClass, final Map<String,String> params, final List<UploadFileWrapper> uploadFileWrappers , final boolean needConvert, final boolean... isTargetBeanAsList) {
//网络环境判断
if (!NetUtil.isConnected(mContext)) {
ToastUtil.shortT(mContext,"请开启网络!");
} else if (!NetUtil.isWifi(mContext)) {
SystemDialogFactory.getConfirmDialog(mContext, "您确认在非Wifi状态下请求数据吗?", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (needConvert) {
realUpFilesAndData(executor, requestCode, serviceClass, methodName, convertedClass, params, uploadFileWrappers,isTargetBeanAsList);
} else {
//TODO
// realRequestDataWithOutConvert(executor, requestCode, serviceClass, methodName, params);
}
}
}).show();
} else {
if (needConvert) {
realUpFilesAndData(executor, requestCode, serviceClass, methodName, convertedClass, params, uploadFileWrappers,isTargetBeanAsList);
} else {
//TODO
// realRequestDataWithOutConvert(executor, requestCode, serviceClass, methodName, params);
}
}
}


private void checkNetStateAndDecideIfGoNext(final View executor, final int requestCode, final String fileUrl) {
//网络环境判断
Expand Down Expand Up @@ -417,7 +486,7 @@ private <T> void executeServiceWithoutConvert(final View executor, int requestCo
private <T, K> void executeService(final View executor, int requestCode, Class<T> serviceClass, Class<K> convertedClass, Object[] params, Method serviceExecuteMethod, boolean[] isTargetBeanAsList) throws IllegalAccessException, InvocationTargetException {
setState(executor, false);
if (params != null) { //有参
((Observable<BaseHttpResultBean>) (serviceExecuteMethod.invoke(RetrofitClient.getService(serviceClass), params)))
((Observable<BaseHttpResultBean>) (serviceExecuteMethod.invoke(RetrofitClient.getService(serviceClass), params)))
// .map(getFunc(convertedClass, isTargetBeanAsList))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
Expand All @@ -431,9 +500,18 @@ private <T, K> void executeService(final View executor, int requestCode, Class<T
}
}

private <T> void executeService(final View executor, int requestCode, Class<T> serviceClass, Method serviceExecuteMethod, List<UploadFileWrapper> parts) throws IllegalAccessException, InvocationTargetException {

private <T, K> void executeService(final View executor, int requestCode, Class<T> serviceClass, Class<K> convertedClass,Map<String,String> params, List<UploadFileWrapper> uploadFileWrappers, Method serviceExecuteMethod, boolean[] isTargetBeanAsList) throws IllegalAccessException, InvocationTargetException {
setState(executor, false);
((Observable<BaseHttpResultBean>) (serviceExecuteMethod.invoke(RetrofitClient.getService(serviceClass), MultipartGenerator.generate(params,uploadFileWrappers))))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(getObserver(executor, requestCode));
}

private <T> void executeService(final View executor, int requestCode, Class<T> serviceClass, Method serviceExecuteMethod, List<UploadFileWrapper> uploadFileWrappers) throws IllegalAccessException, InvocationTargetException {
setState(executor, false);
((Observable<BaseHttpResultBean>) (serviceExecuteMethod.invoke(RetrofitClient.getService(serviceClass), MultipartGenerator.generate(parts))))
((Observable<BaseHttpResultBean>) (serviceExecuteMethod.invoke(RetrofitClient.getService(serviceClass), MultipartGenerator.generate(uploadFileWrappers))))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(getObserver(executor, requestCode));
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package com.xinyi.czbasedevtool.base.manager.net_about;

import android.os.Environment;

import com.xinyi.czbasedevtool.base.bean.UploadFileWrapper;

import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import okhttp3.MediaType;
import okhttp3.MultipartBody;
Expand All @@ -28,6 +28,7 @@ public static MultipartBody.Part generate(UploadFileWrapper uploadFileWrapper){
// create RequestBody instance from file
RequestBody requestFile =
RequestBody.create(MediaType.parse("multipart/form-data"), uploadFileWrapper.getFile());

return MultipartBody.Part.createFormData(uploadFileWrapper.getFormName(), uploadFileWrapper.getFile().getName(), requestFile);
}

Expand All @@ -39,4 +40,26 @@ public static List<MultipartBody.Part> generate(List<UploadFileWrapper> uploadFi
}
return parts;
}

public static List<MultipartBody.Part> generate(Map<String,String> params, List<UploadFileWrapper> uploadFileWrappers){
List<MultipartBody.Part> parts = new ArrayList<>(uploadFileWrappers.size());
//添加字段part
if(params != null){
Set<String> keySet = params.keySet();
for (Iterator<String> it = keySet.iterator(); it.hasNext();){
String key = it.next();
String value = params.get(key);
parts.add(MultipartBody.Part.createFormData(key,value));
}
}

if (uploadFileWrappers == null || uploadFileWrappers.size() == 0) return parts; //不传图片

//添加图片part
for (int i = 0; i <uploadFileWrappers.size(); i++) {
parts.add(generate(uploadFileWrappers.get(i)));
}
return parts;
}

}
18 changes: 13 additions & 5 deletions app/src/main/java/xinyi/com/czdevmodule/Fragment1.java
Original file line number Diff line number Diff line change
@@ -1,21 +1,26 @@
package xinyi.com.czdevmodule;

import android.graphics.Color;
import android.os.Environment;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.View;

import com.xinyi.czbasedevtool.base.bean.BaseHttpResponseBean;
import com.xinyi.czbasedevtool.base.bean.UploadFileWrapper;
import com.xinyi.czbasedevtool.base.main.DefaultBaseFragment;
import com.xinyi.czbasedevtool.base.manager.DataCleanManager;
import com.xinyi.czbasedevtool.base.utils.RegularUtil;
import com.xinyi.czbasedevtool.base.manager.net_about.RetrofitClient;
import com.xinyi.czbasedevtool.base.utils.ToastUtil;
import com.xinyi.czbasedevtool.base.view.ContentViewHolder;
import com.xinyi.czbasedevtool.base.view.round.RoundTextView;

import java.io.File;
import java.io.IOException;
import java.util.HashMap;

import xinyi.com.czdevmodule.net_test.retrofit.UserBean;
import xinyi.com.czdevmodule.net_test.retrofit.action.UserAction;
import xinyi.com.czdevmodule.net_test.retrofit.callback.IUserRegistCallBack;
import xinyi.com.czdevmodule.net_test.retrofit.service.UserService;

Expand All @@ -30,8 +35,6 @@ public boolean useDataBinding() {
return false;
}



@Override
public int getLayoutID() {
return R.layout.fragment1;
Expand Down Expand Up @@ -64,7 +67,12 @@ public void bindView(ContentViewHolder contentViewHolder) throws IOException {
roundTextView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ToastUtil.shortT(mContext, "" + RegularUtil.isEmail("[email protected]"));
RetrofitClient.setHasToken(true);
RetrofitClient.setBaseUrl("http://app.bestbeijing.top/");
HashMap<String, String> map = new HashMap<>();
map.put("user_id","402");
UploadFileWrapper logo = new UploadFileWrapper(new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/123.jpg"), "logo");
uploadOneFileAndData(v,100,UserAction.class,"getOrSaveCompanyInfo",Object.class,map,logo,false);
}
});

Expand All @@ -91,7 +99,7 @@ public String getLeftTextString() {

@Override
public <T> void onSuccess(int requestCode, BaseHttpResponseBean codeInfoBean, T successBean) {

ToastUtil.shortT(mContext,"dsalfjas");
}


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,14 @@

import com.xinyi.czbasedevtool.base.bean.BaseHttpResultBean;

import java.util.List;

import okhttp3.MultipartBody;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.Part;
import rx.Observable;

/**
Expand All @@ -21,4 +26,7 @@ public interface UserAction {
Observable<BaseHttpResultBean> regist(@Field("phone") String phone, @Field("cat") int cat, @Field("passwd") String passwd);


@Multipart
@POST("index.php?g=people&m=company&a=company_save")
Observable<BaseHttpResultBean> getOrSaveCompanyInfo(@Part() List<MultipartBody.Part> parts);
}

0 comments on commit 2432288

Please sign in to comment.