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