From 3df944d30530be8dc0ea1cbe1ed4afc22eb160a5 Mon Sep 17 00:00:00 2001
From: zuoxiao <470321431@qq.com>
Date: 星期四, 06 二月 2025 11:09:48 +0800
Subject: [PATCH] 1.添加数据更新功能,确保本地没有数据时再获取基础数据 2.地图界面上添加滚动功能的控件(部分功能)
---
app/src/main/java/com/dayu/pipirrapp/fragment/MapFragment.java | 165 +++++++++++++++++++++++++++++++++++++++++++------------
1 files changed, 129 insertions(+), 36 deletions(-)
diff --git a/app/src/main/java/com/dayu/pipirrapp/fragment/MapFragment.java b/app/src/main/java/com/dayu/pipirrapp/fragment/MapFragment.java
index 39ec637..ddfb4c4 100644
--- a/app/src/main/java/com/dayu/pipirrapp/fragment/MapFragment.java
+++ b/app/src/main/java/com/dayu/pipirrapp/fragment/MapFragment.java
@@ -78,6 +78,7 @@
import java.util.stream.Collectors;
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
+import io.reactivex.rxjava3.disposables.CompositeDisposable;
import io.reactivex.rxjava3.schedulers.Schedulers;
/**
@@ -116,6 +117,9 @@
MarkerBean mMarkerBean;
+ // 娣诲姞CompositeDisposable鏉ョ鐞嗘墍鏈夎闃�
+ private CompositeDisposable compositeDisposable = new CompositeDisposable();
+
@Override
public void onAttach(@NonNull Context context) {
super.onAttach(context);
@@ -130,6 +134,13 @@
setRetainInstance(true);
Log.i(TAG, "onCreate");
mInspectionState = SharedPreferencesHelper.getInstance(this.getContext()).get(CommonKeyName.inspectionState, 0);
+
+ // 娣诲姞鍒锋柊鏁版嵁鐨勭洃鍚�
+ LiveEventBus.get(CommonKeyName.refreshData).observe(this, o -> {
+ getCenterPoint();
+ getMarkerData();
+ getDivideList();
+ });
}
@Override
@@ -142,7 +153,6 @@
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
-
binding = FragmentMapBinding.inflate(inflater, container, false);
mapFragmenObserver.setmWebView(binding.webView);
Log.i("MapFragment", "onCreateView");
@@ -151,15 +161,87 @@
MyWebViewInterface myWebViewInterface = new MyWebViewInterface(MapFragment.this);
mWebView.addJavascriptInterface(myWebViewInterface, "Android");
mWebView.loadUrl("file:///android_asset/index.html");
- getCenterPoint();
+
+ // 寮傛鍔犺浇鏈湴鏁版嵁
+ loadLocalData();
+
initView();
initWeb();
- getMarkerData();
- getDivideList();
-
chageInspecState(mInspectionState);
return binding.getRoot();
+ }
+
+ /**
+ * 寮傛鍔犺浇鏈湴鏁版嵁
+ */
+ private void loadLocalData() {
+ // 寮傛鍔犺浇涓績鐐规暟鎹�
+ compositeDisposable.add(
+ DaoSingleton.getAsynchInstance(this.getContext()).centerPointDao().findFirst()
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(result -> {
+ centerPointBean = result;
+ if (centerPointBean == null) {
+ getCenterPoint();
+ } else {
+ jumpCenterPoint();
+ }
+ }, throwable -> {
+ Log.e(TAG, "Load centerPoint error: " + throwable);
+ getCenterPoint();
+ }, () -> {
+ // 褰揗aybe涓虹┖鏃惰皟鐢�
+ getCenterPoint();
+ })
+ );
+
+ // 寮傛鍔犺浇鍙栨按鍙f暟鎹�
+ compositeDisposable.add(
+ DaoSingleton.getAsynchInstance(this.getContext()).markerDao().getAll()
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(markers -> {
+ if (markers == null || markers.isEmpty()) {
+ getMarkerData();
+ } else {
+ for (MarkerBean marker : markers) {
+ markerBeanSet.put(marker.getId(), marker);
+ setMapMarker(marker);
+ }
+ }
+ }, throwable -> {
+ Log.e(TAG, "Load markers error: " + throwable.getMessage());
+ getMarkerData();
+ }, () -> {
+ // 褰揗aybe涓虹┖鏃惰皟鐢�
+ getMarkerData();
+ })
+ );
+
+ // 寮傛鍔犺浇鍒嗘按鎴挎暟鎹�
+ compositeDisposable.add(
+ DaoSingleton.getAsynchInstance(this.getContext()).divideDao().getAll()
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(divides -> {
+ if (divides == null || divides.isEmpty()) {
+ getDivideList();
+ } else {
+ for (DivideBean divide : divides) {
+ divideBeanMap.put(divide.getId(), divide);
+ setMapDivide(divide);
+ }
+ }
+ }, throwable -> {
+ Log.e(TAG, "Load divides error: " + throwable.getMessage());
+ getDivideList();
+ }, () -> {
+ // 褰揗aybe涓虹┖鏃惰皟鐢�
+ getDivideList();
+ })
+ );
}
private void initWeb() {
@@ -232,9 +314,10 @@
* web鍔犺浇瀹屽垵濮嬪寲鏈湴鏁版嵁
*/
public void webFinishInitLocalData() {
- //璺宠浆涓績鐐�
- centerPointBean = DaoSingleton.getInstance(MapFragment.this.getContext()).centerPointDao().findFirst();
- jumpCenterPoint();
+ // 鍙湪鏈湴娌℃湁鏁版嵁鏃惰幏鍙栦腑蹇冪偣
+ if (centerPointBean != null) {
+ jumpCenterPoint();
+ }
//娣诲姞鍥爓ebview娌℃湁鍔犺浇瀹屾垚瀵艰嚧娌℃湁娣诲姞鐨勫湴鍥炬爣娉�
if (!webNoFinishMarkerData.isEmpty()) {
for (MarkerBean bean : webNoFinishMarkerData) {
@@ -285,18 +368,22 @@
})
.collect(Collectors.toList());
- DaoSingleton.getInstance(MapFragment.this.getContext()).markerDao().deleteAll();
- // 浣跨敤 RxJava 寮傛鎻掑叆鏁版嵁
- DaoSingleton.getAsynchInstance(MapFragment.this.getContext()).markerDao().insertAll(markerBeans)
- .subscribeOn(Schedulers.io()) // 鍦� IO 绾跨▼涓婃墽琛�
- .observeOn(AndroidSchedulers.mainThread()) // 鍦ㄤ富绾跨▼涓婅瀵�
- .subscribe(() -> {
- // 鎻掑叆鎴愬姛
- Log.i("mWebView", "鏁版嵁鎻掑叆鎴愬姛");
- }, throwable -> {
- // 鎻掑叆澶辫触
- Log.e("mWebView", "鏁版嵁鎻掑叆澶辫触: " + throwable.getMessage());
- });
+ // 浣跨敤 CompositeDisposable 绠$悊鏁版嵁搴撴彃鍏ユ搷浣�
+ compositeDisposable.add(
+ DaoSingleton.getAsynchInstance(MapFragment.this.getContext()).markerDao().insertAll(markerBeans)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(
+ () -> {
+ // 鎻掑叆鎴愬姛
+ Log.i("mWebView", "鏁版嵁鎻掑叆鎴愬姛");
+ },
+ throwable -> {
+ // 鎻掑叆澶辫触
+ Log.e("mWebView", "鏁版嵁鎻掑叆澶辫触: " + throwable.getMessage());
+ }
+ )
+ );
}
} else {
@@ -629,7 +716,7 @@
}
/**
- * 娣诲姞鍙栨按鍙f爣娉�
+ * 娣诲姞绠$綉鏍囨敞
*/
public void setMapDivide(PipeNetworkBean pipeNetworkBean) {
// if (divide != null) {
@@ -917,27 +1004,30 @@
try {
if (t.isSuccess()) {
if (t.getContent().getObj() != null && !t.getContent().getObj().isEmpty()) {
-
List<DivideBean> divideBeans = new ArrayList<>();
for (DivideResult divideResult : t.getContent().getObj()) {
DivideBean divideBean = getDivideBean(divideResult);
setMapDivide(divideBean);
divideBeans.add(divideBean);
}
- // 浣跨敤 RxJava 寮傛鎻掑叆鏁版嵁
- DaoSingleton.getAsynchInstance(MapFragment.this.getContext()).divideDao().insertAll(divideBeans)
- .subscribeOn(Schedulers.io()) // 鍦� IO 绾跨▼涓婃墽琛�
- .observeOn(AndroidSchedulers.mainThread()) // 鍦ㄤ富绾跨▼涓婅瀵�
- .subscribe(() -> {
- // 鎻掑叆鎴愬姛
- Log.i("mWebView", "鏁版嵁鎻掑叆鎴愬姛");
- }, throwable -> {
- // 鎻掑叆澶辫触
- Log.e("mWebView", "鏁版嵁鎻掑叆澶辫触: " + throwable.getMessage());
- });
+
+ // 浣跨敤 CompositeDisposable 绠$悊鏁版嵁搴撴彃鍏ユ搷浣�
+ compositeDisposable.add(
+ DaoSingleton.getAsynchInstance(MapFragment.this.getContext()).divideDao().insertAll(divideBeans)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(
+ () -> {
+ // 鎻掑叆鎴愬姛
+ Log.i("mWebView", "鏁版嵁鎻掑叆鎴愬姛");
+ },
+ throwable -> {
+ // 鎻掑叆澶辫触
+ Log.e("mWebView", "鏁版嵁鎻掑叆澶辫触: " + throwable.getMessage());
+ }
+ )
+ );
}
-
-
} else {
ToastUtil.showToastLong(MapFragment.this.getContext(), t.getMsg());
}
@@ -946,7 +1036,6 @@
CrashReport.postCatchedException(e);
}
}
-
});
}
@@ -1031,6 +1120,10 @@
@Override
public void onDestroy() {
super.onDestroy();
+ // 娓呯悊鎵�鏈夎闃�
+ if (compositeDisposable != null && !compositeDisposable.isDisposed()) {
+ compositeDisposable.dispose();
+ }
LiveEventBus.get(CommonKeyName.locationData).removeObserver(locationObserver);
if (mWebView != null) {
mWebView.destroy();
--
Gitblit v1.8.0