diff --git a/app/build.gradle b/app/build.gradle index 4134a89..3b4f3bb 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,8 +17,8 @@ android { applicationId "com.navinfo.outdoor" minSdkVersion 24 targetSdkVersion 30 - versionCode 46 - versionName "8.230214" + versionCode 47 + versionName "8.230223" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" ndk { diff --git a/app/src/main/java/com/navinfo/outdoor/adapter/StaySubmitAdapter.java b/app/src/main/java/com/navinfo/outdoor/adapter/StaySubmitAdapter.java index a2141c5..6fcf8e1 100644 --- a/app/src/main/java/com/navinfo/outdoor/adapter/StaySubmitAdapter.java +++ b/app/src/main/java/com/navinfo/outdoor/adapter/StaySubmitAdapter.java @@ -8,6 +8,7 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.CheckBox; +import android.widget.ProgressBar; import android.widget.TextView; import androidx.annotation.NonNull; @@ -119,20 +120,15 @@ public class StaySubmitAdapter extends RecyclerView.Adapter0&&poiEntity.getUploadProgress()!=poiEntity.getUploadMax()) { + holder.layerProgress.setVisibility(View.VISIBLE); + holder.pbUpload.setMax(poiEntity.getUploadMax()); + holder.pbUpload.setProgress(poiEntity.getUploadProgress()); + holder.tvUploadProgress.setText(poiEntity.getUploadProgress()+"/"+poiEntity.getUploadMax()); + } else { + holder.layerProgress.setVisibility(View.INVISIBLE); + } + // 显示上传状态 + if (poiEntity.getUploadResult()!=null&&!poiEntity.getUploadResult().trim().equals("")) { + holder.tvUploadResult.setVisibility(View.VISIBLE); + holder.tvUploadResult.setText(poiEntity.getUploadResult()); + holder.layerProgress.setVisibility(View.GONE); // 上传结果存在,不需要显示进度条 + } else { + holder.tvUploadResult.setVisibility(View.INVISIBLE); + } } @Override @@ -152,6 +165,9 @@ public class StaySubmitAdapter extends RecyclerView.Adapter { // 请求的 tag, 主要用于取消对应的请求 .params(params) .addFileParams("file", files) + .uploadInterceptor(new ProgressRequestBody.UploadInterceptor() { + @Override + public void uploadProgress(Progress progress) { + XLog.d(progress.speed); + XLog.d(progress.currentSize); + } + }) .tag(this) .execute(); } catch (IOException e) { diff --git a/app/src/main/java/com/navinfo/outdoor/room/PoiDatabase.java b/app/src/main/java/com/navinfo/outdoor/room/PoiDatabase.java index 4205139..536d594 100644 --- a/app/src/main/java/com/navinfo/outdoor/room/PoiDatabase.java +++ b/app/src/main/java/com/navinfo/outdoor/room/PoiDatabase.java @@ -28,7 +28,7 @@ import java.io.File; * 如果需要在主线程调用则使用allowMainThreadQueries进行说明。 */ -@Database(entities = {PoiEntity.class,ChargingPileEntity.class, LocationRecorder.class}, version = 3, exportSchema = false) +@Database(entities = {PoiEntity.class,ChargingPileEntity.class, LocationRecorder.class}, version = 5, exportSchema = false) public abstract class PoiDatabase extends RoomDatabase { private static final String DB_NAME = "navinfo.db"; private static volatile PoiDatabase instance; @@ -52,6 +52,8 @@ public abstract class PoiDatabase extends RoomDatabase { return Room.databaseBuilder(context, PoiDatabase.class, Constant.POI_DAO+"/"+DB_NAME) .addMigrations(migration_1_2) .addMigrations(migration_2_3) + .addMigrations(migration_3_4) + .addMigrations(migration_4_5) //.fallbackToDestructiveMigration()//数据库更新时删除数据重新创建 改动特别大的时候在用 .build(); } @@ -80,6 +82,25 @@ public abstract class PoiDatabase extends RoomDatabase { } }; + + // 增加POI字段 + private static Migration migration_3_4 = new Migration(3, 4) { + @Override + public void migrate(@NonNull SupportSQLiteDatabase database) { + database.execSQL("ALTER TABLE poi "+" ADD COLUMN uploadProgress INTEGER NOT NULL DEFAULT 0");//添加了一个上传进度 + database.execSQL("ALTER TABLE poi "+" ADD COLUMN credible INTEGER NOT NULL DEFAULT 0");//添加了一个置信度 + database.execSQL("ALTER TABLE poi "+" ADD COLUMN drawLine TEXT");//添加了一个用户绘制线型 + } + }; + + // 增加POI字段 + private static Migration migration_4_5 = new Migration(4, 5) { + @Override + public void migrate(@NonNull SupportSQLiteDatabase database) { + database.execSQL("ALTER TABLE poi "+" ADD COLUMN uploadMax INTEGER NOT NULL DEFAULT 0");//添加了一个上传总数 + database.execSQL("ALTER TABLE poi "+" ADD COLUMN uploadResult TEXT");//添加了一个上传结果 + } + }; public abstract PoiDao getPoiDao();//其他信息 public abstract ChargingPileDao getChargingPileDao();//充电桩 public abstract LocationRecorderDao getRecorderDao(); diff --git a/app/src/main/java/com/navinfo/outdoor/room/PoiEntity.java b/app/src/main/java/com/navinfo/outdoor/room/PoiEntity.java index 633e1e3..54fe029 100644 --- a/app/src/main/java/com/navinfo/outdoor/room/PoiEntity.java +++ b/app/src/main/java/com/navinfo/outdoor/room/PoiEntity.java @@ -48,8 +48,13 @@ public class PoiEntity implements Serializable { private int isLocalData;//是否是本地数据 0,服务 1,本地 private int isExclusive;//任务类型 0.普通任务,1.专属任务 2挑战任务, 3奖励任务 private int bodyId;//保存本地的bodyId - private int work_type;//0,待提交 1,提交中 + private int work_type;//0,待提交 1,提交中 2,已上传 private int record_way; //等同于 canReceived : 1是可领取 0是不可领取 + private int uploadProgress; // 上传进度 + private int uploadMax; // 上传数据总量-这里一般使用需要上传的文件数量作为总数,因此上传进度为已上传的文件数 + private int credible; // 置信度 + private String drawLine; // 用户绘制的线型 + private String uploadResult; //上传结果 public int getRecord_way() { return record_way; @@ -280,6 +285,46 @@ public class PoiEntity implements Serializable { this.detail = detail; } + public int getUploadProgress() { + return uploadProgress; + } + + public void setUploadProgress(int uploadProgress) { + this.uploadProgress = uploadProgress; + } + + public int getUploadMax() { + return uploadMax; + } + + public void setUploadMax(int uploadMax) { + this.uploadMax = uploadMax; + } + + public int getCredible() { + return credible; + } + + public void setCredible(int credible) { + this.credible = credible; + } + + public String getDrawLine() { + return drawLine; + } + + public void setDrawLine(String drawLine) { + this.drawLine = drawLine; + } + + public String getUploadResult() { + return uploadResult; + } + + public void setUploadResult(String uploadResult) { + this.uploadResult = uploadResult; + } + @Override public String toString() { return "PoiEntity{" + diff --git a/app/src/main/java/com/navinfo/outdoor/util/DataSaveUtils.java b/app/src/main/java/com/navinfo/outdoor/util/DataSaveUtils.java index cdafa84..1d61d14 100644 --- a/app/src/main/java/com/navinfo/outdoor/util/DataSaveUtils.java +++ b/app/src/main/java/com/navinfo/outdoor/util/DataSaveUtils.java @@ -73,7 +73,8 @@ public class DataSaveUtils { public void onError(); } - public Single>> getUploadSpliteFilesObservble(Activity mContext, PoiEntity poiEntity, List poiPicList) { + public Single getUploadSpliteFilesObservble(Activity mContext, PoiEntity poiEntity, List poiPicList) { + poiEntity.setUploadResult(""); int auditId = poiEntity.getBodyId(); File zipFile = new File(poiPicList.get(0).getParentFile(), auditId+".zip"); return Observable.create(new ObservableOnSubscribe() { @@ -96,6 +97,8 @@ public class DataSaveUtils { public Map apply(File file) throws Exception { // 每次执行上传都会切分数据,因为都会执行第一步,向服务器请求需要上传的分包数据 List splitFiles = FileSpliteMergeUtils.splitFile(file, Constant.DEFAULT_CUT_SIZE); + poiEntity.setUploadMax(splitFiles.size()); + sendRefreshItem(poiEntity); List chunkSizeList = new ArrayList<>(); for (File f: splitFiles) { chunkSizeList.add(f.length()); @@ -108,11 +111,15 @@ public class DataSaveUtils { poiEntity.setTaskStatus(100); PoiDatabase.getInstance(mContext).getPoiDao().updatePoiEntity(poiEntity); ToastUtils.Message(mContext, "数据:"+poiEntity.getName()+"已成功上传!"); + poiEntity.setUploadProgress(splitFiles.size()); // 上传进度为当前文件个数 + sendRefreshItem(poiEntity); } if (body==null) { throw new Exception(response.getMessage()); } - if (body.isEmpty()) { + if (body.isEmpty()) { // 服务返回空数据,说明该数据的所有分包数据都上传完成,没有需要上传的分包了 + poiEntity.setUploadProgress(splitFiles.size()); // 上传进度为当前文件个数 + sendRefreshItem(poiEntity); return new HashMap<>(); } String[] needUploadStrIndex = body.split(","); @@ -121,6 +128,8 @@ public class DataSaveUtils { for (int i = 0; i < needUploadStrIndex.length; i++) { needUploadIndex[i] = Integer.parseInt(needUploadStrIndex[i]); } + poiEntity.setUploadProgress(splitFiles.size()-needUploadIndex.length); // 上传进度为当前文件个数 + sendRefreshItem(poiEntity); // 根据返回的index,将需要上传的切分包数据流转到下一个流程 Map needUploadFileMap = new HashMap<>(); for (int index: needUploadIndex) { @@ -153,8 +162,12 @@ public class DataSaveUtils { // 执行上传流程 CommonResponse response = uploadSplitTask(mContext, auditId, fileEntry.getKey(), fileEntry.getValue()); if (response.getCode() != 200) { + poiEntity.setUploadResult("第"+fileEntry.getKey()+"个分包数据上传失败"); + sendRefreshItem(poiEntity); throw new Exception(response.getMessage()); } else { + poiEntity.setUploadProgress(poiEntity.getUploadProgress()+1); // 上传进度为当前文件个数 + sendRefreshItem(poiEntity); UMLog.mutlInfo(3, "已上传分包"+fileEntry.getKey()); // 上传成功,则删除该分包数据 if (fileEntry.getValue().exists()) { @@ -171,9 +184,11 @@ public class DataSaveUtils { @Override public void accept(List> entries) throws Exception { // 最终成功,调用finish接口 + poiEntity.setUploadResult("附件上传完成"); CommonResponse response = uploadTaskFinish(mContext, auditId); if (response.getCode() == 200) { // 更新成功,再次更新本地数据库 poiEntity.setTaskStatus(100); + poiEntity.setUploadProgress(poiEntity.getUploadMax()); PoiDatabase.getInstance(mContext).getPoiDao().updatePoiEntity(poiEntity); // 同时删除关联的照片文件和压缩包文件 if (zipFile.exists()) { @@ -189,21 +204,27 @@ public class DataSaveUtils { throw new Exception("数据:" + poiEntity.getName() + " 上传失败"); } } + }) + .map(new Function>, PoiEntity>() { + @Override + public PoiEntity apply(List> entries) throws Exception { + return poiEntity; + } }); } // 批量上传文件 public void uploadFiles(Activity mContext, PoiEntity poiEntity, List poiPicList, UploadCallback callback) { - getUploadSpliteFilesObservble(mContext, poiEntity, poiPicList) + getUploadSpliteFilesObservble(mContext ,poiEntity, poiPicList) .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new SingleObserver>>() { + .subscribe(new SingleObserver() { @Override public void onSubscribe(Disposable d) { callback.onStart(); } @Override - public void onSuccess(List> entries) { + public void onSuccess(PoiEntity poiEntity) { ToastUtils.Message(mContext, "分包数据上传完成!"); Message obtain1 = Message.obtain(); obtain1.what = Constant.NEST_WORD_SUBMIT; @@ -248,6 +269,16 @@ public class DataSaveUtils { return null; } + /** + * EventBus通知列表当前的上传进度 + * */ + private void sendRefreshItem(PoiEntity poiEntity) { + Message msg = Message.obtain(); + msg.what = Constant.EVENT_WHAT_UPLOAD_PROGRESS; + msg.obj = poiEntity; + EventBus.getDefault().post(msg); + } + /** * 上传分包数据 * */ diff --git a/app/src/main/java/com/navinfo/outdoor/util/PoiSaveUtils.java b/app/src/main/java/com/navinfo/outdoor/util/PoiSaveUtils.java index 42bc32e..b31e465 100644 --- a/app/src/main/java/com/navinfo/outdoor/util/PoiSaveUtils.java +++ b/app/src/main/java/com/navinfo/outdoor/util/PoiSaveUtils.java @@ -28,9 +28,11 @@ import org.greenrobot.eventbus.EventBus; import java.io.File; import java.io.IOException; +import java.util.AbstractMap; import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Objects; import java.util.function.Predicate; import java.util.stream.Collectors; @@ -75,54 +77,43 @@ public class PoiSaveUtils { public void uploadPoiEntityBatch(List poiEntityList) { if (poiEntityList != null&&!poiEntityList.isEmpty()) { // 因为道路任务和POI录像任务需要分包提交,因此和其他要素分开,分别放在两个管道里 - List chargePoiEntityList = new ArrayList<>();/*充电站POI列表*/ - List spliteFilePoiEntityList = new ArrayList<>();/*充电站POI列表*/ - List otherPoiEntityList = new ArrayList<>();/*充电站POI列表*/ - for (PoiEntity poiEntity: poiEntityList) { + List> chargePoiEntityList = new ArrayList<>();/*充电站POI列表*/ + List> spliteFilePoiEntityList = new ArrayList<>();/*充电站POI列表*/ + List> otherPoiEntityList = new ArrayList<>();/*充电站POI列表*/ + for (int i = 0; i < poiEntityList.size(); i++) { + PoiEntity poiEntity = poiEntityList.get(i); if (Constant.submitIdSet.contains(poiEntity.getId())) { continue; } + Constant.submitIdSet.add(poiEntity.getId()); // 记录全局的正在提交的数据 if (poiEntity.getType()==2) { - chargePoiEntityList.add(poiEntity); + chargePoiEntityList.add(new AbstractMap.SimpleEntry<>(i, poiEntity)); } else if (poiEntity.getType() == 3 || poiEntity.getType() == 4) { - spliteFilePoiEntityList.add(poiEntity); + spliteFilePoiEntityList.add(new AbstractMap.SimpleEntry<>(i, poiEntity)); } else { - otherPoiEntityList.add(poiEntity); + otherPoiEntityList.add(new AbstractMap.SimpleEntry<>(i, poiEntity)); } } Observable chargePoiObserable = Observable.fromIterable(chargePoiEntityList) .subscribeOn(Schedulers.io()) - .doOnNext(new Consumer() { + .doOnNext(new Consumer>() { @Override - public void accept(PoiEntity poiEntity) throws Exception { - Constant.submitIdSet.add(poiEntity.getId()); // 记录全局的正在提交的数据 + public void accept(Map.Entry integerPoiEntityEntry) throws Exception { + PoiEntity poiEntity = integerPoiEntityEntry.getValue(); if (savePoiNet(poiEntity) == 200&&saveChargingPileByChargingStation(poiEntity)) { // 网络保存成功 - if (Constant.submitIdSet.contains(poiEntity.getId())) { - Constant.submitIdSet.remove(poiEntity.getId()); - } if (savePoiNet(poiEntity) == 200) { // 网络保存-冗余操作 // 开始上传流程 if (saveChargingPileUploadChargingStation(poiEntity)) { - uploadPoiNet(poiEntity); + uploadPoiNet(integerPoiEntityEntry); }else { - bInt++; - poiEntity.setChecked(false); - poiEntity.setWork_type(0); - PoiDatabase.getInstance(mContext).getPoiDao().updatePoiEntity(poiEntity); + poiEntityUploadFailed(poiEntity, "充电桩数据上传失败!"); } }else { - bInt++; - poiEntity.setChecked(false); - poiEntity.setWork_type(0); - PoiDatabase.getInstance(mContext).getPoiDao().updatePoiEntity(poiEntity); + poiEntityUploadFailed(poiEntity, "网络保存失败"); } } else { - bInt++; - poiEntity.setChecked(false); - poiEntity.setWork_type(0); - PoiDatabase.getInstance(mContext).getPoiDao().updatePoiEntity(poiEntity); - Constant.submitIdSet.remove(poiEntity.getId()); + poiEntityUploadFailed(poiEntity, "网络保存失败"); } } }) @@ -130,17 +121,15 @@ public class PoiSaveUtils { // 处理普通数据 Observable otherObserable = Observable.fromIterable(otherPoiEntityList) .subscribeOn(Schedulers.io()) - .doOnNext(new Consumer() { + .doOnNext(new Consumer>() { @Override - public void accept(PoiEntity poiEntity) throws Exception { + public void accept(Map.Entry integerPoiEntityEntry) throws Exception { + PoiEntity poiEntity = integerPoiEntityEntry.getValue(); if (savePoiNet(poiEntity) == 200) { // 网络保存成功 //走上传流程: - uploadPoiNet(poiEntity); + uploadPoiNet(integerPoiEntityEntry); }else { - bInt++; - poiEntity.setChecked(false); - poiEntity.setWork_type(0); - PoiDatabase.getInstance(mContext).getPoiDao().updatePoiEntity(poiEntity); + poiEntityUploadFailed(poiEntity, "网络保存失败"); } } }) @@ -148,44 +137,43 @@ public class PoiSaveUtils { // 处理需要分包上传数据的POI录像和道路数据 Observable spliteFileObserable = Observable.fromIterable(spliteFilePoiEntityList) .subscribeOn(Schedulers.io()) - .doOnNext(new Consumer() { + .doOnNext(new Consumer>() { @Override - public void accept(PoiEntity poiEntity) throws Exception { + public void accept(Map.Entry integerPoiEntityEntry) throws Exception { + PoiEntity poiEntity = integerPoiEntityEntry.getValue(); if (savePoiNet(poiEntity) == 200) { // 网络保存成功 //走上传流程: if (poiEntity == null) { - bInt++; + poiEntityUploadFailed(poiEntity, "当前数据为null!"); return; } int bodyId = poiEntity.getBodyId(); if (bodyId == 0) { - bInt++; + poiEntityUploadFailed(poiEntity, "bodyId为0"); return; } }else { - bInt++; - poiEntity.setChecked(false); - poiEntity.setWork_type(0); - PoiDatabase.getInstance(mContext).getPoiDao().updatePoiEntity(poiEntity); + poiEntityUploadFailed(poiEntity, "网络保存失败"); } } }) - .concatMap(new Function>() { + .concatMap(new Function, ObservableSource>() { @Override - public ObservableSource apply(PoiEntity poiEntity) throws Exception { + public ObservableSource apply(Map.Entry integerPoiEntityEntry) throws Exception { + PoiEntity poiEntity = integerPoiEntityEntry.getValue(); List photoFileList = AWMp4ParserHelper.getInstance().getFileListByUUID(poiEntity.getId()); if (photoFileList == null||photoFileList.isEmpty()) { - bInt++; + poiEntityUploadFailed(poiEntity, "照片数据获取为空!"); return Observable.empty(); } return DataSaveUtils.getInstance().getUploadSpliteFilesObservble(mContext, poiEntity, photoFileList) .toObservable(); } }) - .doOnNext(new Consumer() { + .doOnNext(new Consumer() { @Override - public void accept(Object o) throws Exception { - anInt++; + public void accept(PoiEntity poiEntity) throws Exception { + poiEntityUploadSuccess(poiEntity, "上传成功"); } }) .doOnError(new Consumer() { @@ -234,80 +222,31 @@ public class PoiSaveUtils { Constant.isPresent = true; } }); - - - -// new Thread(new Runnable() { -// @Override -// public void run() { -// anInt = 0; -// bInt = 0; -// Log.d("PoiSaveUtils", "开始上传"); -// for (int i = 0; i < poiEntityList.size(); i++) { -// PoiEntity poiEntity = poiEntityList.get(i); -// Log.d("PoiSaveUtils", "poiEntity.getType():"+poiEntity.getType()); -// if (Constant.submitIdSet.contains(poiEntity.getId())) { -// continue; -// } -// if (poiEntity.getType() == 2) { // 如果是充电站数据,首先检查子充电桩的状态 -// Constant.submitIdSet.add(poiEntity.getId()); // 记录全局的正在提交的数据 -// if (savePoiNet(poiEntity) == 200&&saveChargingPileByChargingStation(poiEntity)) { // 网络保存成功 -// Constant.submitIdSet.remove(poiEntity.getId()); -// if (savePoiNet(poiEntity) == 200) { // 网络保存-冗余操作 -// // 开始上传流程 -// if (saveChargingPileUploadChargingStation(poiEntity)) { -// uploadPoiNet(poiEntity); -// }else { -// bInt++; -// poiEntity.setChecked(false); -// poiEntity.setWork_type(0); -// PoiDatabase.getInstance(mContext).getPoiDao().updatePoiEntity(poiEntity); -// sendUploadMessage(poiEntityList.size(), anInt, bInt); -// } -// }else { -// bInt++; -// poiEntity.setChecked(false); -// poiEntity.setWork_type(0); -// PoiDatabase.getInstance(mContext).getPoiDao().updatePoiEntity(poiEntity); -// sendUploadMessage(poiEntityList.size(), anInt, bInt); -// } -// } else { -// bInt++; -// poiEntity.setChecked(false); -// poiEntity.setWork_type(0); -// PoiDatabase.getInstance(mContext).getPoiDao().updatePoiEntity(poiEntity); -// Constant.submitIdSet.remove(poiEntity.getId()); -// sendUploadMessage(poiEntityList.size(), anInt, bInt); -// } -// } else {//其他类型 -// if (savePoiNet(poiEntity) == 200) { // 网络保存成功 -// //走上传流程: -// uploadPoiNet(poiEntity); -// }else { -// bInt++; -// poiEntity.setChecked(false); -// poiEntity.setWork_type(0); -// PoiDatabase.getInstance(mContext).getPoiDao().updatePoiEntity(poiEntity); -// sendUploadMessage(poiEntityList.size(), anInt, bInt); -// } -// } -// } -// } -// }).start(); } } - private void sendUploadMessage(int count, int success, int fail) { - if (success+fail == count) { // 成功和失败的个数与数据总数相同 - Message obtain = Message.obtain(); - obtain.what = Constant.STAY_SUBMIT_ITEM; - obtain.obj = true; - EventBus.getDefault().post(obtain); - } - Message obtain1 = Message.obtain(); - obtain1.what = Constant.NEST_WORD_SUBMIT; - obtain1.obj = "批量提交数据,共选中"+count+"条数据,成功:" + anInt + "条, 失败:" + bInt+"条"; - EventBus.getDefault().post(obtain1); + /** + * 处理poi数据上传失败 + * */ + private void poiEntityUploadFailed(PoiEntity poiEntity, String errorInfo) { + poiEntity.setUploadResult(errorInfo); + bInt++; + poiEntity.setWork_type(-1); + poiEntity.setUploadProgress(0); + PoiDatabase.getInstance(mContext).getPoiDao().updatePoiEntity(poiEntity); + Constant.submitIdSet.remove(poiEntity.getId()); + sendRefreshItem(poiEntity); + } + /** + * 处理poi数据上传成功 + * */ + private void poiEntityUploadSuccess(PoiEntity poiEntity, String info) { + poiEntity.setUploadResult(info); + anInt++; + poiEntity.setWork_type(2); + PoiDatabase.getInstance(mContext).getPoiDao().updatePoiEntity(poiEntity); + Constant.submitIdSet.remove(poiEntity.getId()); + sendRefreshItem(poiEntity); } /* @@ -404,14 +343,15 @@ public class PoiSaveUtils { /** * 最终上传POI数据到服务 */ - public void uploadPoiNet(PoiEntity poiEntity) { + public void uploadPoiNet(Map.Entry integerPoiEntityEntry) { + PoiEntity poiEntity = integerPoiEntityEntry.getValue(); if (poiEntity == null) { - bInt++; + poiEntityUploadFailed(poiEntity, "poiEntity为null"); return; } int bodyId = poiEntity.getBodyId(); if (bodyId == 0) { - bInt++; + poiEntityUploadFailed(poiEntity, "bodyId为0"); return; } ArrayList photoFile = new ArrayList<>(); @@ -424,12 +364,14 @@ public class PoiSaveUtils { } } } + poiEntity.setUploadMax(photoFile.size()); //1 "POI"2 "充电站"3 "POI录像"4 "道路录像"5 "其他"6 "面状任务" if (poiEntity.getType() == 1) { initList(HttpInterface.POI_TASK_UPLOAD_PIC, photoFile, poiEntity); } else if (poiEntity.getType() == 2) { initList(HttpInterface.C_TASK_UP_LOAD_PIC, photoFile, poiEntity); - } else if (poiEntity.getType() == 3) { + } + else if (poiEntity.getType() == 3) { List videoFileList = AWMp4ParserHelper.getInstance().getFileListByUUID(poiEntity.getId()); if (videoFileList != null && !videoFileList.isEmpty()) { boolean existsPic = PoiSaveUtils.getInstance(mContext).checkPicExists(videoFileList); @@ -505,31 +447,21 @@ public class PoiSaveUtils { // File fileZip = new File(Constant.PICTURE_FOLDER, "files" + ".zip"); // ZipUtil.zipFiles(videoFileList, fileZip, null); // photoFile.add(fileZip); - } else { + } + else { Log.d("TAGSS", "videoFileList: 失败" + bInt); bInt++; return; } -// if (photoFile.size() > 0) { -// long zipTrueSize = ZipUtils.getZipTrueSize(photoFile.get(0).getAbsolutePath()); -// if (zipTrueSize > 0) { -// initList(HttpInterface.ROAD_TASK_UPLOAD_PIC, photoFile, poiEntity); -// } else { -// Log.d("TAGSS", "photoFile: 失败" + bInt); -// for (int i = 0; i < photoFile.size(); i++) { -// photoFile.get(i).delete(); -// } -// bInt++; -// return; -// } -// } - } else if (poiEntity.getType() == 5) { + } + else if (poiEntity.getType() == 5) { initList(HttpInterface.OTHER_TASK_UPLOAD_PIC, photoFile, poiEntity); } } private void initList(String url, List list, PoiEntity poiEntity) { try { + poiEntity.setUploadResult(""); HttpParams httpParams = new HttpParams(); httpParams.put("auditId", poiEntity.getBodyId()); Response execute = OkGoBuilder.getInstance() @@ -542,56 +474,40 @@ public class PoiSaveUtils { .postFileSynchronization(); if (execute == null) { Log.d("TAGSS", "execute: 失败" + bInt); - poiEntity.setChecked(false); - poiEntity.setWork_type(0); - PoiDatabase.getInstance(mContext).getPoiDao().updatePoiEntity(poiEntity); - bInt++; + poiEntityUploadFailed(poiEntity, "服务返回结果为null"); return; } if (execute.code() != 200) { Log.d("TAGSS", "code: 失败" + bInt); - poiEntity.setChecked(false); - poiEntity.setWork_type(0); - PoiDatabase.getInstance(mContext).getPoiDao().updatePoiEntity(poiEntity); - bInt++; + poiEntityUploadFailed(poiEntity, "服务返回code码不为200"+execute.code()); return; } String bodyStr = execute.body().string(); if (bodyStr == null) { Log.d("TAGSS", "bodyStr: 失败" + bInt); - poiEntity.setChecked(false); - poiEntity.setWork_type(0); - PoiDatabase.getInstance(mContext).getPoiDao().updatePoiEntity(poiEntity); - bInt++; + poiEntityUploadFailed(poiEntity, "服务返回body为null"); return; } OtherUploadPicBean otherUploadPicBean = new Gson().fromJson(bodyStr, OtherUploadPicBean.class); if (otherUploadPicBean!=null){ if (otherUploadPicBean.getCode() == 200) { - poiEntity.setChecked(false); poiEntity.setTaskStatus(100); - PoiDatabase.getInstance(mContext).getPoiDao().updatePoiEntity(poiEntity); for (int i = 0; i < list.size(); i++) { list.get(i).delete(); } PoiEntityDeleteUtil.getInstance().deleteUtil(mContext, poiEntity); Log.d("TAGSS", "uploadPoiNet: 成功" + anInt); - anInt++; + poiEntity.setUploadProgress(poiEntity.getUploadMax()); + poiEntityUploadSuccess(poiEntity, ""); return; } else { - poiEntity.setChecked(false); - poiEntity.setWork_type(0); - PoiDatabase.getInstance(mContext).getPoiDao().updatePoiEntity(poiEntity); + poiEntityUploadFailed(poiEntity, "错误:"+otherUploadPicBean.getMessage()); Log.d("TAGSS", "uploadPoiNet: 失败" + bInt); - bInt++; return; } }else { - poiEntity.setChecked(false); - poiEntity.setWork_type(0); - PoiDatabase.getInstance(mContext).getPoiDao().updatePoiEntity(poiEntity); Log.d("TAGSS", "uploadPoiNet: 失败" + bInt); - bInt++; + poiEntityUploadFailed(poiEntity, "Json转换失败"); return; } @@ -600,6 +516,16 @@ public class PoiSaveUtils { } } + /** + * EventBus通知列表当前的上传进度 + * */ + private void sendRefreshItem(PoiEntity poiEntity) { + Message msg = Message.obtain(); + msg.what = Constant.EVENT_WHAT_UPLOAD_PROGRESS; + msg.obj = poiEntity; + EventBus.getDefault().post(msg); + } + /** * 根据充电站数据检查充电桩数据,如果没有网络保存,则批量网络保存 */ diff --git a/app/src/main/res/drawable/default_progress.xml b/app/src/main/res/drawable/default_progress.xml new file mode 100644 index 0000000..6178738 --- /dev/null +++ b/app/src/main/res/drawable/default_progress.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/stay_item.xml b/app/src/main/res/layout/stay_item.xml index d7833f6..a9d67bd 100644 --- a/app/src/main/res/layout/stay_item.xml +++ b/app/src/main/res/layout/stay_item.xml @@ -5,6 +5,7 @@ android:layout_height="wrap_content"> + + + + + + \ No newline at end of file