From 27f41d98d61b6e3c88457a92719471595018b012 Mon Sep 17 00:00:00 2001 From: wangdongsheng Date: Tue, 14 Sep 2021 16:04:12 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E6=8A=A5=E8=BD=A8=E8=BF=B9=E5=B1=95?= =?UTF-8?q?=E7=A4=BA=EF=BC=8C=E6=8F=90=E4=BA=A4=E6=94=BE=E5=88=B0=E5=90=8E?= =?UTF-8?q?=E5=8F=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 1 + app/libs/jacob.jar | Bin 0 -> 47833 bytes app/src/main/AndroidManifest.xml | 2 + .../outdoor/activity/HomeActivity.java | 18 +- .../outdoor/activity/LoginActivity.java | 2 + .../outdoor/activity/MainActivity.java | 9 +- .../outdoor/activity/PictureActivity.java | 4 +- .../outdoor/activity/PicturesActivity.java | 30 +- .../com/navinfo/outdoor/api/BankCard.java | 2 +- .../com/navinfo/outdoor/api/Constant.java | 4 +- .../java/com/navinfo/outdoor/api/IdCard.java | 2 +- .../fragment/ChargingStationFragment.java | 306 +++++++-------- .../outdoor/fragment/ContactFragment.java | 1 - .../outdoor/fragment/FilterFragment.java | 53 +-- .../outdoor/fragment/GatherGetFragment.java | 96 ++--- .../outdoor/fragment/GatheringFragment.java | 6 + .../outdoor/fragment/MineFragment.java | 20 +- .../outdoor/fragment/OtherFragment.java | 117 +++--- .../navinfo/outdoor/fragment/PoiFragment.java | 95 +++-- .../outdoor/fragment/PoiVideoFragment.java | 153 ++++---- .../outdoor/fragment/RoadFragment.java | 182 ++++----- .../outdoor/fragment/StaySubmitFragment.java | 53 +-- .../outdoor/fragment/TreasureFragment.java | 47 +-- .../navinfo/outdoor/http/HttpInterface.java | 4 +- .../outdoor/util/AWMp4ParserHelper.java | 33 ++ .../outdoor/{base => util}/Base64Util.java | 2 +- .../com/navinfo/outdoor/util/Geohash.java | 10 + .../navinfo/outdoor/util/PoiSaveUtils.java | 12 +- .../com/navinfo/outdoor/util/UploadUtils.java | 283 ++++++++++++++ .../java/com/navinfo/outdoor/util/Voice.java | 62 ++++ app/src/main/res/drawable/btn_corners_bg.xml | 24 ++ app/src/main/res/drawable/corners_bg.xml | 24 ++ app/src/main/res/layout/activity_login.xml | 12 + app/src/main/res/layout/activity_main.xml | 11 +- app/src/main/res/layout/activity_pictures.xml | 9 +- app/src/main/res/layout/grade_fragment.xml | 350 ++++++++++++++++++ app/src/main/res/layout/item_marker.xml | 6 +- app/src/main/res/layout/login_task_item.xml | 24 +- .../main/res/layout/privilege_fragment.xml | 350 ++++++++++++++++++ .../res/mipmap-ldpi/take_poi_video_arrow.png | Bin 0 -> 6506 bytes app/src/main/res/values/colors.xml | 1 + app/src/main/res/values/strings.xml | 4 +- 42 files changed, 1790 insertions(+), 634 deletions(-) create mode 100644 app/libs/jacob.jar rename app/src/main/java/com/navinfo/outdoor/{base => util}/Base64Util.java (98%) create mode 100644 app/src/main/java/com/navinfo/outdoor/util/UploadUtils.java create mode 100644 app/src/main/java/com/navinfo/outdoor/util/Voice.java create mode 100644 app/src/main/res/drawable/btn_corners_bg.xml create mode 100644 app/src/main/res/drawable/corners_bg.xml create mode 100644 app/src/main/res/mipmap-ldpi/take_poi_video_arrow.png diff --git a/app/build.gradle b/app/build.gradle index d3987bb..8394c74 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -62,6 +62,7 @@ dependencies { implementation 'androidx.navigation:navigation-ui:2.1.0' implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation files('libs\\jts-1.13.jar') + implementation files('libs\\jacob.jar') testImplementation 'junit:junit:4.12' androidTestImplementation 'androidx.test.ext:junit:1.1.1' androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' diff --git a/app/libs/jacob.jar b/app/libs/jacob.jar new file mode 100644 index 0000000000000000000000000000000000000000..35ce4fa972c8f10720e28e528b05122b3ce04111 GIT binary patch literal 47833 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 T`13GL2G$Sy>ULl8^S}QC+%RXP literal 0 HcmV?d00001 diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 1a6001d..e6df76b 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -96,6 +96,7 @@ fileListByUUID = AWMp4ParserHelper.getInstance().getFileListByUUID(poiEntity.getId()); if (fileListByUUID != null) { - List lineStringByFileList = AWMp4ParserHelper.getInstance().getLineStringByFileList(fileListByUUID); + List lineStringByFileList = AWMp4ParserHelper.getInstance().getLinePhotoByList(fileListByUUID); for (int i = 0; i < lineStringByFileList.size(); i++) { LatLng latLng = lineStringByFileList.get(i); if (latLng != null) { diff --git a/app/src/main/java/com/navinfo/outdoor/activity/PicturesActivity.java b/app/src/main/java/com/navinfo/outdoor/activity/PicturesActivity.java index 2e95590..a6caded 100644 --- a/app/src/main/java/com/navinfo/outdoor/activity/PicturesActivity.java +++ b/app/src/main/java/com/navinfo/outdoor/activity/PicturesActivity.java @@ -116,6 +116,8 @@ public class PicturesActivity extends BaseActivity implements View.OnClickListen private TimerTask timerTask; private int videoIndex = -1; private int oration; + private ImageView ivPicImage; + private boolean isPicture=true; @Override protected int getLayout() { @@ -141,6 +143,13 @@ public class PicturesActivity extends BaseActivity implements View.OnClickListen formatter = new SimpleDateFormat("yyyyMMdd HHmmss"); this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); ivMap = findViewById(R.id.iv_map); + ivMap.setOnClickListener(this); + ivPicImage = findViewById(R.id.iv_pic); + if (poi_video_type==1||poi_video_type==2){ + ivPicImage.setImageResource(R.mipmap.take_poi_video_arrow); + }else if (poi_video_type==3){ + ivPicImage.setImageResource(R.mipmap.take_pic_arrow); + } btnSwitch = findViewById(R.id.btn_switch); btnSwitch.setOnClickListener(this); //相机记录器 @@ -190,7 +199,7 @@ public class PicturesActivity extends BaseActivity implements View.OnClickListen if (poiEntity.getId() != null) { List fileListByUUID = AWMp4ParserHelper.getInstance().getFileListByUUID(poiEntity.getId()); if (fileListByUUID != null) { - List lineStringByFileList = AWMp4ParserHelper.getInstance().getLineStringByFileList(fileListByUUID); + List lineStringByFileList = AWMp4ParserHelper.getInstance().getLinePhotoByList(fileListByUUID); for (int i = 0; i < lineStringByFileList.size(); i++) { LatLng latLng = lineStringByFileList.get(i); if (latLng != null) { @@ -212,8 +221,10 @@ public class PicturesActivity extends BaseActivity implements View.OnClickListen if (Objects.requireNonNull(camera.getPictureSize()).getWidth() < camera.getPictureSize().getHeight()) { Toast.makeText(PicturesActivity.this, "不允许竖向拍摄...", Toast.LENGTH_SHORT).show(); stopTimer(); + capturePicture.setChecked(false); if (poi_video_type != 2) { capturePicture.setText("开始采集"); + capturePicture.setChecked(false); } return; } @@ -300,6 +311,18 @@ public class PicturesActivity extends BaseActivity implements View.OnClickListen setResult(0x111, intent); finish(); break; + case R.id.camera: + benSwitch(); + + if (!isPicture){ + // benSwitch(); + } + break; + case R.id.iv_map: + if (isPicture){ + benSwitch(); + } + break; case R.id.btn_switch: v.setEnabled(false); handler.sendEmptyMessageDelayed(0x102, 2000);// 利用handler延迟发送更改状态信息 @@ -382,6 +405,8 @@ public class PicturesActivity extends BaseActivity implements View.OnClickListen layerChange.addView(camera); layerChange.addView(ivMap); initMapBig(); + ivPicImage.setVisibility(View.VISIBLE); + isPicture = true; } else { layoutParamsMap.height = dm.heightPixels; layoutParamsMap.width = dm.widthPixels; @@ -392,6 +417,9 @@ public class PicturesActivity extends BaseActivity implements View.OnClickListen layerChange.addView(ivMap); layerChange.addView(camera); initMapShort(); + ivPicImage.setVisibility(View.GONE); + isPicture = false; + } } diff --git a/app/src/main/java/com/navinfo/outdoor/api/BankCard.java b/app/src/main/java/com/navinfo/outdoor/api/BankCard.java index 35644b6..be71f46 100644 --- a/app/src/main/java/com/navinfo/outdoor/api/BankCard.java +++ b/app/src/main/java/com/navinfo/outdoor/api/BankCard.java @@ -2,7 +2,7 @@ package com.navinfo.outdoor.api; -import com.navinfo.outdoor.base.Base64Util; +import com.navinfo.outdoor.util.Base64Util; import com.navinfo.outdoor.http.HttpUtil; import com.navinfo.outdoor.util.FileUtil; diff --git a/app/src/main/java/com/navinfo/outdoor/api/Constant.java b/app/src/main/java/com/navinfo/outdoor/api/Constant.java index 64072e4..ad64d3e 100644 --- a/app/src/main/java/com/navinfo/outdoor/api/Constant.java +++ b/app/src/main/java/com/navinfo/outdoor/api/Constant.java @@ -101,6 +101,7 @@ public class Constant { public static String MOBILE = null;//手机号 public static String FILE_PATH = null;//银行卡图片途径 public static int LEVEL = 0;//用户等级 + public static boolean isPresent =true;//判断是否在提交中 public static String YOU_MENG_APP_KEY="6139d82c5f798a55cafc51d6";//友盟appkey @@ -152,6 +153,7 @@ public class Constant { public static final int REGISTER_WORD = 46; //注册的返回 public static final int VIDEO_FINISH_ROAD = 47;//录像视频列表的返回 public static final int PHOTO_FINISH_VIDEO = 49;//拍照列表的返回 + public static final int NEST_WORD_SUBMIT =50;//所有的提交/上传 public static final String INTENT_POI_VIDEO_TYPE ="poi_video_type"; @@ -188,7 +190,7 @@ public class Constant { public static TencentMap.OnMarkerClickListener markerClickListener=null; - public static final String NAVIN_FO="9.07";//版本 + public static final String NAVIN_FO="9.14";//版本 /** * 联系我们的QQ群名称和QQ群号 diff --git a/app/src/main/java/com/navinfo/outdoor/api/IdCard.java b/app/src/main/java/com/navinfo/outdoor/api/IdCard.java index 600d60d..8f8088e 100644 --- a/app/src/main/java/com/navinfo/outdoor/api/IdCard.java +++ b/app/src/main/java/com/navinfo/outdoor/api/IdCard.java @@ -1,6 +1,6 @@ package com.navinfo.outdoor.api; -import com.navinfo.outdoor.base.Base64Util; +import com.navinfo.outdoor.util.Base64Util; import com.navinfo.outdoor.http.HttpUtil; import com.navinfo.outdoor.util.FileUtil; diff --git a/app/src/main/java/com/navinfo/outdoor/fragment/ChargingStationFragment.java b/app/src/main/java/com/navinfo/outdoor/fragment/ChargingStationFragment.java index 35b0764..642701f 100644 --- a/app/src/main/java/com/navinfo/outdoor/fragment/ChargingStationFragment.java +++ b/app/src/main/java/com/navinfo/outdoor/fragment/ChargingStationFragment.java @@ -4,10 +4,8 @@ import android.content.Intent; import android.content.SharedPreferences; import android.graphics.Color; import android.graphics.Point; -import android.net.Uri; import android.os.Bundle; import android.os.Message; -import android.provider.MediaStore; import android.util.Log; import android.view.View; import android.widget.AdapterView; @@ -39,6 +37,7 @@ import com.kongzue.dialog.interfaces.OnDialogButtonClickListener; import com.kongzue.dialog.util.BaseDialog; import com.kongzue.dialog.util.DialogSettings; import com.kongzue.dialog.v3.MessageDialog; +import com.kongzue.dialog.v3.WaitDialog; import com.lzy.okgo.model.HttpParams; import com.navinfo.outdoor.R; import com.navinfo.outdoor.activity.FragmentManagement; @@ -46,6 +45,7 @@ import com.navinfo.outdoor.activity.PhotographActivity; import com.navinfo.outdoor.adapter.ChargingPileAdapter; import com.navinfo.outdoor.api.Constant; import com.navinfo.outdoor.base.BaseDrawerFragment; +import com.navinfo.outdoor.util.UploadUtils; import com.navinfo.outdoor.bean.ChargingPileSaveBean; import com.navinfo.outdoor.bean.ChargingStationBean; import com.navinfo.outdoor.bean.GetPhoneBean; @@ -67,7 +67,6 @@ import com.navinfo.outdoor.ui.view.ContactView; import com.navinfo.outdoor.util.Geohash; import com.navinfo.outdoor.util.GeometryTools; import com.navinfo.outdoor.util.PhotoUtils; -import com.navinfo.outdoor.util.ToastUtil; import com.tencent.tencentmap.mapsdk.maps.TencentMap; import com.tencent.tencentmap.mapsdk.maps.interfaces.Removable; import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptor; @@ -75,6 +74,7 @@ import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptorFactory; import com.tencent.tencentmap.mapsdk.maps.model.LatLng; import com.tencent.tencentmap.mapsdk.maps.model.Marker; import com.tencent.tencentmap.mapsdk.maps.model.MarkerOptions; +import com.vividsolutions.jts.geom.Geometry; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; @@ -91,8 +91,6 @@ import java.util.Objects; import okhttp3.Response; -import static android.app.Activity.RESULT_OK; - /** * 充电站的Fragment * 2021-5-25 @@ -115,7 +113,7 @@ public class ChargingStationFragment extends BaseDrawerFragment implements View. private int existence = 0; private LinearLayout linearChargingPile; private ChargingPileAdapter chargingPileAdapter; - private int station_type = 0; + private int station_type = 1; private ChargingPileDao chargingPileDao; private LatLng latLng; private RelativeLayout linearExist; @@ -126,7 +124,7 @@ public class ChargingStationFragment extends BaseDrawerFragment implements View. private ArrayList chargingStationList; String str = ""; -// private ArrayList fileList; + // private ArrayList fileList; private NestedScrollView nestedScrollView; private Marker markerStation; private Point screenStationPositions; @@ -143,12 +141,12 @@ public class ChargingStationFragment extends BaseDrawerFragment implements View. return R.layout.charging_station_fragment; } - @Override + @Override public void onHiddenChanged(boolean hidden) { super.onHiddenChanged(hidden); if (!hidden) { setSlidingUpPanelLayout(Constant.SLIDING_LAYOUT); - if (slidingPaneLayout!=null) { + if (slidingPaneLayout != null) { slidingPaneLayout.setScrollableView(nestedScrollView); } initHeader(); @@ -179,7 +177,7 @@ public class ChargingStationFragment extends BaseDrawerFragment implements View. @Override public void onClick(View v) { Intent intent = new Intent(getActivity(), FragmentManagement.class); - intent.putExtra("tag",8); + intent.putExtra("tag", 8); startActivity(intent); } }); @@ -198,9 +196,10 @@ public class ChargingStationFragment extends BaseDrawerFragment implements View. public void onResume() { super.onResume(); initHeader(); - moveLatlng(latLng,null); + moveLatlng(latLng, null); } + @Override protected void initView() { super.initView(); @@ -210,9 +209,9 @@ public class ChargingStationFragment extends BaseDrawerFragment implements View. checkBoxLife = findViewById(R.id.check_pot_life); CheckBox checkBoxRight = findViewById(R.id.check_pot_right); nestedScrollView = findViewById(R.id.nested_scroll_view); - removablesLocality=new ArrayList<>(); + removablesLocality = new ArrayList<>(); setSlidingUpPanelLayout(Constant.SLIDING_LAYOUT); - if (slidingPaneLayout!=null) { + if (slidingPaneLayout != null) { slidingPaneLayout.setScrollableView(nestedScrollView); } //添加桩 @@ -263,8 +262,8 @@ public class ChargingStationFragment extends BaseDrawerFragment implements View. public void item(ChargingPileEntity chargingPileEntity) { String showStation = initShowStation(); HashMap stringObjectHashMap = new HashMap<>(); - stringObjectHashMap.put("chargingPileEntity",chargingPileEntity); - stringObjectHashMap.put("showStation",showStation); + stringObjectHashMap.put("chargingPileEntity", chargingPileEntity); + stringObjectHashMap.put("showStation", showStation); Message obtain = Message.obtain(); obtain.what = Constant.CHARGING_STATION; obtain.obj = stringObjectHashMap; @@ -274,7 +273,7 @@ public class ChargingStationFragment extends BaseDrawerFragment implements View. checkBoxLife.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - if(checkBoxLife.isChecked()){ + if (checkBoxLife.isChecked()) { moveLatlng(latLng, new TencentMap.CancelableCallback() { @Override public void onFinish() { @@ -289,6 +288,7 @@ public class ChargingStationFragment extends BaseDrawerFragment implements View. checkBoxLife.setTextColor(Color.WHITE); checkBoxLife.setChecked(true); } + @Override public void onCancel() { BitmapDescriptor stationDescriptor = BitmapDescriptorFactory.fromResource(R.drawable.marker_charge_bags); @@ -298,7 +298,7 @@ public class ChargingStationFragment extends BaseDrawerFragment implements View. checkBoxLife.setChecked(false); } }); - }else { + } else { BitmapDescriptor stationDescriptor = BitmapDescriptorFactory.fromResource(R.drawable.marker_charge_bags); markerStation.setIcon(stationDescriptor); checkBoxLife.setText("编辑"); @@ -333,6 +333,7 @@ public class ChargingStationFragment extends BaseDrawerFragment implements View. break; } } + @Override public void onNothingSelected(AdapterView parent) { } @@ -369,6 +370,7 @@ public class ChargingStationFragment extends BaseDrawerFragment implements View. break; } } + @Override public void onNothingSelected(AdapterView parent) { } @@ -465,16 +467,16 @@ public class ChargingStationFragment extends BaseDrawerFragment implements View. if (name != null && !name.equals("")) { editNameContent.setText(name); } - if (editNameContent.getText().toString()!=null||editNameContent!=null){ + if (editNameContent.getText().toString() != null || editNameContent != null) { editNameContent.setOnFocusChangeListener(new View.OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { - if (!hasFocus){ + if (!hasFocus) { findingDuplicateByWork(); } } }); - }else { + } else { Toast.makeText(getActivity(), "请输入名称", Toast.LENGTH_SHORT).show(); } @@ -483,34 +485,55 @@ public class ChargingStationFragment extends BaseDrawerFragment implements View. editSiteContent.setText(address); } bodyId = showPoiEntity.getBodyId(); // 获取当前数据的bodyId - String x = showPoiEntity.getX(); - String y = showPoiEntity.getY(); - if (x != null && y != null) { - latLng = new LatLng(); - latLng.setLatitude(Double.parseDouble(y)); - latLng.setLongitude(Double.parseDouble(x)); + String geoWkt = showPoiEntity.getGeoWkt(); + if (geoWkt != null) { + String geo = Geohash.getInstance().decode(geoWkt); + Geometry geometry = GeometryTools.createGeometry(geo); + switch (geometry.getGeometryType()) { + case "Point": //点 + latLng = GeometryTools.createLatLng(geo); + break; + case "LineString": //线 + case "Polygon": //面 + List latLineString = GeometryTools.getLatLags(geo); + assert latLineString != null; + latLng = latLineString.get(0); + break; + } BitmapDescriptor stationDescriptor = BitmapDescriptorFactory.fromResource(R.drawable.marker_charge_bags); - markerStation = tencentMap.addMarker(new MarkerOptions(latLng).icon(stationDescriptor).anchor(0.5f,1.0f)); + markerStation = tencentMap.addMarker(new MarkerOptions(latLng).icon(stationDescriptor).anchor(0.5f, 1.0f)); markerStation.setZIndex(4); - moveLatlng(latLng,null); + moveLatlng(latLng, null); + } else { + String x = showPoiEntity.getX(); + String y = showPoiEntity.getY(); + if (x != null && y != null) { + latLng = new LatLng(); + latLng.setLatitude(Double.parseDouble(y)); + latLng.setLongitude(Double.parseDouble(x)); + BitmapDescriptor stationDescriptor = BitmapDescriptorFactory.fromResource(R.drawable.marker_charge_bags); + markerStation = tencentMap.addMarker(new MarkerOptions(latLng).icon(stationDescriptor).anchor(0.5f, 1.0f)); + markerStation.setZIndex(4); + moveLatlng(latLng, null); + } } - initPhone(); String describe = showPoiEntity.getMemo();//任务描述 if (describe != null && !describe.equals("")) { editDescribe.setText(describe); } + initPhone(); int station_type = showPoiEntity.getStation_type(); - if (station_type==1){ + if (station_type == 1) { spinnerType.setSelection(0, true); - }else if (station_type==2){ + } else if (station_type == 2) { spinnerType.setSelection(1, true); - }else if (station_type==3){ + } else if (station_type == 3) { spinnerType.setSelection(2, true); - }else if (station_type==4){ + } else if (station_type == 4) { spinnerType.setSelection(3, true); } String telPhone = showPoiEntity.getTelPhone(); - if (telPhone != null && !telPhone.equals("")&&!telPhone.equals("null")) { + if (telPhone != null && !telPhone.equals("") && !telPhone.equals("null")) { String[] phones = telPhone.split("\\|"); for (int i = 0; i < phones.length; i++) { if (i == 0) { @@ -611,8 +634,8 @@ public class ChargingStationFragment extends BaseDrawerFragment implements View. ChargingPileEntity chargingPileEntity = new Gson().fromJson(pileFileString, ChargingPileEntity.class); String showStation = initShowStation(); HashMap stringObjectHashMap = new HashMap<>(); - stringObjectHashMap.put("chargingPileEntity",chargingPileEntity); - stringObjectHashMap.put("showStation",showStation); + stringObjectHashMap.put("chargingPileEntity", chargingPileEntity); + stringObjectHashMap.put("showStation", showStation); initRemovePileSharePre(); Message obtain = Message.obtain(); obtain.what = Constant.CHARGING_STATION; @@ -644,13 +667,13 @@ public class ChargingStationFragment extends BaseDrawerFragment implements View. if (getPhoneBean.getCode() == 200) { String code = getPhoneBean.getBody().getCode(); Integer telLength = getPhoneBean.getBody().getTelLength(); - if (!code.equals(Constant.CODE)){ + if (!code.equals(Constant.CODE)) { DialogSettings.style = DialogSettings.STYLE.STYLE_KONGZUE; - MessageDialog.show((AppCompatActivity) Objects.requireNonNull(getContext()), "提示", "此地区区号为"+code+",请手动修改", "确定","取消").setOkButton(new OnDialogButtonClickListener() { + MessageDialog.show((AppCompatActivity) Objects.requireNonNull(getContext()), "提示", "此地区区号为" + code + ",请手动修改", "确定", "取消").setOkButton(new OnDialogButtonClickListener() { @Override public boolean onClick(BaseDialog baseDialog, View v) { Constant.CODE = code; - Constant.TelLength=telLength; + Constant.TelLength = telLength; /* for (int i = 0; i < poiBeans.size(); i++) { poiBeans.get(i).setArea(Constant.CODE); } @@ -660,8 +683,8 @@ public class ChargingStationFragment extends BaseDrawerFragment implements View. } }); } - }else { - Toast.makeText(getActivity(), getPhoneBean.getMessage()+"", Toast.LENGTH_SHORT).show(); + } else { + Toast.makeText(getActivity(), getPhoneBean.getMessage() + "", Toast.LENGTH_SHORT).show(); } } @@ -720,11 +743,12 @@ public class ChargingStationFragment extends BaseDrawerFragment implements View. } else if (data.what == Constant.CHARGING_PILE_STATION) { // 新增充电桩 ChargingPileEntity chargingPileEntity = (ChargingPileEntity) data.obj; List currentChargingPileList = chargingPileAdapter.getChargingPileEntities(); - m: if (currentChargingPileList!=null&&!currentChargingPileList.isEmpty()) { + m: + if (currentChargingPileList != null && !currentChargingPileList.isEmpty()) { for (int i = 0; i < currentChargingPileList.size(); i++) { if (currentChargingPileList.get(i).getPileId() == chargingPileEntity.getPileId()) { currentChargingPileList.add(i, chargingPileEntity); - currentChargingPileList.remove(i+1); + currentChargingPileList.remove(i + 1); break m; } } @@ -734,11 +758,12 @@ public class ChargingStationFragment extends BaseDrawerFragment implements View. currentChargingPileList.add(chargingPileEntity); } chargingPileAdapter.notifyDataSetChanged(); - }else if (data.what==Constant.PILE_MARKER_SHOW){ - initPileMarkerShow(); + } else if (data.what == Constant.PILE_MARKER_SHOW) { + initPileMarkerShow(); } } - public void initPileMarkerShow(){ + + public void initPileMarkerShow() { for (int i = 0; i < removablesLocality.size(); i++) { removablesLocality.get(i).remove(); } @@ -751,7 +776,7 @@ public class ChargingStationFragment extends BaseDrawerFragment implements View. // 解密geo String decodeGeometry = Geohash.getInstance().decode(p); LatLng latLngPile = GeometryTools.createLatLng(decodeGeometry); - Marker markerPile = tencentMap.addMarker(new MarkerOptions(latLngPile).icon(pileDescriptor).anchor(0.5f,1.0f)); + Marker markerPile = tencentMap.addMarker(new MarkerOptions(latLngPile).icon(pileDescriptor).anchor(0.5f, 1.0f)); markerPile.setZIndex(3); removablesLocality.add(markerPile); } @@ -833,7 +858,15 @@ public class ChargingStationFragment extends BaseDrawerFragment implements View. Objects.requireNonNull(getActivity()).runOnUiThread(new Runnable() { @Override public void run() { - stationUploadByNetWork(poiDaoPoiEntity, chargingStationList); + if (Constant.isPresent) { + stationUploadByNetWork(poiDaoPoiEntity, chargingStationList); + Constant.isPresent = false; + } else { + Toast.makeText(getContext(), "有正在提交的数据,等提交成功后,方可操作", Toast.LENGTH_SHORT).show(); + + } + + } }); } @@ -885,8 +918,8 @@ public class ChargingStationFragment extends BaseDrawerFragment implements View. ChargingPileEntity chargingPileEntity = new ChargingPileEntity(); String encode = Geohash.getInstance().encode(latLng.latitude, latLng.longitude); chargingPileEntity.setP(encode); - stringObjectHashMap.put("chargingPileEntity",chargingPileEntity); - stringObjectHashMap.put("showStation",showStation); + stringObjectHashMap.put("chargingPileEntity", chargingPileEntity); + stringObjectHashMap.put("showStation", showStation); initRemovePileSharePre(); Message obtain = Message.obtain(); obtain.what = Constant.CHARGING_STATION; @@ -904,7 +937,7 @@ public class ChargingStationFragment extends BaseDrawerFragment implements View. if (chargingPileEntityList != null && !chargingPileEntityList.isEmpty()) { for (ChargingPileEntity pileEntity : chargingPileEntityList) { if (pileEntity.getBodyId() == 0) { - saveChargingPileByWork(pileEntity,poiEntity.getBodyId()); + saveChargingPileByWork(pileEntity, poiEntity.getBodyId()); } } } @@ -928,13 +961,13 @@ public class ChargingStationFragment extends BaseDrawerFragment implements View. } try { - HttpParams httpParams=new HttpParams(); - httpParams.put("auditId",chargingPileEntity.getBodyId()); + HttpParams httpParams = new HttpParams(); + httpParams.put("auditId", chargingPileEntity.getBodyId()); Response execute = OkGoBuilder.getInstance().url(HttpInterface.CS_TASK_UP_LOAD_PIC) .params(httpParams) .token(Constant.ACCESS_TOKEN) .fileList(chargingPileFileList).postFileSynchronization(); - if(execute!=null){ + if (execute != null) { assert execute.body() != null; String pileUpLoadResultStr = execute.body().string(); PoiUploadBean uploadBeanResult = new Gson().fromJson(pileUpLoadResultStr, PoiUploadBean.class); @@ -995,7 +1028,7 @@ public class ChargingStationFragment extends BaseDrawerFragment implements View. PoiEntity poiEntity = initPoiEntityByUI(showPoiEntity); PoiCheckResult poiCheckResult = checkPoiEntity(poiEntity); if (poiCheckResult.getCode() == 1) { - Toast.makeText(getActivity(), poiCheckResult.getMsg()+"", Toast.LENGTH_SHORT).show(); + Toast.makeText(getActivity(), poiCheckResult.getMsg() + "", Toast.LENGTH_SHORT).show(); return; } new Thread(new Runnable() { @@ -1028,8 +1061,6 @@ public class ChargingStationFragment extends BaseDrawerFragment implements View. } private void stationUploadByNetWork(PoiEntity poiEntity, ArrayList chargingStationList) { - showLoadingDialog(); - setLoadingDialogText("上传中..."); if (poiEntity == null || poiEntity.getBodyId() == 0) { Toast.makeText(getActivity(), "没有保存本地", Toast.LENGTH_SHORT).show(); assert poiEntity != null; @@ -1049,12 +1080,11 @@ public class ChargingStationFragment extends BaseDrawerFragment implements View. } } } - Objects.requireNonNull(getActivity()).runOnUiThread(new Runnable() { @Override public void run() { - HttpParams httpParams=new HttpParams(); - httpParams.put("auditId",poiEntity.getBodyId()); + HttpParams httpParams = new HttpParams(); + httpParams.put("auditId", poiEntity.getBodyId()); OkGoBuilder.getInstance() .Builder(getActivity()) .url(HttpInterface.C_TASK_UP_LOAD_PIC) @@ -1062,89 +1092,11 @@ public class ChargingStationFragment extends BaseDrawerFragment implements View. .token(Constant.ACCESS_TOKEN) .params(httpParams) .cls(PoiUploadBean.class) - .postFileAsynchronous( new Callback() { - @Override - public void onSuccess(PoiUploadBean response, int id) { - dismissLoadingDialog(); - if (response.getCode() == 200) { + .postFileAsynchronous(UploadUtils.getInstance().getChargingUploadCallback(getActivity(), showPoiEntity)); + Objects.requireNonNull(getActivity()).onBackPressed();//回退 + WaitDialog.show((AppCompatActivity) getActivity(), "任务正在后台上传中,请稍候..."); + WaitDialog.dismiss(3000); - new Thread(new Runnable() { - @Override - public void run() { - poiDao.deletePoiEntity(poiEntity); - getActivity().runOnUiThread(new Runnable() { - @Override - public void run() { - Toast.makeText(getActivity(), "上传成功", Toast.LENGTH_SHORT).show(); - Message obtain = Message.obtain(); - obtain.what = Constant.JOB_WORD_MONITOR; - obtain.obj = true; - EventBus.getDefault().post(obtain); - getActivity().onBackPressed();//回退 - } - }); - } - }).start(); - } else { - Toast.makeText(getActivity(), "上传失败", Toast.LENGTH_SHORT).show(); - } - } - - @Override - public void onError(Throwable e, int id) { - dismissLoadingDialog(); - Toast.makeText(getActivity(), e.getMessage()+"", Toast.LENGTH_SHORT).show(); - Log.d("TAG", "onError: " +e.getMessage() + ""); - } - }); - - - /* OkGo - // 请求方式和请求url - .post(HttpInterface.C_TASK_UP_LOAD_PIC) - // 请求的 tag, 主要用于取消对应的请求 - .params("auditId", poiEntity.getBodyId()) - .addFileParams("file", chargingStationList) - .tag(this) - .execute(new DialogCallback(PoiUploadBean.class) { - @Override - public void onSuccess(Response poiUploadBeanResponse) { - dismissLoadingDialog(); - if (poiUploadBeanResponse == null || poiUploadBeanResponse.code() != 200 || poiUploadBeanResponse.body().getCode() != 200) { - Toast.makeText(getActivity(), "上传失败", Toast.LENGTH_SHORT).show(); - return; - } - - if (poiUploadBeanResponse != null && poiUploadBeanResponse.code() == 200) { - PoiUploadBean body = poiUploadBeanResponse.body(); - if (body.getCode() == 200) { - Toast.makeText(getActivity(), "上传成功", Toast.LENGTH_SHORT).show(); - Log.d("TAG", "onSuccess: " + poiUploadBeanResponse.toString() + "sssssssssssss"); - new Thread(new Runnable() { - @Override - public void run() { - poiDao.deletePoiEntity(showPoiEntity); - getActivity().runOnUiThread(new Runnable() { - @Override - public void run() { - getActivity().onBackPressed();//回退 - } - }); - } - }).start(); - return; - } - } - } - - @Override - public void onError(Response poiUploadBeanResponse) { - super.onError(poiUploadBeanResponse); - dismissLoadingDialog(); - Toast.makeText(getActivity(), poiUploadBeanResponse.code() + "", Toast.LENGTH_SHORT).show(); - Log.d("TAG", "onError: " + poiUploadBeanResponse.code() + ""); - } - });*/ } }); } @@ -1190,6 +1142,7 @@ public class ChargingStationFragment extends BaseDrawerFragment implements View. public void run() { if (isLocal) { stationUploadByNetWork(poiEntity, chargingStationList); + Constant.isPresent = false; // chargingPileUploadNetWork(chargingPileBody, fileList); } else { Toast.makeText(getActivity(), "保存成功", Toast.LENGTH_SHORT).show(); @@ -1220,6 +1173,7 @@ public class ChargingStationFragment extends BaseDrawerFragment implements View. } }); } + private void findingDuplicateByWork() { HttpParams httpParams = new HttpParams(); String encode = Geohash.getInstance().encode(latLng.latitude, latLng.longitude); @@ -1234,40 +1188,40 @@ public class ChargingStationFragment extends BaseDrawerFragment implements View. .getRequest(new Callback() { @Override public void onSuccess(TaskNameBean taskNameBean, int id) { - if (getActivity()==null){ + if (getActivity() == null) { return; } dismissLoadingDialog(); - if (taskNameBean.getCode()==200){ + if (taskNameBean.getCode() == 200) { editNameContent.setTextColor(Color.BLACK); btnSaveLocal.setEnabled(true); btnUploading.setEnabled(true); List body = taskNameBean.getBody(); - if (body!=null){ + if (body != null) { for (int i = 0; i < body.size(); i++) { - str +=body.get(i) + ","; + str += body.get(i) + ","; } - if (str!=null){ - Toast.makeText(getActivity(), "存在类似名称---"+str, Toast.LENGTH_SHORT).show(); + if (str != null) { + Toast.makeText(getActivity(), "存在类似名称---" + str, Toast.LENGTH_SHORT).show(); str = ""; - }else { + } else { Toast.makeText(getActivity(), "没有类似名称可以作业", Toast.LENGTH_SHORT).show(); } - }else { + } else { Toast.makeText(getActivity(), "没有类似名称可以作业", Toast.LENGTH_SHORT).show(); } - }else { + } else { editNameContent.setTextColor(Color.RED); btnSaveLocal.setEnabled(false); btnUploading.setEnabled(false); - Toast.makeText(getActivity(), taskNameBean.getMessage()+"", Toast.LENGTH_SHORT).show(); + Toast.makeText(getActivity(), taskNameBean.getMessage() + "", Toast.LENGTH_SHORT).show(); } } @Override public void onError(Throwable e, int id) { - if (getActivity()==null){ + if (getActivity() == null) { return; } dismissLoadingDialog(); @@ -1276,6 +1230,7 @@ public class ChargingStationFragment extends BaseDrawerFragment implements View. } }); } + private String initShowStation() { PoiEntity poiEntity = initPoiEntityByUI(showPoiEntity); String newPoiEntity = new Gson().toJson(poiEntity); @@ -1313,8 +1268,8 @@ public class ChargingStationFragment extends BaseDrawerFragment implements View. @Override public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); - if (resultCode==0x104){ - if (requestCode==101){ + if (resultCode == 0x104) { + if (requestCode == 101) { assert data != null; String file = data.getStringExtra("file"); assert file != null; @@ -1323,7 +1278,7 @@ public class ChargingStationFragment extends BaseDrawerFragment implements View. String andGetPath = PhotoUtils.showPhotoAndGetPath(videoFile, ivPanorama); tvPanorama.setTag(andGetPath); } - }else if (requestCode==102){ + } else if (requestCode == 102) { assert data != null; String file = data.getStringExtra("file"); assert file != null; @@ -1332,7 +1287,7 @@ public class ChargingStationFragment extends BaseDrawerFragment implements View. String andGetPath = PhotoUtils.showPhotoAndGetPath(videoFile, ivName); tvNamePic.setTag(andGetPath); } - }else if (requestCode==103){ + } else if (requestCode == 103) { assert data != null; String file = data.getStringExtra("file"); assert file != null; @@ -1341,7 +1296,7 @@ public class ChargingStationFragment extends BaseDrawerFragment implements View. String andGetPath = PhotoUtils.showPhotoAndGetPath(videoFile, ivInternal); tvInternal.setTag(andGetPath); } - }else if (requestCode==104){ + } else if (requestCode == 104) { assert data != null; String file = data.getStringExtra("file"); assert file != null; @@ -1350,7 +1305,7 @@ public class ChargingStationFragment extends BaseDrawerFragment implements View. String andGetPath = PhotoUtils.showPhotoAndGetPath(videoFile, ivElse); tvElse.setTag(andGetPath); } - }else if (requestCode==105){ + } else if (requestCode == 105) { assert data != null; String file = data.getStringExtra("file"); assert file != null; @@ -1384,7 +1339,7 @@ public class ChargingStationFragment extends BaseDrawerFragment implements View. Response execute = OkGoBuilder.getInstance().url(HttpInterface.SUBMIT_CSTASK) .token(Constant.ACCESS_TOKEN) .params(httpParams).getSynchronization(); - if(execute!=null){ + if (execute != null) { assert execute.body() != null; String responseBodyStr = execute.body().string(); Gson gson = new Gson(); @@ -1400,13 +1355,14 @@ public class ChargingStationFragment extends BaseDrawerFragment implements View. e.printStackTrace(); } } + @Override public void onDestroyView() { super.onDestroyView(); if (showPoiEntity != null) { if (showPoiEntity.getTaskStatus() == 5) { initEndReceiveTask(HttpInterface.UNRECEIVED_POLYGON_TASK, showPoiEntity); - }else { + } else { Message obtain = Message.obtain(); obtain.what = Constant.JOB_WORD_MONITOR; obtain.obj = true; @@ -1414,12 +1370,13 @@ public class ChargingStationFragment extends BaseDrawerFragment implements View. } } } + @Override public void onDestroy() { if (EventBus.getDefault().isRegistered(this))//加上判断 EventBus.getDefault().unregister(this); super.onDestroy(); - if (markerStation!=null){ + if (markerStation != null) { markerStation.remove(); } for (int i = 0; i < removablesLocality.size(); i++) { @@ -1428,7 +1385,7 @@ public class ChargingStationFragment extends BaseDrawerFragment implements View. removablesLocality.clear(); } - private void initEndReceiveTask(String url,PoiEntity poiEntity) { + private void initEndReceiveTask(String url, PoiEntity poiEntity) { if (poiEntity.getTaskId() == 0) { Toast.makeText(getActivity(), "无此任务", Toast.LENGTH_SHORT).show(); return; @@ -1471,6 +1428,7 @@ public class ChargingStationFragment extends BaseDrawerFragment implements View. } }); } + @Override protected PoiEntity initPoiEntityByUI(PoiEntity poiEntity) { List infoPhoto = new ArrayList<>(); @@ -1533,49 +1491,49 @@ public class ChargingStationFragment extends BaseDrawerFragment implements View. @Override protected PoiCheckResult checkPoiEntity(PoiEntity entity) { PoiCheckResult poiCheckResult = new PoiCheckResult(); - if (entity.getName()==null){ + if (entity.getName() == null) { poiCheckResult.setCode(1); poiCheckResult.setMsg("请输入 名称"); return poiCheckResult; } - if (tvPanorama.getTag()==null){ + if (tvPanorama.getTag() == null) { poiCheckResult.setCode(1); poiCheckResult.setMsg("请拍照 全景图"); return poiCheckResult; } - if (tvNamePic.getTag()==null){ + if (tvNamePic.getTag() == null) { poiCheckResult.setCode(1); poiCheckResult.setMsg("请拍照 名称照片"); return poiCheckResult; } - if (entity.getExistence()==0){ - if (tvInternal.getTag()==null){ + if (entity.getExistence() == 0) { + if (tvInternal.getTag() == null) { poiCheckResult.setCode(1); poiCheckResult.setMsg("请拍照 服务说明"); return poiCheckResult; } - if (tvElse.getTag()==null){ + if (tvElse.getTag() == null) { poiCheckResult.setCode(1); poiCheckResult.setMsg("请拍照 充电站指引牌"); return poiCheckResult; } - if (tvScutcheon.getTag()==null){ + if (tvScutcheon.getTag() == null) { poiCheckResult.setCode(1); poiCheckResult.setMsg("请拍照 收费标牌"); return poiCheckResult; } } - if (entity.getX()==null&&entity.getY()==null){ + if (entity.getX() == null && entity.getY() == null) { poiCheckResult.setCode(1); poiCheckResult.setMsg("请确定 点位"); return poiCheckResult; } - if (contactView.getPhoneList()!=-1){ + if (contactView.getPhoneList() != -1) { poiCheckResult.setCode(1); - poiCheckResult.setMsg("您第"+contactView.getPhoneList()+"手机号输入有误"); + poiCheckResult.setMsg("您第" + contactView.getPhoneList() + "手机号输入有误"); return poiCheckResult; } - if (entity.getTelPhone()==null){ + if (entity.getTelPhone() == null) { poiCheckResult.setCode(1); poiCheckResult.setMsg("请输入 手机号"); return poiCheckResult; diff --git a/app/src/main/java/com/navinfo/outdoor/fragment/ContactFragment.java b/app/src/main/java/com/navinfo/outdoor/fragment/ContactFragment.java index a069bc1..c8b28e1 100644 --- a/app/src/main/java/com/navinfo/outdoor/fragment/ContactFragment.java +++ b/app/src/main/java/com/navinfo/outdoor/fragment/ContactFragment.java @@ -38,7 +38,6 @@ public class ContactFragment extends BaseFragment implements View.OnClickListene super.initView(); ImageView ivContact = findViewById(R.id.iv_contact); ivContact.setOnClickListener(this); - TextView tvJigName = (TextView) findViewById(R.id.tv_jingName); tvJigName.setText(Constant.REGION_JIG_NAME); TextView tvJigPhone = (TextView) findViewById(R.id.tv_jingPhone); diff --git a/app/src/main/java/com/navinfo/outdoor/fragment/FilterFragment.java b/app/src/main/java/com/navinfo/outdoor/fragment/FilterFragment.java index 0b6bae7..7820b09 100644 --- a/app/src/main/java/com/navinfo/outdoor/fragment/FilterFragment.java +++ b/app/src/main/java/com/navinfo/outdoor/fragment/FilterFragment.java @@ -62,7 +62,6 @@ public class FilterFragment extends BaseDrawerFragment implements View.OnClickLi private FilterAdapter filterAdapter; private ArrayList poiEntities; private ArrayList btnChock; - private PoiDao poiDao; private CheckBox checkOk; public static FilterFragment newInstance(Bundle bundle) { @@ -144,13 +143,14 @@ public class FilterFragment extends BaseDrawerFragment implements View.OnClickLi PoiEntity poiEntity = new PoiEntity(); poiEntity.setTaskId(list.get(i).getId()); poiEntity.setName(list.get(i).getName()); + poiEntity.setGeoWkt(list.get(i).getGeo()); poiEntity.setAddress(list.get(i).getAddress()); poiEntity.setTelPhone(list.get(i).getTelephone() + ""); poiEntity.setPrecision(list.get(i).getPrice() + ""); poiEntity.setDist(list.get(i).getDist() + ""); poiEntity.setType(list.get(i).getType()); - String geo = list.get(i).getGeo(); - poiEntity.setGeoWkt(geo); + String gawk = list.get(i).getGeo(); + String geo = Geohash.getInstance().decode(gawk); Geometry geometry = GeometryTools.createGeometry(geo); switch (geometry.getGeometryType()) { case "Point": //点 @@ -180,7 +180,7 @@ public class FilterFragment extends BaseDrawerFragment implements View.OnClickLi protected void initData() { super.initData(); PoiDatabase poiDatabase = PoiDatabase.getInstance(getContext()); - poiDao = poiDatabase.getPoiDao(); + PoiDao poiDao = poiDatabase.getPoiDao(); poiEntities = new ArrayList<>(); btnChock = new ArrayList<>();//存储选择中的的数据 ConstraintLayout clNumber = findViewById(R.id.cl_number); @@ -310,7 +310,7 @@ public class FilterFragment extends BaseDrawerFragment implements View.OnClickLi public void onClick(View v) { switch (v.getId()) { case R.id.btn_draw: - if (btnChock==null){ + if (btnChock == null) { return; } StringBuilder a = new StringBuilder(); @@ -457,6 +457,7 @@ public class FilterFragment extends BaseDrawerFragment implements View.OnClickLi /** * 批量领取 + * * @param taskId */ private void initBatch(String taskId) { @@ -487,6 +488,7 @@ public class FilterFragment extends BaseDrawerFragment implements View.OnClickLi EventBus.getDefault().post(obtain); Toast.makeText(getContext(), "领取成功", Toast.LENGTH_SHORT).show(); } + @Override public void onError(Throwable e, int id) { dismissLoadingDialog(); @@ -498,7 +500,8 @@ public class FilterFragment extends BaseDrawerFragment implements View.OnClickLi /** * 通过不同类型的type 进行批量领取 - * @param successBean + * + * @param */ private void initType(FilterBatchBean.BodyBean.SuccessBean successBean) { switch (successBean.getType()) { @@ -514,16 +517,16 @@ public class FilterFragment extends BaseDrawerFragment implements View.OnClickLi chargingStationEntity.setCreateTime(String.valueOf(successBean.getEndDate())); chargingStationEntity.setPrecision(String.valueOf(successBean.getPrice())); chargingStationEntity.setAddress(successBean.getAddress()); - if(successBean.getTelephone()==null||successBean.getTelephone().equals("")||successBean.getTelephone().equals("null")){ + if (successBean.getTelephone() == null || successBean.getTelephone().equals("") || successBean.getTelephone().equals("null")) { chargingStationEntity.setTelPhone(null); - }else { + } else { chargingStationEntity.setTelPhone(successBean.getTelephone()); } chargingStationEntity.setType(successBean.getType()); chargingStationEntity.setTaskStatus(1); + chargingStationEntity.setGeoWkt(successBean.getGeo()); String encodeStr = successBean.getGeo(); String geo = Geohash.getInstance().decode(encodeStr); - chargingStationEntity.setGeoWkt(geo); Geometry geometry = GeometryTools.createGeometry(geo); switch (geometry.getGeometryType()) { case "Point": //点 @@ -565,20 +568,20 @@ public class FilterFragment extends BaseDrawerFragment implements View.OnClickLi new Thread(new Runnable() { @Override public void run() { - PoiEntity poiListEntity = new PoiEntity(); - poiListEntity.setTaskId(successBean.getId()); - poiListEntity.setName(successBean.getName()); - poiListEntity.setDescribe(successBean.getMemo()); - poiListEntity.setCreateTime(successBean.getEndDate()+""); - poiListEntity.setAddress(successBean.getAddress()); - poiListEntity.setType(successBean.getType()); - poiListEntity.setPrecision(String.valueOf(successBean.getPrice())); - poiListEntity.setIsExclusive(successBean.getIsExclusive()); - poiListEntity.setTaskStatus(1); - String encodeStr = successBean.getGeo(); - String geo = Geohash.getInstance().decode(encodeStr); - poiListEntity.setGeoWkt(geo); - Geometry geometry = GeometryTools.createGeometry(geo); + PoiEntity poiListEntity = new PoiEntity(); + poiListEntity.setTaskId(successBean.getId()); + poiListEntity.setName(successBean.getName()); + poiListEntity.setDescribe(successBean.getMemo()); + poiListEntity.setCreateTime(successBean.getEndDate() + ""); + poiListEntity.setAddress(successBean.getAddress()); + poiListEntity.setType(successBean.getType()); + poiListEntity.setPrecision(String.valueOf(successBean.getPrice())); + poiListEntity.setIsExclusive(successBean.getIsExclusive()); + poiListEntity.setTaskStatus(1); + poiListEntity.setGeoWkt(successBean.getGeo()); + String encodeStr = successBean.getGeo(); + String geo = Geohash.getInstance().decode(encodeStr); + Geometry geometry = GeometryTools.createGeometry(geo); switch (geometry.getGeometryType()) { case "Point": //点 LatLng latLng = GeometryTools.createLatLng(geo); @@ -594,7 +597,7 @@ public class FilterFragment extends BaseDrawerFragment implements View.OnClickLi break; } InsertAndUpdateUtils.getInstance().insertOrUpdate(getContext(), poiListEntity); - } + } }).start(); break; case 6://面 @@ -606,9 +609,9 @@ public class FilterFragment extends BaseDrawerFragment implements View.OnClickLi polygonEntity.setName(successBean.getName()); polygonEntity.setType(successBean.getType()); polygonEntity.setTaskStatus(1); + polygonEntity.setGeoWkt(successBean.getGeo()); String encodeStr = successBean.getGeo(); String geo = Geohash.getInstance().decode(encodeStr); - polygonEntity.setGeoWkt(geo); Geometry geometry = GeometryTools.createGeometry(geo); switch (geometry.getGeometryType()) { case "Point": //点 diff --git a/app/src/main/java/com/navinfo/outdoor/fragment/GatherGetFragment.java b/app/src/main/java/com/navinfo/outdoor/fragment/GatherGetFragment.java index a3ec6b5..6363f22 100644 --- a/app/src/main/java/com/navinfo/outdoor/fragment/GatherGetFragment.java +++ b/app/src/main/java/com/navinfo/outdoor/fragment/GatherGetFragment.java @@ -35,6 +35,7 @@ import com.navinfo.outdoor.room.PoiDatabase; import com.navinfo.outdoor.room.PoiEntity; import com.navinfo.outdoor.util.Geohash; import com.navinfo.outdoor.util.GeometryTools; +import com.navinfo.outdoor.util.Voice; import com.tencent.tencentmap.mapsdk.maps.model.LatLng; import com.vividsolutions.jts.geom.Geometry; @@ -243,19 +244,21 @@ public class GatherGetFragment extends BaseFragment implements View.OnClickListe return; }else { if (geometry>50){ +// Voice.sprat("注意在附近50米范围内进行采集",0); + + DialogSettings.style = DialogSettings.STYLE.STYLE_KONGZUE; - MessageDialog.show((AppCompatActivity) Objects.requireNonNull(getActivity()), "提示", "当前位置偏离任务线", "确定").setOnOkButtonClickListener(new OnDialogButtonClickListener() { + MessageDialog.show((AppCompatActivity) Objects.requireNonNull(getActivity()), "提示", "注意在任务附近50米范围内进行采集", "确定").setOnOkButtonClickListener(new OnDialogButtonClickListener() { @Override public boolean onClick(BaseDialog baseDialog, View v) { initGather(); +// Voice.sprat("注意在附近50米范围内进行采集",1); return false; } }); }else { initGather(); } - - } } break; @@ -361,10 +364,9 @@ public class GatherGetFragment extends BaseFragment implements View.OnClickListe } chargingStationEntity.setType(Integer.valueOf(stationBean.getType())); chargingStationEntity.setTaskStatus(statusId); - + chargingStationEntity.setGeoWkt(stationBean.getGeo()); String encodeStr = stationBean.getGeo(); String geo = Geohash.getInstance().decode(encodeStr); - chargingStationEntity.setGeoWkt(geo); Geometry geometry = GeometryTools.createGeometry(geo); switch (geometry.getGeometryType()) { case "Point": //点 @@ -375,6 +377,7 @@ public class GatherGetFragment extends BaseFragment implements View.OnClickListe case "LineString": //线 case "Polygon": //面 List latLineString = GeometryTools.getLatLags(geo); + assert latLineString != null; chargingStationEntity.setX(latLineString.get(0).longitude + ""); chargingStationEntity.setY(latLineString.get(0).latitude + ""); break; @@ -479,22 +482,23 @@ public class GatherGetFragment extends BaseFragment implements View.OnClickListe polygonEntity.setTaskId(listBean.getId()); polygonEntity.setName(listBean.getName()); polygonEntity.setType(listBean.getType()); + polygonEntity.setGeoWkt(listBean.getGeo()); String encodeStr = listBean.getGeo(); String geo = Geohash.getInstance().decode(encodeStr); - polygonEntity.setGeoWkt(geo); Geometry geometry = GeometryTools.createGeometry(geo); - if (geometry.getGeometryType().equals("Point")) {//点 - LatLng latLng = GeometryTools.createLatLng(geo); - polygonEntity.setX(latLng.longitude + ""); - polygonEntity.setY(latLng.latitude + ""); - } else if (geometry.getGeometryType().equals("LineString")) {//线 - List latLineString = GeometryTools.getLatLags(geo); - polygonEntity.setX(latLineString.get(0).longitude + ""); - polygonEntity.setY(latLineString.get(0).latitude + ""); - } else if (geometry.getGeometryType().equals("Polygon")) {//面 - List latPolygon = GeometryTools.getLatLags(geo); - polygonEntity.setX(latPolygon.get(0).longitude + ""); - polygonEntity.setY(latPolygon.get(0).latitude + ""); + switch (geometry.getGeometryType()) { + case "Point": //点 + LatLng latLng = GeometryTools.createLatLng(geo); + polygonEntity.setX(latLng.longitude + ""); + polygonEntity.setY(latLng.latitude + ""); + break; + case "LineString": //线 + case "Polygon": //面 + List latLineString = GeometryTools.getLatLags(geo); + assert latLineString != null; + polygonEntity.setX(latLineString.get(0).longitude + ""); + polygonEntity.setY(latLineString.get(0).latitude + ""); + break; } polygonEntity.setTaskStatus(1); } @@ -725,25 +729,26 @@ public class GatherGetFragment extends BaseFragment implements View.OnClickListe poiListEntity.setDescribe(listBean.getMemo()); poiListEntity.setCreateTime(listBean.getEndDate()); poiListEntity.setAddress(listBean.getAddress()); - poiListEntity.setType(Integer.valueOf(listBean.getType())); + poiListEntity.setType(listBean.getType()); poiListEntity.setIsExclusive(listBean.getIsExclusive()); poiListEntity.setTaskStatus(statusId); + poiListEntity.setGeoWkt(listBean.getGeo()); String encodeStr = listBean.getGeo(); String geo = Geohash.getInstance().decode(encodeStr); - poiListEntity.setGeoWkt(geo); Geometry geometry = GeometryTools.createGeometry(geo); - if (geometry.getGeometryType().equals("Point")) {//点 - LatLng latLng = GeometryTools.createLatLng(geo); - poiListEntity.setX(latLng.longitude + ""); - poiListEntity.setY(latLng.latitude + ""); - } else if (geometry.getGeometryType().equals("LineString")) {//线 - List latLineString = GeometryTools.getLatLags(geo); - poiListEntity.setX(latLineString.get(0).longitude + ""); - poiListEntity.setY(latLineString.get(0).latitude + ""); - } else if (geometry.getGeometryType().equals("Polygon")) {//面 - List latPolygon = GeometryTools.getLatLags(geo); - poiListEntity.setX(latPolygon.get(0).longitude + ""); - poiListEntity.setY(latPolygon.get(0).latitude + ""); + switch (geometry.getGeometryType()) { + case "Point": //点 + LatLng latLng = GeometryTools.createLatLng(geo); + poiListEntity.setX(latLng.longitude + ""); + poiListEntity.setY(latLng.latitude + ""); + break; + case "LineString": //线 + case "Polygon": //面 + List latLineString = GeometryTools.getLatLags(geo); + assert latLineString != null; + poiListEntity.setX(latLineString.get(0).longitude + ""); + poiListEntity.setY(latLineString.get(0).latitude + ""); + break; } //senMessageMarker(poiEntity.getType(), poiEntity.getY(), poiEntity.getX()); if (statusId==1||statusId==5){ @@ -851,22 +856,23 @@ public class GatherGetFragment extends BaseFragment implements View.OnClickListe poiListEntity.setPrecision(String.valueOf(listBean.getPrice())); poiListEntity.setIsExclusive(listBean.getIsExclusive()); poiListEntity.setTaskStatus(statusId); + poiListEntity.setGeoWkt(listBean.getGeo()); String encodeStr = listBean.getGeo(); String geo = Geohash.getInstance().decode(encodeStr); - poiListEntity.setGeoWkt(geo); Geometry geometry = GeometryTools.createGeometry(geo); - if (geometry.getGeometryType().equals("Point")) {//点 - LatLng latLng = GeometryTools.createLatLng(geo); - poiListEntity.setX(latLng.longitude + ""); - poiListEntity.setY(latLng.latitude + ""); - } else if (geometry.getGeometryType().equals("LineString")) {//线 - List latLineString = GeometryTools.getLatLags(geo); - poiListEntity.setX(latLineString.get(0).longitude + ""); - poiListEntity.setY(latLineString.get(0).latitude + ""); - } else if (geometry.getGeometryType().equals("Polygon")) {//面 - List latPolygon = GeometryTools.getLatLags(geo); - poiListEntity.setX(latPolygon.get(0).longitude + ""); - poiListEntity.setY(latPolygon.get(0).latitude + ""); + switch (geometry.getGeometryType()) { + case "Point": //点 + LatLng latLng = GeometryTools.createLatLng(geo); + poiListEntity.setX(latLng.longitude + ""); + poiListEntity.setY(latLng.latitude + ""); + break; + case "LineString": //线 + case "Polygon": //面 + List latLineString = GeometryTools.getLatLags(geo); + assert latLineString != null; + poiListEntity.setX(latLineString.get(0).longitude + ""); + poiListEntity.setY(latLineString.get(0).latitude + ""); + break; } //senMessageMarker(poiEntity.getType(), poiEntity.getY(), poiEntity.getX()); if (statusId==1||statusId==5){ diff --git a/app/src/main/java/com/navinfo/outdoor/fragment/GatheringFragment.java b/app/src/main/java/com/navinfo/outdoor/fragment/GatheringFragment.java index fbaf0aa..2d473b9 100644 --- a/app/src/main/java/com/navinfo/outdoor/fragment/GatheringFragment.java +++ b/app/src/main/java/com/navinfo/outdoor/fragment/GatheringFragment.java @@ -22,6 +22,7 @@ import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; +import com.github.lazylibrary.util.StringUtils; import com.google.gson.Gson; import com.kongzue.dialog.interfaces.OnDialogButtonClickListener; import com.kongzue.dialog.util.BaseDialog; @@ -240,7 +241,12 @@ public class GatheringFragment extends BaseFragment implements View.OnClickListe }else { if (bankCardBean.getResult()!=null&&bankCardBean.getResult().getBank_card_number()!=null){ String bank_card_number = bankCardBean.getResult().getBank_card_number(); + if (StringUtils.isEmpty(bank_card_number)) { + Toast.makeText(getActivity(), "无法识别银行卡号", Toast.LENGTH_SHORT).show(); + return; + } etBankNum.setText(bank_card_number); + String bankName = bankCardBean.getResult().getBank_name(); }else { Toast.makeText(getActivity(), "请拍银行卡照片", Toast.LENGTH_SHORT).show(); } diff --git a/app/src/main/java/com/navinfo/outdoor/fragment/MineFragment.java b/app/src/main/java/com/navinfo/outdoor/fragment/MineFragment.java index 5918ab0..518727d 100644 --- a/app/src/main/java/com/navinfo/outdoor/fragment/MineFragment.java +++ b/app/src/main/java/com/navinfo/outdoor/fragment/MineFragment.java @@ -98,7 +98,7 @@ public class MineFragment extends BaseFragment implements View.OnClickListener { mainGrade = (TextView) findViewById(R.id.main_grade); tvMainGrade = findViewById(R.id.tv_main_grade); if (Constant.LEVEL != 0) { - tvMainGrade.setText(Constant.LEVEL+""); + tvMainGrade.setText(Constant.LEVEL + ""); } initNetWork(); @@ -164,21 +164,23 @@ public class MineFragment extends BaseFragment implements View.OnClickListener { case R.id.rl_set://设置 case R.id.rl_issue://常见问题 case R.id.rl_map://地图下载 - case R.id.rl_privilege://我的特权 - case R.id.rl_grade://我的等级 Toast.makeText(getActivity(), "该功能以后上新,敬请期待", Toast.LENGTH_SHORT).show(); break; + case R.id.rl_privilege://我的特权 + Intent intentPrivilege = new Intent(getActivity(), FragmentManagement.class); + intentPrivilege.putExtra("tag", 18); + startActivity(intentPrivilege); + break; + case R.id.rl_grade://我的等级 + Intent intentGrade = new Intent(getActivity(), FragmentManagement.class); + intentGrade.putExtra("tag", 17); + startActivity(intentGrade); + break; case R.id.btn_withdraw://提现页面 Intent intentWithdraw = new Intent(getActivity(), FragmentManagement.class); intentWithdraw.putExtra("tag", 15); startActivity(intentWithdraw); break; -// Intent intentGrade = new Intent(getActivity(), FragmentManagement.class); -// intentGrade.putExtra("tag", 17); -// startActivity(intentGrade); -// Intent intentPrivilege = new Intent(getActivity(), FragmentManagement.class); -// intentPrivilege.putExtra("tag", 18); -// startActivity(intentPrivilege); // Intent intentMap = new Intent(getActivity(), FragmentManagement.class); // intentMap.putExtra("tag", 19); // startActivity(intentMap); diff --git a/app/src/main/java/com/navinfo/outdoor/fragment/OtherFragment.java b/app/src/main/java/com/navinfo/outdoor/fragment/OtherFragment.java index e7aebf4..c8fde98 100644 --- a/app/src/main/java/com/navinfo/outdoor/fragment/OtherFragment.java +++ b/app/src/main/java/com/navinfo/outdoor/fragment/OtherFragment.java @@ -2,21 +2,16 @@ package com.navinfo.outdoor.fragment; import android.content.Intent; import android.content.SharedPreferences; -import android.graphics.Bitmap; import android.graphics.Color; import android.graphics.Point; -import android.net.Uri; import android.os.Bundle; import android.os.Message; -import android.provider.MediaStore; import android.util.Log; -import android.view.LayoutInflater; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.CheckBox; -import android.widget.CompoundButton; import android.widget.EditText; import android.widget.ImageView; import android.widget.RelativeLayout; @@ -38,21 +33,19 @@ import com.kongzue.dialog.interfaces.OnDialogButtonClickListener; import com.kongzue.dialog.util.BaseDialog; import com.kongzue.dialog.util.DialogSettings; import com.kongzue.dialog.v3.MessageDialog; -import com.lzy.okgo.OkGo; +import com.kongzue.dialog.v3.WaitDialog; import com.lzy.okgo.model.HttpParams; -import com.lzy.okgo.model.Response; import com.navinfo.outdoor.R; import com.navinfo.outdoor.activity.FragmentManagement; import com.navinfo.outdoor.activity.PhotographActivity; import com.navinfo.outdoor.api.Constant; import com.navinfo.outdoor.base.BaseDrawerFragment; +import com.navinfo.outdoor.util.UploadUtils; import com.navinfo.outdoor.bean.Info; -import com.navinfo.outdoor.bean.OtherUploadPicBean; import com.navinfo.outdoor.bean.PoiSaveBean; import com.navinfo.outdoor.bean.PoiUploadBean; import com.navinfo.outdoor.bean.UnPolygonTaskBean; import com.navinfo.outdoor.http.Callback; -import com.navinfo.outdoor.http.DialogCallback; import com.navinfo.outdoor.http.HttpInterface; import com.navinfo.outdoor.http.OkGoBuilder; import com.navinfo.outdoor.room.ChargingPileEntity; @@ -60,8 +53,8 @@ import com.navinfo.outdoor.room.InsertAndUpdateUtils; import com.navinfo.outdoor.room.PoiDao; import com.navinfo.outdoor.room.PoiDatabase; import com.navinfo.outdoor.room.PoiEntity; -import com.navinfo.outdoor.util.AWMp4ParserHelper; import com.navinfo.outdoor.util.Geohash; +import com.navinfo.outdoor.util.GeometryTools; import com.navinfo.outdoor.util.PhotoUtils; import com.tencent.tencentmap.mapsdk.maps.TencentMap; import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptor; @@ -69,6 +62,7 @@ import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptorFactory; import com.tencent.tencentmap.mapsdk.maps.model.LatLng; import com.tencent.tencentmap.mapsdk.maps.model.Marker; import com.tencent.tencentmap.mapsdk.maps.model.MarkerOptions; +import com.vividsolutions.jts.geom.Geometry; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; @@ -81,8 +75,6 @@ import java.util.Calendar; import java.util.List; import java.util.Objects; -import static android.app.Activity.RESULT_OK; - /** * 寻宝-上报-其他的fragment */ @@ -90,7 +82,7 @@ public class OtherFragment extends BaseDrawerFragment implements View.OnClickLis private Spinner spinnerOther; - String[] others = new String[]{"门牌", "公交", "情报"};// //门牌:5 公交:6 情报:7 现在其他任务类型里就这三种 + String[] others = new String[]{"门牌", "公交", "情报"};// //门牌:7 公交:8 情报:9 现在其他任务类型里就这三种 private EditText editTaskName, editOtherDescribe; private RelativeLayout rlPicture; private ImageView ivPicture; @@ -101,7 +93,7 @@ public class OtherFragment extends BaseDrawerFragment implements View.OnClickLis private Button btnOtherLocal; private PoiDao poiDao; private LatLng latLng; - private int station_type = 5; + private int station_type = 7; private ArrayList otherUploadList; private CheckBox checkPot; private Marker markerOther; @@ -173,13 +165,13 @@ public class OtherFragment extends BaseDrawerFragment implements View.OnClickLis public void onItemSelected(AdapterView parent, View view, int position, long id) { switch (position) { case 0: - station_type = 5; + station_type = 7; break; case 1: - station_type = 6; + station_type = 8; break; case 2: - station_type = 7; + station_type = 9; break; } } @@ -320,27 +312,51 @@ public class OtherFragment extends BaseDrawerFragment implements View.OnClickLis if (name != null && !name.equals("")) { editTaskName.setText(name); } - String x = showPoiEntity.getX(); - String y = showPoiEntity.getY(); - if (x != null && y != null) { - latLng = new LatLng(); - latLng.setLongitude(Double.parseDouble(x)); - latLng.setLatitude(Double.parseDouble(y)); + + String geoWkt = showPoiEntity.getGeoWkt(); + if (geoWkt!=null){ + String geo = Geohash.getInstance().decode(geoWkt); + Geometry geometry = GeometryTools.createGeometry(geo); + switch (geometry.getGeometryType()) { + case "Point": //点 + latLng = GeometryTools.createLatLng(geo); + break; + case "LineString": //线 + case "Polygon": //面 + List latLineString = GeometryTools.getLatLags(geo); + assert latLineString != null; + latLng = latLineString.get(0); + break; + } BitmapDescriptor otherDescriptor = BitmapDescriptorFactory.fromResource(R.drawable.marker_other_bag); markerOther = tencentMap.addMarker(new MarkerOptions(latLng).icon(otherDescriptor).anchor(0.5f, 1.0f)); markerOther.setZIndex(4); moveLatlng(latLng, null); + }else { + String x = showPoiEntity.getX(); + String y = showPoiEntity.getY(); + if (x != null && y != null) { + latLng = new LatLng(); + latLng.setLongitude(Double.parseDouble(x)); + latLng.setLatitude(Double.parseDouble(y)); + BitmapDescriptor otherDescriptor = BitmapDescriptorFactory.fromResource(R.drawable.marker_other_bag); + markerOther = tencentMap.addMarker(new MarkerOptions(latLng).icon(otherDescriptor).anchor(0.5f, 1.0f)); + markerOther.setZIndex(4); + moveLatlng(latLng, null); + } } + + String describe = showPoiEntity.getMemo();//任务描述 if (describe != null && !describe.equals("")) { editOtherDescribe.setText(describe); } int station_type = showPoiEntity.getStation_type(); - if (station_type == 5) { + if (station_type == 7) { spinnerOther.setSelection(0, true); - } else if (station_type == 6) { + } else if (station_type == 8) { spinnerOther.setSelection(1, true); - } else if (station_type == 7) { + } else if (station_type == 9) { spinnerOther.setSelection(2, true); } if (showPoiEntity.getPhotoInfo() != null) { @@ -423,7 +439,12 @@ public class OtherFragment extends BaseDrawerFragment implements View.OnClickLis Objects.requireNonNull(getActivity()).runOnUiThread(new Runnable() { @Override public void run() { - otherUploadByNet(poiDaoPoiEntity.getBodyId(), otherUploadList); + if (Constant.isPresent){ + otherUploadByNet(poiDaoPoiEntity.getBodyId(), otherUploadList); + Constant.isPresent=false; + }else { + Toast.makeText(getContext(), "有正在提交的数据,等提交成功后,方可操作", Toast.LENGTH_SHORT).show(); + } } }); } @@ -488,8 +509,6 @@ public class OtherFragment extends BaseDrawerFragment implements View.OnClickLis HttpParams httpParams = new HttpParams(); httpParams.put("auditId", body); - showLoadingDialog(); - setLoadingDialogText("上传中..."); OkGoBuilder.getInstance() .Builder(getActivity()) .url(HttpInterface.OTHER_TASK_UPLOAD_PIC) @@ -497,42 +516,11 @@ public class OtherFragment extends BaseDrawerFragment implements View.OnClickLis .token(Constant.ACCESS_TOKEN) .params(httpParams) .cls(PoiUploadBean.class) - .postFileAsynchronous(new Callback() { - @Override - public void onSuccess(PoiUploadBean response, int id) { - dismissLoadingDialog(); - if (response.getCode() == 200) { - new Thread(new Runnable() { - @Override - public void run() { - PoiEntity poiDaoPoiEntity = poiDao.getPoiEntity(showPoiEntity.getId()); - poiDao.deletePoiEntity(poiDaoPoiEntity); - Objects.requireNonNull(getActivity()).runOnUiThread(new Runnable() { - @Override - public void run() { - Toast.makeText(getActivity(), "上传成功", Toast.LENGTH_SHORT).show(); - Message obtain = Message.obtain(); - obtain.what = Constant.JOB_WORD_MONITOR; - obtain.obj = true; - EventBus.getDefault().post(obtain); - getActivity().onBackPressed();//回退 - } - }); - } - }).start(); - } else { - Toast.makeText(getActivity(), response.getMessage(), Toast.LENGTH_SHORT).show(); - } + .postFileAsynchronous(UploadUtils.getInstance().getOtherUploadCallback(getActivity(),showPoiEntity)); + Objects.requireNonNull(getActivity()).onBackPressed();//回退 + WaitDialog.show((AppCompatActivity) getActivity(), "任务正在后台上传中,请稍候..."); + WaitDialog.dismiss(3000); - } - - @Override - public void onError(Throwable e, int id) { - dismissLoadingDialog(); - Toast.makeText(getActivity(), e.getMessage() + "", Toast.LENGTH_SHORT).show(); - Log.d("TAG", "onError: " + e.getMessage() + ""); - } - }); } private void otherSaveByNetWork(PoiEntity poiEntity, boolean isLocal) { @@ -569,6 +557,7 @@ public class OtherFragment extends BaseDrawerFragment implements View.OnClickLis public void run() { if (isLocal) { otherUploadByNet(body, otherUploadList); + Constant.isPresent=false; } else { Toast.makeText(getActivity(), "保存成功", Toast.LENGTH_SHORT).show(); Message obtain = Message.obtain(); diff --git a/app/src/main/java/com/navinfo/outdoor/fragment/PoiFragment.java b/app/src/main/java/com/navinfo/outdoor/fragment/PoiFragment.java index 068e03d..802a479 100644 --- a/app/src/main/java/com/navinfo/outdoor/fragment/PoiFragment.java +++ b/app/src/main/java/com/navinfo/outdoor/fragment/PoiFragment.java @@ -4,17 +4,14 @@ import android.content.Intent; import android.content.SharedPreferences; import android.graphics.Color; import android.graphics.Point; -import android.net.Uri; import android.os.Bundle; import android.os.Message; -import android.provider.MediaStore; import android.util.Log; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.CheckBox; -import android.widget.CompoundButton; import android.widget.EditText; import android.widget.ImageView; import android.widget.LinearLayout; @@ -38,12 +35,14 @@ import com.kongzue.dialog.interfaces.OnDialogButtonClickListener; import com.kongzue.dialog.util.BaseDialog; import com.kongzue.dialog.util.DialogSettings; import com.kongzue.dialog.v3.MessageDialog; +import com.kongzue.dialog.v3.WaitDialog; import com.lzy.okgo.model.HttpParams; import com.navinfo.outdoor.R; import com.navinfo.outdoor.activity.FragmentManagement; import com.navinfo.outdoor.activity.PhotographActivity; import com.navinfo.outdoor.api.Constant; import com.navinfo.outdoor.base.BaseDrawerFragment; +import com.navinfo.outdoor.util.UploadUtils; import com.navinfo.outdoor.bean.GetPhoneBean; import com.navinfo.outdoor.bean.Info; import com.navinfo.outdoor.bean.OtherUploadPicBean; @@ -61,6 +60,7 @@ import com.navinfo.outdoor.room.PoiDatabase; import com.navinfo.outdoor.room.PoiEntity; import com.navinfo.outdoor.ui.view.ContactView; import com.navinfo.outdoor.util.Geohash; +import com.navinfo.outdoor.util.GeometryTools; import com.navinfo.outdoor.util.PhotoUtils; import com.tencent.tencentmap.mapsdk.maps.TencentMap; import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptor; @@ -68,6 +68,7 @@ import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptorFactory; import com.tencent.tencentmap.mapsdk.maps.model.LatLng; import com.tencent.tencentmap.mapsdk.maps.model.Marker; import com.tencent.tencentmap.mapsdk.maps.model.MarkerOptions; +import com.vividsolutions.jts.geom.Geometry; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; @@ -80,8 +81,6 @@ import java.util.Calendar; import java.util.List; import java.util.Objects; -import static android.app.Activity.RESULT_OK; - /** * poi记录的Fragment * 2021-5-25 @@ -382,17 +381,40 @@ public class PoiFragment extends BaseDrawerFragment implements View.OnClickListe if (address != null && !address.equals("")) { editSiteContent.setText(address); } - String x = showPoiEntity.getX(); - String y = showPoiEntity.getY(); - if (x != null && y != null) { - latLng = new LatLng(); - latLng.setLatitude(Double.parseDouble(y)); - latLng.setLongitude(Double.parseDouble(x)); + + String geoWkt = showPoiEntity.getGeoWkt(); + if (geoWkt!=null){ + String geo = Geohash.getInstance().decode(geoWkt); + Geometry geometry = GeometryTools.createGeometry(geo); + switch (geometry.getGeometryType()) { + case "Point": //点 + latLng = GeometryTools.createLatLng(geo); + break; + case "LineString": //线 + case "Polygon": //面 + List latLineString = GeometryTools.getLatLags(geo); + assert latLineString != null; + latLng = latLineString.get(0); + break; + } BitmapDescriptor poiDescriptor = BitmapDescriptorFactory.fromResource(R.drawable.marker_poi_bags); markerPoi = tencentMap.addMarker(new MarkerOptions(latLng).icon(poiDescriptor).anchor(0.5f, 1.0f)); markerPoi.setZIndex(4); moveLatlng(latLng, null); + }else { + String x = showPoiEntity.getX(); + String y = showPoiEntity.getY(); + if (x != null && y != null) { + latLng = new LatLng(); + latLng.setLatitude(Double.parseDouble(y)); + latLng.setLongitude(Double.parseDouble(x)); + BitmapDescriptor poiDescriptor = BitmapDescriptorFactory.fromResource(R.drawable.marker_poi_bags); + markerPoi = tencentMap.addMarker(new MarkerOptions(latLng).icon(poiDescriptor).anchor(0.5f, 1.0f)); + markerPoi.setZIndex(4); + moveLatlng(latLng, null); + } } + //得到区号 initPhone(); String memo = showPoiEntity.getMemo();//任务描述 @@ -637,7 +659,12 @@ public class PoiFragment extends BaseDrawerFragment implements View.OnClickListe Objects.requireNonNull(getActivity()).runOnUiThread(new Runnable() { @Override public void run() { - poiUploadByNetWork(poiDaoPoiEntity.getBodyId(), poiPicList); + if (Constant.isPresent){ + poiUploadByNetWork(poiDaoPoiEntity.getBodyId(), poiPicList); + Constant.isPresent=false; + }else { + Toast.makeText(getContext(), "有正在提交的数据,等提交成功后,方可操作", Toast.LENGTH_SHORT).show(); + } } }); } @@ -755,7 +782,7 @@ public class PoiFragment extends BaseDrawerFragment implements View.OnClickListe @Override public void run() { InsertAndUpdateUtils.getInstance().insertOrUpdate(getContext(), poiEntity); - getActivity().runOnUiThread(new Runnable() { + Objects.requireNonNull(getActivity()).runOnUiThread(new Runnable() { @Override public void run() { poiSaveByNet(poiEntity, isLocal); @@ -786,8 +813,6 @@ public class PoiFragment extends BaseDrawerFragment implements View.OnClickListe Log.e("TAG", "poiUploadByNetWork: " + body + poiPicList); return; } - showLoadingDialog(); - setLoadingDialogText("上传中..."); HttpParams httpParams = new HttpParams(); httpParams.put("auditId", body); OkGoBuilder.getInstance() @@ -796,41 +821,10 @@ public class PoiFragment extends BaseDrawerFragment implements View.OnClickListe .token(Constant.ACCESS_TOKEN) .fileList(poiPicList) .params(httpParams) - .postFileAsynchronous(new Callback() { - @Override - public void onSuccess(OtherUploadPicBean response, int id) { - dismissLoadingDialog(); - if (response.getCode() == 200) { - new Thread(new Runnable() { - @Override - public void run() { - PoiEntity poiDaoPoiEntity = poiDao.getPoiEntity(showPoiEntity.getId()); - poiDao.deletePoiEntity(poiDaoPoiEntity); - Objects.requireNonNull(getActivity()).runOnUiThread(new Runnable() { - @Override - public void run() { - Toast.makeText(getActivity(), "上传成功", Toast.LENGTH_SHORT).show(); - Message obtain = Message.obtain(); - obtain.what = Constant.JOB_WORD_MONITOR; - obtain.obj = true; - EventBus.getDefault().post(obtain); - getActivity().onBackPressed();//回退 - } - }); - } - }).start(); - } else { - Toast.makeText(getActivity(), response.getMessage(), Toast.LENGTH_SHORT).show(); - } - - } - - @Override - public void onError(Throwable e, int id) { - dismissLoadingDialog(); - Toast.makeText(getActivity(), e.getMessage() + "", Toast.LENGTH_SHORT).show(); - } - }); + .postFileAsynchronous(UploadUtils.getInstance().getPoiUploadCallback(getActivity(),showPoiEntity)); + Objects.requireNonNull(getActivity()).onBackPressed();//回退 + WaitDialog.show((AppCompatActivity) getActivity(), "任务正在后台上传中,请稍候..."); + WaitDialog.dismiss(3000); } @@ -869,6 +863,7 @@ public class PoiFragment extends BaseDrawerFragment implements View.OnClickListe public void run() { if (isLocal) { poiUploadByNetWork(body, poiPicList);//上传 + Constant.isPresent=false; } else { Toast.makeText(getActivity(), "保存成功", Toast.LENGTH_SHORT).show(); Message obtain = Message.obtain(); diff --git a/app/src/main/java/com/navinfo/outdoor/fragment/PoiVideoFragment.java b/app/src/main/java/com/navinfo/outdoor/fragment/PoiVideoFragment.java index 0d7ffde..2997b32 100644 --- a/app/src/main/java/com/navinfo/outdoor/fragment/PoiVideoFragment.java +++ b/app/src/main/java/com/navinfo/outdoor/fragment/PoiVideoFragment.java @@ -11,8 +11,6 @@ import android.widget.Button; import android.widget.EditText; import android.widget.FrameLayout; import android.widget.ImageView; -import android.widget.RadioButton; -import android.widget.RadioGroup; import android.widget.TextView; import android.widget.Toast; @@ -32,13 +30,14 @@ import com.kongzue.dialog.interfaces.OnDialogButtonClickListener; import com.kongzue.dialog.util.BaseDialog; import com.kongzue.dialog.util.DialogSettings; import com.kongzue.dialog.v3.MessageDialog; +import com.kongzue.dialog.v3.WaitDialog; import com.lzy.okgo.model.HttpParams; import com.navinfo.outdoor.R; import com.navinfo.outdoor.activity.FragmentManagement; -import com.navinfo.outdoor.activity.PictureActivity; import com.navinfo.outdoor.activity.PicturesActivity; import com.navinfo.outdoor.api.Constant; import com.navinfo.outdoor.base.BaseDrawerFragment; +import com.navinfo.outdoor.util.UploadUtils; import com.navinfo.outdoor.bean.OtherUploadPicBean; import com.navinfo.outdoor.bean.PoiVideoBean; import com.navinfo.outdoor.bean.UnPolygonTaskBean; @@ -51,12 +50,14 @@ import com.navinfo.outdoor.room.PoiDao; import com.navinfo.outdoor.room.PoiDatabase; import com.navinfo.outdoor.room.PoiEntity; import com.navinfo.outdoor.util.AWMp4ParserHelper; +import com.navinfo.outdoor.util.Geohash; import com.navinfo.outdoor.util.GeometryTools; import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptor; import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptorFactory; import com.tencent.tencentmap.mapsdk.maps.model.LatLng; import com.tencent.tencentmap.mapsdk.maps.model.Marker; import com.tencent.tencentmap.mapsdk.maps.model.MarkerOptions; +import com.vividsolutions.jts.geom.Geometry; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; @@ -197,17 +198,40 @@ public class PoiVideoFragment extends BaseDrawerFragment implements View.OnClick if (name != null && !name.equals("")) { etRoadName.setText(name); } - String x = showPoiEntity.getX(); - String y = showPoiEntity.getY(); - if (x != null && y != null) { - latLng = new LatLng(); - latLng.setLongitude(Double.parseDouble(x)); - latLng.setLatitude(Double.parseDouble(y)); + + String geoWkt = showPoiEntity.getGeoWkt(); + if (geoWkt!=null){ + String geo = Geohash.getInstance().decode(geoWkt); + Geometry geometry = GeometryTools.createGeometry(geo); + switch (geometry.getGeometryType()) { + case "Point": //点 + latLng = GeometryTools.createLatLng(geo); + break; + case "LineString": //线 + case "Polygon": //面 + List latLineString = GeometryTools.getLatLags(geo); + assert latLineString != null; + latLng = latLineString.get(0); + break; + } BitmapDescriptor poiVideoDescriptor = BitmapDescriptorFactory.fromResource(R.drawable.poi_video_bag); markerPoiVideo = tencentMap.addMarker(new MarkerOptions(latLng).icon(poiVideoDescriptor).anchor(0.5f, 1.0f)); markerPoiVideo.setZIndex(4); moveLatlng(latLng, null); + }else { + String x = showPoiEntity.getX(); + String y = showPoiEntity.getY(); + if (x != null && y != null) { + latLng = new LatLng(); + latLng.setLongitude(Double.parseDouble(x)); + latLng.setLatitude(Double.parseDouble(y)); + BitmapDescriptor poiVideoDescriptor = BitmapDescriptorFactory.fromResource(R.drawable.poi_video_bag); + markerPoiVideo = tencentMap.addMarker(new MarkerOptions(latLng).icon(poiVideoDescriptor).anchor(0.5f, 1.0f)); + markerPoiVideo.setZIndex(4); + moveLatlng(latLng, null); + } } + String describe = showPoiEntity.getMemo();//任务描述 if (describe != null && !describe.equals("")) { etDesc.setText(describe); @@ -311,40 +335,42 @@ public class PoiVideoFragment extends BaseDrawerFragment implements View.OnClick startActivityForResult(intent, 0x101); break; case R.id.btn_poi_video_upload: - showLoadingDialog(); - setLoadingDialogText("压缩中..."); - if (fmPoiVideoPic.getTag() != null) { - List videoFileList = (List) fmPoiVideoPic.getTag(); - fileZip = new File(Constant.PICTURE_FOLDER, "files" + ".zip"); - new Thread(new Runnable() { - @Override - public void run() { - ZipUtil.zipFiles(videoFileList, fileZip, null); - PoiEntity poiDaoPoiEntity = poiDao.getPoiEntity(showPoiEntity.getId()); - if (poiDaoPoiEntity == null || poiDaoPoiEntity.getTaskStatus() == 1 || poiDaoPoiEntity.getTaskStatus() == 2 || poiDaoPoiEntity.getTaskStatus() == 0 || poiDaoPoiEntity.getTaskStatus() == 5) { - Objects.requireNonNull(getActivity()).runOnUiThread(new Runnable() { - @Override - public void run() { - dismissLoadingDialog(); - initPoiSaveLocal(true); - } - }); - } else { - Objects.requireNonNull(getActivity()).runOnUiThread(new Runnable() { - @Override - public void run() { - dismissLoadingDialog(); - poiVideoUpload(poiDaoPoiEntity.getBodyId(), fileZip); - } - }); + if (Constant.isPresent){ + if (fmPoiVideoPic.getTag() != null) { + List videoFileList = (List) fmPoiVideoPic.getTag(); + fileZip = new File(Constant.PICTURE_FOLDER, "files" + ".zip"); + new Thread(new Runnable() { + @Override + public void run() { + ZipUtil.zipFiles(videoFileList, fileZip, null); + PoiEntity poiDaoPoiEntity = poiDao.getPoiEntity(showPoiEntity.getId()); + if (poiDaoPoiEntity == null || poiDaoPoiEntity.getTaskStatus() == 1 || poiDaoPoiEntity.getTaskStatus() == 2 || poiDaoPoiEntity.getTaskStatus() == 0 || poiDaoPoiEntity.getTaskStatus() == 5) { + Objects.requireNonNull(getActivity()).runOnUiThread(new Runnable() { + @Override + public void run() { + initPoiSaveLocal(true); + } + }); + } else { + Objects.requireNonNull(getActivity()).runOnUiThread(new Runnable() { + @Override + public void run() { + poiVideoUpload(poiDaoPoiEntity.getBodyId(), fileZip); + Constant.isPresent=false; + } + }); + } } - } - }).start(); - } else { - dismissLoadingDialog(); - Toast.makeText(getActivity(), "请录像", Toast.LENGTH_SHORT).show(); - return; + }).start(); + } else { + dismissLoadingDialog(); + Toast.makeText(getActivity(), "请录像", Toast.LENGTH_SHORT).show(); + return; + } + }else { + Toast.makeText(getContext(), "有正在提交的数据,等提交成功后,方可操作", Toast.LENGTH_SHORT).show(); } + break; } } @@ -406,49 +432,17 @@ public class PoiVideoFragment extends BaseDrawerFragment implements View.OnClick long time = System.currentTimeMillis(); httpParams.put("datetime", time); httpParams.put("file", fileZip); - showLoadingDialog(); - setLoadingDialogText("上传中..."); OkGoBuilder.getInstance() .Builder(getActivity()) .url(HttpInterface.POI_VIDEO_UPLOAD_PIC) .cls(OtherUploadPicBean.class) .params(httpParams) .token(Constant.ACCESS_TOKEN) - .postRequest(new Callback() { - @Override - public void onSuccess(OtherUploadPicBean response, int id) { - dismissLoadingDialog(); - if (response.getCode() == 200) { - new Thread(new Runnable() { - @Override - public void run() { - PoiEntity poiDaoPoiEntity = poiDao.getPoiEntity(showPoiEntity.getId()); - poiDao.deletePoiEntity(poiDaoPoiEntity); - Objects.requireNonNull(getActivity()).runOnUiThread(new Runnable() { - @Override - public void run() { - Toast.makeText(getActivity(), "上传成功", Toast.LENGTH_SHORT).show(); - Message obtain = Message.obtain(); - obtain.what = Constant.JOB_WORD_MONITOR; - obtain.obj = true; - EventBus.getDefault().post(obtain); - getActivity().onBackPressed();//回退 - } - }); - } - }).start(); - } else { - Toast.makeText(getActivity(), response.getMessage() + "", Toast.LENGTH_SHORT).show(); - } - } + .postRequest(UploadUtils.getInstance().getPoiVideoUploadCallback(getActivity(),showPoiEntity)); + Objects.requireNonNull(getActivity()).onBackPressed();//回退 + WaitDialog.show((AppCompatActivity) getActivity(), "任务正在后台上传中,请稍候..."); + WaitDialog.dismiss(3000); - @Override - public void onError(Throwable e, int id) { - dismissLoadingDialog(); - Toast.makeText(getActivity(), "上传失败", Toast.LENGTH_SHORT).show(); - Log.d("TAG", "onError: " + e.getMessage() + ""); - } - }); } private void poiVideoSave(PoiEntity poiEntity, boolean isLocal) { @@ -680,9 +674,8 @@ public class PoiVideoFragment extends BaseDrawerFragment implements View.OnClick } } if (fmPoiVideoPic.getTag() != null && !((List) fmPoiVideoPic.getTag()).isEmpty()) { - List lineStringByFileList = AWMp4ParserHelper.getInstance().getLineStringByFileList((List) fmPoiVideoPic.getTag()); - String lineString = GeometryTools.getLineString(lineStringByFileList); - Log.d("TAG", "onGranted: " + lineString); + List lineStringByFileList = AWMp4ParserHelper.getInstance().getLinePhotoByList((List) fmPoiVideoPic.getTag()); + String lineString = Geohash.getInstance().encodeList(lineStringByFileList); String photoStr = AWMp4ParserHelper.getInstance().getVideoFileListStr((List) fmPoiVideoPic.getTag()); poiEntity.setPhoto(photoStr); if (lineString != null) { diff --git a/app/src/main/java/com/navinfo/outdoor/fragment/RoadFragment.java b/app/src/main/java/com/navinfo/outdoor/fragment/RoadFragment.java index e75a6f8..e9a2d99 100644 --- a/app/src/main/java/com/navinfo/outdoor/fragment/RoadFragment.java +++ b/app/src/main/java/com/navinfo/outdoor/fragment/RoadFragment.java @@ -2,7 +2,6 @@ package com.navinfo.outdoor.fragment; import android.content.Intent; import android.content.SharedPreferences; -import android.graphics.Bitmap; import android.net.Uri; import android.os.Bundle; import android.os.Message; @@ -12,8 +11,6 @@ import android.widget.Button; import android.widget.EditText; import android.widget.FrameLayout; import android.widget.ImageView; -import android.widget.RadioButton; -import android.widget.RadioGroup; import android.widget.TextView; import android.widget.Toast; @@ -22,6 +19,7 @@ import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import androidx.core.widget.NestedScrollView; +import com.bumptech.glide.Glide; import com.github.lazylibrary.util.StringUtils; import com.github.lazylibrary.util.ZipUtil; import com.google.gson.Gson; @@ -32,13 +30,14 @@ import com.kongzue.dialog.interfaces.OnDialogButtonClickListener; import com.kongzue.dialog.util.BaseDialog; import com.kongzue.dialog.util.DialogSettings; import com.kongzue.dialog.v3.MessageDialog; +import com.kongzue.dialog.v3.WaitDialog; import com.lzy.okgo.model.HttpParams; import com.navinfo.outdoor.R; import com.navinfo.outdoor.activity.FragmentManagement; -import com.navinfo.outdoor.activity.PictureActivity; import com.navinfo.outdoor.activity.PicturesActivity; import com.navinfo.outdoor.api.Constant; import com.navinfo.outdoor.base.BaseDrawerFragment; +import com.navinfo.outdoor.util.UploadUtils; import com.navinfo.outdoor.bean.OtherUploadPicBean; import com.navinfo.outdoor.bean.RoadSaveBean; import com.navinfo.outdoor.bean.UnPolygonTaskBean; @@ -51,12 +50,14 @@ import com.navinfo.outdoor.room.PoiDao; import com.navinfo.outdoor.room.PoiDatabase; import com.navinfo.outdoor.room.PoiEntity; import com.navinfo.outdoor.util.AWMp4ParserHelper; +import com.navinfo.outdoor.util.Geohash; import com.navinfo.outdoor.util.GeometryTools; import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptor; import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptorFactory; import com.tencent.tencentmap.mapsdk.maps.model.LatLng; import com.tencent.tencentmap.mapsdk.maps.model.Marker; import com.tencent.tencentmap.mapsdk.maps.model.MarkerOptions; +import com.vividsolutions.jts.geom.Geometry; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; @@ -64,7 +65,6 @@ import org.greenrobot.eventbus.Subscribe; import java.io.File; import java.text.DateFormat; import java.text.SimpleDateFormat; -import java.util.ArrayList; import java.util.Calendar; import java.util.List; import java.util.Objects; @@ -142,7 +142,7 @@ public class RoadFragment extends BaseDrawerFragment implements View.OnClickList super.initView(); PoiDatabase poiDatabase = PoiDatabase.getInstance(getContext()); poiDao = poiDatabase.getPoiDao(); - tvPictures = findViewById(R.id.tv_pictures); + tvPictures = findViewById(R.id.tv_pictures); tvPictures.setOnClickListener(this); setSlidingUpPanelLayout(Constant.SLIDING_LAYOUT); NestedScrollView nestedScrollView = findViewById(R.id.nested_scroll_view); @@ -194,16 +194,37 @@ public class RoadFragment extends BaseDrawerFragment implements View.OnClickList if (name != null && !name.equals("")) { etRoadName.setText(name); } - String x = showPoiEntity.getX(); - String y = showPoiEntity.getY(); - if (x != null && y != null) { - latLng = new LatLng(); - latLng.setLongitude(Double.parseDouble(x)); - latLng.setLatitude(Double.parseDouble(y)); + String geoWkt = showPoiEntity.getGeoWkt(); + if (geoWkt!=null){ + String geo = Geohash.getInstance().decode(geoWkt); + Geometry geometry = GeometryTools.createGeometry(geo); + switch (geometry.getGeometryType()) { + case "Point": //点 + latLng = GeometryTools.createLatLng(geo); + break; + case "LineString": //线 + case "Polygon": //面 + List latLineString = GeometryTools.getLatLags(geo); + assert latLineString != null; + latLng = latLineString.get(0); + break; + } BitmapDescriptor roadDescriptor = BitmapDescriptorFactory.fromResource(R.drawable.marker_road_bag); markerRoad = tencentMap.addMarker(new MarkerOptions(latLng).icon(roadDescriptor).anchor(0.5f, 1.0f)); markerRoad.setZIndex(4); moveLatlng(latLng, null); + }else { + String x = showPoiEntity.getX(); + String y = showPoiEntity.getY(); + if (x != null && y != null) { + latLng = new LatLng(); + latLng.setLongitude(Double.parseDouble(x)); + latLng.setLatitude(Double.parseDouble(y)); + BitmapDescriptor roadDescriptor = BitmapDescriptorFactory.fromResource(R.drawable.marker_road_bag); + markerRoad = tencentMap.addMarker(new MarkerOptions(latLng).icon(roadDescriptor).anchor(0.5f, 1.0f)); + markerRoad.setZIndex(4); + moveLatlng(latLng, null); + } } String describe = showPoiEntity.getDescribe();//任务描述 if (describe != null && !describe.equals("")) { @@ -211,7 +232,22 @@ public class RoadFragment extends BaseDrawerFragment implements View.OnClickList } String photoList = showPoiEntity.getPhoto();//存儲在數據庫中的數據 if (!StringUtils.isEmpty(photoList)) { - String[] photos = photoList.split(","); + if (!StringUtils.isEmpty(photoList)) { + boolean isImageLoad = false; + List fileListByUUID = AWMp4ParserHelper.getInstance().getFileListByUUID(showPoiEntity.getId()); + for (int i = 0; i < fileListByUUID.size(); i++) { + if (fileListByUUID.get(i).getPath().contains(".jpg") && !fileListByUUID.get(i).getPath().contains("paper.txt")) { + if (fileListByUUID.get(i).exists() && !isImageLoad) { + // 使用glide加载视频的第一帧 + Glide.with(Objects.requireNonNull(getActivity())).load(fileListByUUID.get(i)).into(ivRoadPicture); + isImageLoad = true; + } + } + } + fmRoadPic.setTag(fileListByUUID); + } + + /* String[] photos = photoList.split(","); List videoFileList = new ArrayList<>(); boolean isImageLoad = false; if (photos.length > 0) { @@ -229,7 +265,7 @@ public class RoadFragment extends BaseDrawerFragment implements View.OnClickList } } fmRoadPic.setTag(videoFileList); - } + }*/ } } assert showPoiEntity != null; @@ -301,42 +337,44 @@ public class RoadFragment extends BaseDrawerFragment implements View.OnClickList startActivityForResult(intent, 0x101); break; case R.id.road_upload: - showLoadingDialog(); - setLoadingDialogText("压缩中..."); - if (fmRoadPic.getTag() != null) { - List videoFileList = (List) fmRoadPic.getTag(); - fileZip = new File(Constant.PICTURE_FOLDER, "files" + ".zip"); - new Thread(new Runnable() { - @Override - public void run() { - ZipUtil.zipFiles(videoFileList, fileZip, null);//压缩 - PoiEntity poiDaoPoiEntity = poiDao.getPoiEntity(showPoiEntity.getId()); - if (poiDaoPoiEntity == null || poiDaoPoiEntity.getTaskStatus() == 1 || poiDaoPoiEntity.getTaskStatus() == 2 || poiDaoPoiEntity.getTaskStatus() == 0 || poiDaoPoiEntity.getTaskStatus() == 5) { - Objects.requireNonNull(getActivity()).runOnUiThread(new Runnable() { - @Override - public void run() { - dismissLoadingDialog(); - initPoiSaveLocal(true); - } - }); + if (Constant.isPresent) { + if (fmRoadPic.getTag() != null) { + List videoFileList = (List) fmRoadPic.getTag(); + fileZip = new File(Constant.PICTURE_FOLDER, "files" + ".zip"); + new Thread(new Runnable() { + @Override + public void run() { + ZipUtil.zipFiles(videoFileList, fileZip, null);//压缩 + PoiEntity poiDaoPoiEntity = poiDao.getPoiEntity(showPoiEntity.getId()); + if (poiDaoPoiEntity == null || poiDaoPoiEntity.getTaskStatus() == 1 || poiDaoPoiEntity.getTaskStatus() == 2 || poiDaoPoiEntity.getTaskStatus() == 0 || poiDaoPoiEntity.getTaskStatus() == 5) { + Objects.requireNonNull(getActivity()).runOnUiThread(new Runnable() { + @Override + public void run() { + initPoiSaveLocal(true); + } + }); + + } else { + Objects.requireNonNull(getActivity()).runOnUiThread(new Runnable() { + @Override + public void run() { + poiVideoUpload(poiDaoPoiEntity.getBodyId(), fileZip); + Constant.isPresent = false; + } + }); + } - } else { - Objects.requireNonNull(getActivity()).runOnUiThread(new Runnable() { - @Override - public void run() { - dismissLoadingDialog(); - poiVideoUpload(poiDaoPoiEntity.getBodyId(), fileZip); - } - }); } - - } - }).start(); + }).start(); + } else { + dismissLoadingDialog(); + Toast.makeText(getActivity(), "请录像", Toast.LENGTH_SHORT).show(); + return; + } } else { - dismissLoadingDialog(); - Toast.makeText(getActivity(), "请录像", Toast.LENGTH_SHORT).show(); - return; + Toast.makeText(getContext(), "有正在提交的数据,等提交成功后,方可操作", Toast.LENGTH_SHORT).show(); } + break; } @@ -400,49 +438,18 @@ public class RoadFragment extends BaseDrawerFragment implements View.OnClickList long time = System.currentTimeMillis(); httpParams.put("datetime", time); httpParams.put("file", fileZip); - showLoadingDialog(); - setLoadingDialogText("上传中..."); OkGoBuilder.getInstance() .Builder(getActivity()) .url(HttpInterface.ROAD_TASK_UPLOAD_PIC) .params(httpParams) .token(Constant.ACCESS_TOKEN) .cls(OtherUploadPicBean.class) - .postRequest(new Callback() { - @Override - public void onSuccess(OtherUploadPicBean response, int id) { - dismissLoadingDialog(); - if (response.getCode() == 200) { - new Thread(new Runnable() { - @Override - public void run() { - PoiEntity poiDaoPoiEntity = poiDao.getPoiEntity(showPoiEntity.getId()); - poiDao.deletePoiEntity(poiDaoPoiEntity); - Objects.requireNonNull(getActivity()).runOnUiThread(new Runnable() { - @Override - public void run() { - Toast.makeText(getActivity(), "上传成功", Toast.LENGTH_SHORT).show(); - Message obtain = Message.obtain(); - obtain.what = Constant.JOB_WORD_MONITOR; - obtain.obj = true; - EventBus.getDefault().post(obtain); - getActivity().onBackPressed();//回退 - } - }); - } - }).start(); - } else { - Toast.makeText(getActivity(), response.getMessage(), Toast.LENGTH_SHORT).show(); - } - } + .postRequest(UploadUtils.getInstance().getRoadUploadCallback(getActivity(), showPoiEntity)); + Objects.requireNonNull(getActivity()).onBackPressed();//回退 + WaitDialog.show((AppCompatActivity) getActivity(), "任务正在后台上传中,请稍候..."); + WaitDialog.dismiss(3000); + - @Override - public void onError(Throwable e, int id) { - dismissLoadingDialog(); - Toast.makeText(getActivity(), "上传失败", Toast.LENGTH_SHORT).show(); - Log.d("TAG", "onError: " + e.getMessage() + ""); - } - }); } private void roadSaveBetWork(PoiEntity poiEntity, boolean isLocal) { @@ -477,6 +484,7 @@ public class RoadFragment extends BaseDrawerFragment implements View.OnClickList public void run() { if (isLocal) { poiVideoUpload(roadBody, fileZip); + Constant.isPresent = false; } else { Toast.makeText(getActivity(), "保存成功", Toast.LENGTH_SHORT).show(); Message obtain = Message.obtain(); @@ -673,13 +681,13 @@ public class RoadFragment extends BaseDrawerFragment implements View.OnClickList } } if (fmRoadPic.getTag() != null && !((List) fmRoadPic.getTag()).isEmpty()) { - List lineStringByFileList = AWMp4ParserHelper.getInstance().getLineStringByFileList((List) fmRoadPic.getTag()); - String lineString = GeometryTools.getLineString(lineStringByFileList); - Log.d("TAG", "onGranted: " + lineString); + List lineStringByFileList = AWMp4ParserHelper.getInstance().getLinePhotoByList((List) fmRoadPic.getTag()); + String encodeList = Geohash.getInstance().encodeList(lineStringByFileList); + Log.d("TAG", "onGranted: " + encodeList); String photoStr = AWMp4ParserHelper.getInstance().getVideoFileListStr((List) fmRoadPic.getTag()); poiEntity.setPhoto(photoStr); - if (lineString != null) { - poiEntity.setGeoWkt(lineString); + if (encodeList != null) { + poiEntity.setGeoWkt(encodeList); } } return poiEntity; diff --git a/app/src/main/java/com/navinfo/outdoor/fragment/StaySubmitFragment.java b/app/src/main/java/com/navinfo/outdoor/fragment/StaySubmitFragment.java index 4ca8495..963dbc3 100644 --- a/app/src/main/java/com/navinfo/outdoor/fragment/StaySubmitFragment.java +++ b/app/src/main/java/com/navinfo/outdoor/fragment/StaySubmitFragment.java @@ -22,6 +22,7 @@ import com.kongzue.dialog.util.BaseDialog; import com.kongzue.dialog.util.DialogSettings; import com.kongzue.dialog.v3.BottomMenu; import com.kongzue.dialog.v3.MessageDialog; +import com.kongzue.dialog.v3.WaitDialog; import com.lzy.okgo.model.HttpParams; import com.navinfo.outdoor.R; import com.navinfo.outdoor.adapter.StaySubmitAdapter; @@ -83,13 +84,13 @@ public class StaySubmitFragment extends BaseFragment implements View.OnClickList roadDao = roadDatabase.getPoiDao(); ConstraintLayout clStayType = findViewById(R.id.cl_stay_type); clStayType.setOnClickListener(this); - RecyclerView stayXrv =findViewById(R.id.stay_xrv); + RecyclerView stayXrv = findViewById(R.id.stay_xrv); cbSelect = findViewById(R.id.cb_select); cbSelect.setOnClickListener(this); - TextView tvDelete =findViewById(R.id.tv_delete); + TextView tvDelete = findViewById(R.id.tv_delete); tvDelete.setOnClickListener(this); tvStayType = findViewById(R.id.tv_stay_type); - Button btnStaySubmit =findViewById(R.id.btn_stay_submit); + Button btnStaySubmit = findViewById(R.id.btn_stay_submit); btnStaySubmit.setOnClickListener(this); stayXrv.setLayoutManager(new LinearLayoutManager(getActivity())); stayXrv.addItemDecoration(new DividerItemDecoration(Objects.requireNonNull(getContext()), DividerItemDecoration.VERTICAL)); @@ -126,8 +127,6 @@ public class StaySubmitFragment extends BaseFragment implements View.OnClickList public void onEvent(Message data) { if (data.what == Constant.EVENT_STAY_REFRESH) { cbSelect.setChecked(false); - Toast.makeText(getActivity(), (String) data.obj, Toast.LENGTH_SHORT).show(); - dismissLoadingDialog(); refreshData(); } } @@ -192,14 +191,18 @@ public class StaySubmitFragment extends BaseFragment implements View.OnClickList break; case R.id.tv_delete: - DialogSettings.style = DialogSettings.STYLE.STYLE_KONGZUE; - MessageDialog.show((AppCompatActivity) Objects.requireNonNull(getContext()), "提示", "是否删除", "确定", "取消").setOkButton(new OnDialogButtonClickListener() { - @Override - public boolean onClick(BaseDialog baseDialog, View v) { - initRequest(staySubmitAdapter.getAllRoad()); - return false; - } - }); + if (Constant.isPresent) { + DialogSettings.style = DialogSettings.STYLE.STYLE_KONGZUE; + MessageDialog.show((AppCompatActivity) Objects.requireNonNull(getContext()), "提示", "是否删除", "确定", "取消").setOkButton(new OnDialogButtonClickListener() { + @Override + public boolean onClick(BaseDialog baseDialog, View v) { + initRequest(staySubmitAdapter.getAllRoad()); + return false; + } + }); + } else { + Toast.makeText(getContext(), "有正在提交的数据,等提交成功后,方可操作", Toast.LENGTH_SHORT).show(); + } break; case R.id.btn_stay_submit://提交 if (poiEntities == null) { @@ -212,12 +215,17 @@ public class StaySubmitFragment extends BaseFragment implements View.OnClickList poiEntities.add(allRoad.get(i)); } } - if (poiEntities.size() > 0) { - showLoadingDialog(); - setLoadingDialogText("提交中..."); - PoiSaveUtils.getInstance(getActivity()).uploadPoiEntityBatch(poiEntities); + if (Constant.isPresent) { + if (poiEntities.size() > 0) { + PoiSaveUtils.getInstance(getActivity()).uploadPoiEntityBatch(poiEntities); + Constant.isPresent = false; + WaitDialog.show((AppCompatActivity) getActivity(), "任务正在提交中,无需重复提交"); + WaitDialog.dismiss(2000); + } else { + Toast.makeText(getActivity(), "请选择要提交的数据", Toast.LENGTH_SHORT).show(); + } } else { - Toast.makeText(getActivity(), "请选择要提交的数据", Toast.LENGTH_SHORT).show(); + Toast.makeText(getContext(), "有正在提交的数据,等提交成功后,方可操作", Toast.LENGTH_SHORT).show(); } break; } @@ -248,10 +256,10 @@ public class StaySubmitFragment extends BaseFragment implements View.OnClickList auditIds.append(poiEntities.get(i).getBodyId()).append(","); } } - if (!taskIds.toString().equals("")){ + if (!taskIds.toString().equals("")) { taskIds = new StringBuilder(taskIds.substring(0, taskIds.length() - 1)); } - if (!auditIds.toString().equals("")){ + if (!auditIds.toString().equals("")) { auditIds = new StringBuilder(auditIds.substring(0, auditIds.length() - 1)); } HttpParams httpParams = new HttpParams(); @@ -267,9 +275,9 @@ public class StaySubmitFragment extends BaseFragment implements View.OnClickList @Override public void onSuccess(UnPolygonTaskBean response, int id) { dismissLoadingDialog(); - if (response.getCode()==200){ + if (response.getCode() == 200) { staySubmitAdapter.setAllCheckedDelete(); - }else { + } else { Toast.makeText(getActivity(), response.getMessage() + "", Toast.LENGTH_SHORT).show(); } } @@ -315,7 +323,6 @@ public class StaySubmitFragment extends BaseFragment implements View.OnClickList // roadEntities.add(roadAll.get(i)); // } // } - Log.d("TAG", "run: " + roadEntities.toString()); staySubmitAdapter.setAllRoad(roadEntities); staySubmitAdapter.notifyDataSetChanged(); diff --git a/app/src/main/java/com/navinfo/outdoor/fragment/TreasureFragment.java b/app/src/main/java/com/navinfo/outdoor/fragment/TreasureFragment.java index 7bbafa0..c710385 100644 --- a/app/src/main/java/com/navinfo/outdoor/fragment/TreasureFragment.java +++ b/app/src/main/java/com/navinfo/outdoor/fragment/TreasureFragment.java @@ -560,7 +560,6 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen String encodeStr = list.get(i).getGeo(); // 解密geo String geo = Geohash.getInstance().decode(encodeStr); - listBean.setGeo(geo); Log.d("TAG", "onSuccess: " + geo); Geometry geometry = GeometryTools.createGeometry(geo); LatLng latLng = null; @@ -569,9 +568,9 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen case "MultiLineString"://多线 BitmapDescriptor bitmapLine = null; if (listBean.getType() == 3) {//poi录像 - bitmapLine = BitmapDescriptorFactory.fromResource(R.drawable.poi_video_arrows); - } else if (listBean.getType() == 4) {//道路录像 bitmapLine = BitmapDescriptorFactory.fromResource(R.drawable.road_arrows); + } else if (listBean.getType() == 4) {//道路录像 + bitmapLine = BitmapDescriptorFactory.fromResource(R.drawable.poi_video_arrows); } List latLineString = GeometryTools.getLatLags(geo); // 构造 PolylineOptions @@ -582,13 +581,13 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen // 折线的颜色为绿色 .color(Color.parseColor("#0096FF")) // 折线宽度为5像素 - .width(10) + .width(28) // 还可以添加描边颜色 //.borderColor(0xffff0000) // 描边颜色的宽度,线宽还是 25 像素,不过填充的部分宽度为 `width` - 2 * `borderWidth` //.borderWidth(1); .arrow(true) - .arrowSpacing(100) + .arrowSpacing(80) .arrowTexture(bitmapLine); // 绘制折线 Polyline polyline = tencentMap.addPolyline(polylineOptions); @@ -756,8 +755,9 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen } public void initMarker(PoiEntity poiEntity, boolean aBoolean) { - String geo = poiEntity.getGeoWkt(); - Log.d("TAG", "onSuccess: " + geo); + String geoWkt = poiEntity.getGeoWkt(); + Log.d("TAG", "onSuccess: " + geoWkt); + String geo = Geohash.getInstance().decode(geoWkt);//解密 Geometry geometry = GeometryTools.createGeometry(geo); if (geometry == null) { return; @@ -775,9 +775,10 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen case "MultiLineString"://多线 BitmapDescriptor bitmapLine = null; if (poiEntity.getType() == 3) {//poi录像 - bitmapLine = BitmapDescriptorFactory.fromResource(R.drawable.poi_video_arrows); - } else if (poiEntity.getType() == 4) {//道路录像 bitmapLine = BitmapDescriptorFactory.fromResource(R.drawable.road_arrows); + } else if (poiEntity.getType() == 4) {//道路录像 + bitmapLine = BitmapDescriptorFactory.fromResource(R.drawable.poi_video_arrows); + } List latLineString = GeometryTools.getLatLags(geo); // 构造 PolylineOnions @@ -786,11 +787,11 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen // 折线设置圆形线头 .lineCap(true) // 折线的颜色为绿色 - .color(Color.parseColor("#D8D8D8")) + .color(Color.parseColor("#00ffff")) // 折线宽度为5像素 - .width(20) + .width(28) .arrow(true) - .arrowSpacing(150) + .arrowSpacing(80) .arrowTexture(bitmapLine); // 绘制折线 Polyline polyline = tencentMap.addPolyline(polylineOptions); @@ -887,9 +888,11 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen removablesLocality.clear(); for (int i = 0; i < allTaskStatus.size(); i++) { PoiEntity poiEntity = allTaskStatus.get(i); - String geo = allTaskStatus.get(i).getGeoWkt(); + String geoWkt = allTaskStatus.get(i).getGeoWkt(); + LatLng latLng = null; - Log.d("TAG", "onSuccess: " + geo); + Log.d("TAG", "onSuccess: " + geoWkt); + String geo = Geohash.getInstance().decode(geoWkt);//解密geo Geometry geometry = GeometryTools.createGeometry(geo); if (geometry != null) { switch (geometry.getGeometryType()) { @@ -899,23 +902,22 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen case "LineString": //线 case "MultiLineString"://多线 BitmapDescriptor bitmapLine = null; - if (type == 3) {//poi录像 - bitmapLine = BitmapDescriptorFactory.fromResource(R.drawable.poi_video_arrows); - } else if (type == 4) {//道路录像 + if (poiEntity.getType() == 3) {//poi录像 bitmapLine = BitmapDescriptorFactory.fromResource(R.drawable.road_arrows); + } else if (poiEntity.getType() == 4) {//道路录像 + bitmapLine = BitmapDescriptorFactory.fromResource(R.drawable.poi_video_arrows); } List latLineString = GeometryTools.getLatLags(geo); // 构造 PolylineOnions PolylineOptions polylineOptions = new PolylineOptions() - .alpha(0.5f) .addAll(latLineString) // 折线设置圆形线头 .lineCap(true) .color(Color.parseColor("#FFE70C")) // 折线宽度为5像素 - .width(10) + .width(28) .arrow(true) - .arrowSpacing(100) + .arrowSpacing(80) .arrowTexture(bitmapLine); // 绘制折线 Polyline polyline = tencentMap.addPolyline(polylineOptions); @@ -1756,7 +1758,6 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen marker.remove(); break; case 3: - initMarker(poiEntity, false); PoiVideoFragment poiVideoFragment = PoiVideoFragment.newInstance(bundle); showSlidingFragment(poiVideoFragment); @@ -1797,8 +1798,8 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen poiListEntity.setDescribe(listBean.getMemo()); poiListEntity.setCreateTime(listBean.getEndDate()); poiListEntity.setType(listBean.getType()); - String geo = listBean.getGeo(); - poiListEntity.setGeoWkt(geo); + String beanGeo = listBean.getGeo(); + String geo = Geohash.getInstance().decode(beanGeo); Geometry geometry = GeometryTools.createGeometry(geo); switch (geometry.getGeometryType()) { case "Point": //点 diff --git a/app/src/main/java/com/navinfo/outdoor/http/HttpInterface.java b/app/src/main/java/com/navinfo/outdoor/http/HttpInterface.java index 6b5952e..f6b0512 100644 --- a/app/src/main/java/com/navinfo/outdoor/http/HttpInterface.java +++ b/app/src/main/java/com/navinfo/outdoor/http/HttpInterface.java @@ -3,13 +3,12 @@ package com.navinfo.outdoor.http; import com.navinfo.outdoor.api.Constant; public class HttpInterface { - public static final String IP_ = "http://dtxbmaps.navinfo.com/dtxb/m4";//正式接口 + public static final String IP_TEST = "http://dtxbmaps.navinfo.com/dtxb/m4";//正式接口 public static final String DATA_IP = "http://172.23.139.4:9999/m4";//接口 public static final String IP = "http://dtxbmaps.navinfo.com/dtxb_test/m4";//测试接口 public static final String TEST_GUIDANCE_IP = "http://172.21.98.90:9999/m4";//引导页完成接口 public static final String APKIP = "http://172.23.139.4:8001/"; - public static final String USER_PATH = "/user/";//我的 public static final String MSG_LIST_PATH = "/msgList/";//发现 public static final String USER_LOGIN_PATH = "/userlogin/";//登录 @@ -24,7 +23,6 @@ public class HttpInterface { public static void initAppPath(String userId) { APP_CHECK_VERSION = IP + USER_PATH + "appVersion/" + userId + "/checkVersion"; //版本升级 - } /** diff --git a/app/src/main/java/com/navinfo/outdoor/util/AWMp4ParserHelper.java b/app/src/main/java/com/navinfo/outdoor/util/AWMp4ParserHelper.java index 3f5624d..ed53f2b 100644 --- a/app/src/main/java/com/navinfo/outdoor/util/AWMp4ParserHelper.java +++ b/app/src/main/java/com/navinfo/outdoor/util/AWMp4ParserHelper.java @@ -357,4 +357,37 @@ public class AWMp4ParserHelper { } return latLngs; } + + + /** + * 根据图片文件列表,获取到对应的轨迹数据 + * */ + public List getLinePhotoByList(List videoFileList) { + List latLags = new ArrayList<>(); + if (videoFileList == null || videoFileList.isEmpty()) { + return latLags; + } + + for (int m = 0; m < videoFileList.size(); m++) { + if (videoFileList.get(m).getPath().contains("paper.txt")){ + File path = videoFileList.get(m); + List strings = FileUtils.readFileToList(path.getPath(), "utf-8"); + if (strings!=null) { + for (int i = 0; i < strings.size(); i++) { + String[] split = strings.get(i).split(","); + LatLng latLng = new LatLng(); + latLng.setLatitude(Double.valueOf(split[2])); + latLng.setLongitude(Double.valueOf(split[3])); + latLags.add(latLng); + } + if (strings.size() == 1) { + LatLng latLng = latLags.get(0); + latLags.add(latLng); + } + } + } + } + return latLags; + } + } diff --git a/app/src/main/java/com/navinfo/outdoor/base/Base64Util.java b/app/src/main/java/com/navinfo/outdoor/util/Base64Util.java similarity index 98% rename from app/src/main/java/com/navinfo/outdoor/base/Base64Util.java rename to app/src/main/java/com/navinfo/outdoor/util/Base64Util.java index c2eba8c..c3d98da 100644 --- a/app/src/main/java/com/navinfo/outdoor/base/Base64Util.java +++ b/app/src/main/java/com/navinfo/outdoor/util/Base64Util.java @@ -1,4 +1,4 @@ -package com.navinfo.outdoor.base; +package com.navinfo.outdoor.util; /** * Base64 工具类 diff --git a/app/src/main/java/com/navinfo/outdoor/util/Geohash.java b/app/src/main/java/com/navinfo/outdoor/util/Geohash.java index b382158..9e5ae02 100644 --- a/app/src/main/java/com/navinfo/outdoor/util/Geohash.java +++ b/app/src/main/java/com/navinfo/outdoor/util/Geohash.java @@ -9,6 +9,7 @@ import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.util.BitSet; import java.util.HashMap; +import java.util.List; import javax.crypto.BadPaddingException; import javax.crypto.IllegalBlockSizeException; @@ -151,6 +152,15 @@ public class Geohash { } return null; } + public String encodeList(List latLngs){ + String lineString = GeometryTools.getLineString(latLngs); + try { + return Base64.desEncrypt(lineString); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } private BitSet getBits(double lat, double floor, double ceiling) { BitSet buffer = new BitSet(nubbins); 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 b46a65c..efbf5bc 100644 --- a/app/src/main/java/com/navinfo/outdoor/util/PoiSaveUtils.java +++ b/app/src/main/java/com/navinfo/outdoor/util/PoiSaveUtils.java @@ -87,8 +87,12 @@ public class PoiSaveUtils { public void run() { Message obtain = Message.obtain(); obtain.what = Constant.EVENT_STAY_REFRESH; - obtain.obj = "提交成功" + anInt + ",提交失败" + bInt; EventBus.getDefault().post(obtain); + + Message obtain1 = Message.obtain(); + obtain1.what = Constant.NEST_WORD_SUBMIT; + obtain1.obj = "批量提交 成功:" + anInt + ", 失败:" + bInt; + EventBus.getDefault().post(obtain1); } }); @@ -259,12 +263,6 @@ public class PoiSaveUtils { } List videoFileList = AWMp4ParserHelper.getInstance().getFileListByUUID(poiEntity.getId()); if (videoFileList != null && !videoFileList.isEmpty()) { - /*List txtFileList = new ArrayList<>(); - for (File videoFile : videoFileList) { - File file = new File(videoFile.getAbsolutePath() + ".txt"); - txtFileList.add(file); - }*/ - //videoFileList.addAll(videoFileList); File fileZip = new File(Constant.PICTURE_FOLDER, "files" + ".zip"); ZipUtil.zipFiles(videoFileList, fileZip, null); photoFile.add(fileZip); diff --git a/app/src/main/java/com/navinfo/outdoor/util/UploadUtils.java b/app/src/main/java/com/navinfo/outdoor/util/UploadUtils.java new file mode 100644 index 0000000..299ba00 --- /dev/null +++ b/app/src/main/java/com/navinfo/outdoor/util/UploadUtils.java @@ -0,0 +1,283 @@ +package com.navinfo.outdoor.util; + +import android.app.Activity; +import android.os.Message; +import android.util.Log; + +import com.navinfo.outdoor.api.Constant; +import com.navinfo.outdoor.bean.OtherUploadPicBean; +import com.navinfo.outdoor.bean.PoiUploadBean; +import com.navinfo.outdoor.http.Callback; +import com.navinfo.outdoor.room.PoiDao; +import com.navinfo.outdoor.room.PoiDatabase; +import com.navinfo.outdoor.room.PoiEntity; + +import org.greenrobot.eventbus.EventBus; + +import java.util.Objects; + +public class UploadUtils { + private static UploadUtils instance; + + public static UploadUtils getInstance() { + if (instance == null) { + instance = new UploadUtils(); + } + return instance; + } + + /** + * 道路 + * @param mContext + * @param showPoiEntity + * @return + */ + public Callback getRoadUploadCallback(Activity mContext, PoiEntity showPoiEntity) { + PoiDao poiDao = PoiDatabase.getInstance(mContext).getPoiDao(); + return new Callback() { + @Override + public void onSuccess(OtherUploadPicBean response, int id) { + if (response.getCode() == 200) { + Message obtain1 = Message.obtain(); + obtain1.what = Constant.NEST_WORD_SUBMIT; + obtain1.obj = "道路:" + showPoiEntity.getName() + " 上传成功"; + EventBus.getDefault().post(obtain1); + new Thread(new Runnable() { + @Override + public void run() { + PoiEntity poiDaoPoiEntity = poiDao.getPoiEntity(showPoiEntity.getId()); + poiDao.deletePoiEntity(poiDaoPoiEntity); + Objects.requireNonNull(mContext).runOnUiThread(new Runnable() { + @Override + public void run() { + Message obtain = Message.obtain(); + obtain.what = Constant.JOB_WORD_MONITOR; + obtain.obj = true; + EventBus.getDefault().post(obtain); + } + }); + } + }).start(); + } else { + Message obtain1 = Message.obtain(); + obtain1.what = Constant.NEST_WORD_SUBMIT; + obtain1.obj = "道路:" + showPoiEntity.getName() + " 上传失败"; + EventBus.getDefault().post(obtain1); + } + } + + @Override + public void onError(Throwable e, int id) { + Message obtain1 = Message.obtain(); + obtain1.what = Constant.NEST_WORD_SUBMIT; + obtain1.obj = "道路:" + showPoiEntity.getName() + " 上传失败"; + EventBus.getDefault().post(obtain1); + Log.d("TAG", "onError: " + e.getMessage() + ""); + } + }; + } + /** + * poi + * @param mContext + * @param showPoiEntity + * @return + */ + public Callback getPoiUploadCallback(Activity mContext, PoiEntity showPoiEntity) { + PoiDao poiDao = PoiDatabase.getInstance(mContext).getPoiDao(); + return new Callback() { + @Override + public void onSuccess(OtherUploadPicBean response, int id) { + if (response.getCode() == 200) { + Message obtain1 = Message.obtain(); + obtain1.what = Constant.NEST_WORD_SUBMIT; + obtain1.obj = "Poi:"+showPoiEntity.getName()+" 上传成功"; + EventBus.getDefault().post(obtain1); + new Thread(new Runnable() { + @Override + public void run() { + PoiEntity poiDaoPoiEntity = poiDao.getPoiEntity(showPoiEntity.getId()); + poiDao.deletePoiEntity(poiDaoPoiEntity); + Objects.requireNonNull(mContext).runOnUiThread(new Runnable() { + @Override + public void run() { + Message obtain = Message.obtain(); + obtain.what = Constant.JOB_WORD_MONITOR; + obtain.obj = true; + EventBus.getDefault().post(obtain); + } + }); + } + }).start(); + } else { + Message obtain1 = Message.obtain(); + obtain1.what = Constant.NEST_WORD_SUBMIT; + obtain1.obj = "Poi:"+showPoiEntity.getName()+" 上传失败"; + EventBus.getDefault().post(obtain1); + } + + } + + @Override + public void onError(Throwable e, int id) { + Message obtain1 = Message.obtain(); + obtain1.what = Constant.NEST_WORD_SUBMIT; + obtain1.obj = "Poi:"+showPoiEntity.getName()+" 上传失败"; + EventBus.getDefault().post(obtain1); + } + }; + } + + /** + * poiVideo + * @param mContext + * @param showPoiEntity + * @return + */ + public Callback getPoiVideoUploadCallback(Activity mContext, PoiEntity showPoiEntity) { + PoiDao poiDao = PoiDatabase.getInstance(mContext).getPoiDao(); + return new Callback() { + @Override + public void onSuccess(OtherUploadPicBean response, int id) { + if (response.getCode() == 200) { + Message obtain1 = Message.obtain(); + obtain1.what = Constant.NEST_WORD_SUBMIT; + obtain1.obj = "poi录像:"+showPoiEntity.getName()+" 上传成功"; + EventBus.getDefault().post(obtain1); + new Thread(new Runnable() { + @Override + public void run() { + PoiEntity poiDaoPoiEntity = poiDao.getPoiEntity(showPoiEntity.getId()); + poiDao.deletePoiEntity(poiDaoPoiEntity); + Objects.requireNonNull(mContext).runOnUiThread(new Runnable() { + @Override + public void run() { + Message obtain = Message.obtain(); + obtain.what = Constant.JOB_WORD_MONITOR; + obtain.obj = true; + EventBus.getDefault().post(obtain); + } + }); + } + }).start(); + } else { + Message obtain1 = Message.obtain(); + obtain1.what = Constant.NEST_WORD_SUBMIT; + obtain1.obj = "poi录像:"+showPoiEntity.getName()+" 上传失败"; + EventBus.getDefault().post(obtain1); + } + } + + @Override + public void onError(Throwable e, int id) { + Message obtain1 = Message.obtain(); + obtain1.what = Constant.NEST_WORD_SUBMIT; + obtain1.obj = "poi录像:"+showPoiEntity.getName()+" 上传失败"; + EventBus.getDefault().post(obtain1); + Log.d("TAG", "onError: " + e.getMessage() + ""); + } + }; + } + + /** + * other + * @param mContext + * @param showPoiEntity + * @return + */ + public Callback getOtherUploadCallback(Activity mContext, PoiEntity showPoiEntity) { + PoiDao poiDao = PoiDatabase.getInstance(mContext).getPoiDao(); + return new Callback() { + @Override + public void onSuccess(PoiUploadBean response, int id) { + if (response.getCode() == 200) { + Message obtain1 = Message.obtain(); + obtain1.what = Constant.NEST_WORD_SUBMIT; + obtain1.obj = "其他:"+showPoiEntity.getName()+" 上传成功"; + EventBus.getDefault().post(obtain1); + new Thread(new Runnable() { + @Override + public void run() { + PoiEntity poiDaoPoiEntity = poiDao.getPoiEntity(showPoiEntity.getId()); + poiDao.deletePoiEntity(poiDaoPoiEntity); + Objects.requireNonNull(mContext).runOnUiThread(new Runnable() { + @Override + public void run() { + Message obtain = Message.obtain(); + obtain.what = Constant.JOB_WORD_MONITOR; + obtain.obj = true; + EventBus.getDefault().post(obtain); + } + }); + } + }).start(); + } else { + Message obtain1 = Message.obtain(); + obtain1.what = Constant.NEST_WORD_SUBMIT; + obtain1.obj = "其他:"+showPoiEntity.getName()+" 上传失败"; + EventBus.getDefault().post(obtain1); + } + + } + + @Override + public void onError(Throwable e, int id) { + Message obtain1 = Message.obtain(); + obtain1.what = Constant.NEST_WORD_SUBMIT; + obtain1.obj = "其他:"+showPoiEntity.getName()+" 上传失败"; + EventBus.getDefault().post(obtain1); + Log.d("TAG", "onError: " + e.getMessage() + ""); + } + }; + } + + /** + * charging + * @param mContext + * @param showPoiEntity + * @return + */ + public Callback getChargingUploadCallback(Activity mContext, PoiEntity showPoiEntity) { + PoiDao poiDao = PoiDatabase.getInstance(mContext).getPoiDao(); + return new Callback() { + @Override + public void onSuccess(PoiUploadBean response, int id) { + if (response.getCode() == 200) { + Message obtain1 = Message.obtain(); + obtain1.what = Constant.NEST_WORD_SUBMIT; + obtain1.obj = "充电站:"+showPoiEntity.getName()+" 上传成功"; + EventBus.getDefault().post(obtain1); + new Thread(new Runnable() { + @Override + public void run() { + poiDao.deletePoiEntity(showPoiEntity); + mContext.runOnUiThread(new Runnable() { + @Override + public void run() { + Message obtain = Message.obtain(); + obtain.what = Constant.JOB_WORD_MONITOR; + obtain.obj = true; + EventBus.getDefault().post(obtain); + } + }); + } + }).start(); + } else { + Message obtain1 = Message.obtain(); + obtain1.what = Constant.NEST_WORD_SUBMIT; + obtain1.obj = "充电站:"+showPoiEntity.getName()+" 上传失败"; + EventBus.getDefault().post(obtain1); + } + } + + @Override + public void onError(Throwable e, int id) { + Message obtain1 = Message.obtain(); + obtain1.what = Constant.NEST_WORD_SUBMIT; + obtain1.obj = "充电站:"+showPoiEntity.getName()+" 上传失败"; + EventBus.getDefault().post(obtain1); + Log.d("TAG", "onError: " +e.getMessage() + ""); + } + }; + } + +} diff --git a/app/src/main/java/com/navinfo/outdoor/util/Voice.java b/app/src/main/java/com/navinfo/outdoor/util/Voice.java new file mode 100644 index 0000000..9b1d99a --- /dev/null +++ b/app/src/main/java/com/navinfo/outdoor/util/Voice.java @@ -0,0 +1,62 @@ +package com.navinfo.outdoor.util; + +import com.jacob.activeX.ActiveXComponent; +import com.jacob.com.Dispatch; +import com.jacob.com.Variant; + +/** + * 语音播放 + */ +public class Voice { + /** + * @param type 设定文件 0:开始,1停止 + * @return 返回类型:void + * @Title: start + * @Description: 该方法的主要作用:朗读 + */ + public static void sprat(String content, int type) { + ActiveXComponent sap = new ActiveXComponent("Sapi.SpVoice"); + Dispatch sago = sap.getObject(); + if (type == 0) { + try { + // 音量 0-100 + sap.setProperty("Volume", new Variant(100)); + // 语音朗读速度 -10 到 +10 + sap.setProperty("Rate", new Variant(1.3)); + Variant defaultVoice = sap.getProperty("Voice"); + Dispatch discrepantVoice = defaultVoice.toDispatch(); + Variant allVoices = Dispatch.call(sago, "GetVoices"); + Dispatch disVoices = allVoices.toDispatch(); + Dispatch serviced = Dispatch.call(disVoices, "Item", + new Variant(1)).toDispatch(); + ActiveXComponent voiceActive = new ActiveXComponent(discrepantVoice); + ActiveXComponent servicedActives = new ActiveXComponent(serviced); + Variant item = Dispatch.call(servicedActives, "GetDescription"); + // 执行朗读 + Dispatch.call(sago, "Speak", new Variant(content)); + } catch (Exception e) { + e.printStackTrace(); + } finally { + sago.safeRelease(); + sap.safeRelease(); + } + } else { + // 停止 + try { + Dispatch.call(sago, "Speak", new Variant(content), new Variant(2)); + } catch (Exception e) { + System.out.println(e.getMessage()); + e.printStackTrace(); + } + } + } + + /** + * @return 返回类型:void + * @Title: test + * @Description: 该方法的主要作用:执行朗读内容 + */ + public void test() { + sprat("请不要超过 多少", 0); + } +} diff --git a/app/src/main/res/drawable/btn_corners_bg.xml b/app/src/main/res/drawable/btn_corners_bg.xml new file mode 100644 index 0000000..db97cb9 --- /dev/null +++ b/app/src/main/res/drawable/btn_corners_bg.xml @@ -0,0 +1,24 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/corners_bg.xml b/app/src/main/res/drawable/corners_bg.xml new file mode 100644 index 0000000..ae8058d --- /dev/null +++ b/app/src/main/res/drawable/corners_bg.xml @@ -0,0 +1,24 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml index 004ee82..e83dff2 100644 --- a/app/src/main/res/layout/activity_login.xml +++ b/app/src/main/res/layout/activity_login.xml @@ -164,4 +164,16 @@ app:layout_constraintEnd_toEndOf="@+id/et_login_paw" app:layout_constraintStart_toStartOf="@+id/et_login_paw" app:layout_constraintTop_toBottomOf="@+id/tv_statement" /> + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 263ea7c..a042ae4 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -7,15 +7,6 @@ android:background="@drawable/start_bg" tools:context="activity.MainActivity"> - + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_pictures.xml b/app/src/main/res/layout/activity_pictures.xml index c45457a..8310b7d 100644 --- a/app/src/main/res/layout/activity_pictures.xml +++ b/app/src/main/res/layout/activity_pictures.xml @@ -98,7 +98,14 @@ app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" /> - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_marker.xml b/app/src/main/res/layout/item_marker.xml index 6968718..d009e44 100644 --- a/app/src/main/res/layout/item_marker.xml +++ b/app/src/main/res/layout/item_marker.xml @@ -17,8 +17,12 @@ @@ -35,8 +35,8 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="请查看APP使用说明" - android:textColor="@color/black" - android:textSize="20dp" + android:textColor="#333333" + android:textSize="18sp" android:textStyle="normal" app:layout_constraintBottom_toTopOf="@+id/btn_login" app:layout_constraintEnd_toEndOf="parent" @@ -46,12 +46,14 @@