管灌系统巡查员智能手机App
1.添加退出登录时判断是否开启巡检,开启巡检不可退出登录。
2.添加异常退出后恢复巡检记录的功能。
3.添加统一的提示Dialog
10个文件已修改
4个文件已添加
569 ■■■■ 已修改文件
app/src/main/assets/js/map.js 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/pipirrapp/activity/SplashScreenActivity.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/pipirrapp/bean/db/InspectionBean.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/pipirrapp/bean/db/InspectionLocationBean.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/pipirrapp/bean/net/InsectionResult.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/pipirrapp/dao/DaoSingleton.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/pipirrapp/dao/InspectionDao.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/pipirrapp/dao/InspectionLocationDao.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/pipirrapp/fragment/MapFragment.java 143 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/pipirrapp/fragment/MyFragment.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/pipirrapp/tool/InspectionUtils.java 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/pipirrapp/view/TipDialog.java 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/pipirrapp/view/TipUtil.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/text_dialog.xml 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/assets/js/map.js
@@ -19,6 +19,7 @@
    });
    window.onload = function () {
        console.log(window.onload);  // 打印数组数据
        //加载坐标点
        window.Android.loadMarker();
    };
@@ -167,6 +168,7 @@
        window.addMarker = addMarker;
        window.setCenterAndZoom = setCenterAndZoom;
        window.updateLocation = updateLocation;
        window.aginShowLocation = aginShowLocation;
    }
    // 调用原生安卓方法显示取水口详情
@@ -283,8 +285,8 @@
        map.addOverLay(lineLayer);
        let icon = new T.Icon({
            iconUrl: locationIMGPath,
            iconSize: new T.Point(27, 27),
            iconAnchor: new T.Point(13, 20)
            iconSize: new T.Point(20, 20),
            iconAnchor: new T.Point(10, 10)
        });
        if (locationMarker) {
            map.removeOverLay(locationMarker);
@@ -296,6 +298,15 @@
        // }, 500);
    }
    var aginPath = [];
    function aginShowLocation(lng, lat) {
        // 调用 Android 提供的接口,获取数据
        console.log("aginShowLocation>>lng:"+lng+">>>lat:"+lat);
        var newPoint = new T.LngLat(lng, lat);
        aginPath.push(newPoint);
        lineLayer.setLngLats(aginPath);
        map.addOverLay(lineLayer);
    }
})();
app/src/main/java/com/dayu/pipirrapp/activity/SplashScreenActivity.java
@@ -44,6 +44,7 @@
                e.printStackTrace();
                startLoginActivity();
            }
            SplashScreenActivity.this.finish();
//            Intent intent = new Intent(this, OrderDealActivity.class);
//            startActivity(intent);
//            SplashScreenActivity.this.finish();
app/src/main/java/com/dayu/pipirrapp/bean/db/InspectionBean.java
@@ -14,10 +14,10 @@
public class InspectionBean {
    @PrimaryKey(autoGenerate = true)
    public long id;
    String inspectId;//巡检ID
    String mInspectId;//本地数据库巡检ID
    String startTime;//开始巡检时间
    String stopTime;//停止巡检时间
    public String inspectId;//巡检ID
    public String mInspectId;//本地数据库巡检ID
    public String startTime;//开始巡检时间
    public String stopTime;//停止巡检时间
    public String getmInspectId() {
        return mInspectId;
app/src/main/java/com/dayu/pipirrapp/bean/db/InspectionLocationBean.java
@@ -1,5 +1,6 @@
package com.dayu.pipirrapp.bean.db;
import androidx.annotation.NonNull;
import androidx.room.Entity;
import androidx.room.PrimaryKey;
@@ -12,16 +13,24 @@
 */
@Entity
public class InspectionLocationBean {
    @PrimaryKey(autoGenerate = true)
    public long id;
    String inspectorId;//巡检员ID
    String inspectId;//巡检ID
    String mInspectId;//本地数据库巡检ID
    String lng;//经度
    String lat;//纬度
    String locateTime;//打点时间
    @PrimaryKey()
    @NonNull
    public String id;
    public String inspectorId;//巡检员ID
    public String inspectId;//巡检ID
    public String mInspectId;//本地数据库巡检ID
    public String lng;//经度
    public String lat;//纬度
    public String locateTime;//打点时间
    boolean isPost;//是否已经上传
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getmInspectId() {
        return mInspectId;
app/src/main/java/com/dayu/pipirrapp/bean/net/InsectionResult.java
New file
@@ -0,0 +1,31 @@
package com.dayu.pipirrapp.bean.net;
/**
 * InsectionResult -上传轨迹返回值
 *
 * @author zuoxiao
 * @version 1.0
 * @since 2024-12-04
 */
public class InsectionResult {
    String inspectId;//巡检id
    String inspectorId;//巡检员id
    public String getInspectId() {
        return inspectId;
    }
    public void setInspectId(String inspectId) {
        this.inspectId = inspectId;
    }
    public String getInspectorId() {
        return inspectorId;
    }
    public void setInspectorId(String inspectorId) {
        this.inspectorId = inspectorId;
    }
}
app/src/main/java/com/dayu/pipirrapp/dao/DaoSingleton.java
@@ -5,8 +5,6 @@
import androidx.room.Room;
import androidx.room.RoomDatabase;
import java.io.File;
/**
 * Copyright (C), 2023,
 * Author: zuo
@@ -37,10 +35,11 @@
        if (AsynchBaseDao == null) {
            AsynchBaseDao = Room.databaseBuilder(
                    context,
                    AppDatabase.class,
                    name
            ).build();
                            context,
                            AppDatabase.class,
                            name
                    ).setJournalMode(RoomDatabase.JournalMode.TRUNCATE) // 可选,设置日志模式
                    .build();
        }
        return AsynchBaseDao;
app/src/main/java/com/dayu/pipirrapp/dao/InspectionDao.java
@@ -27,8 +27,18 @@
    @Query("DELETE FROM InspectionBean")
    void deleteAll();
    //查询当前没有关闭巡检的巡检ID
    @Query("SELECT * FROM InspectionBean WHERE stopTime IS NULL OR stopTime = '' ORDER BY startTime DESC LIMIT 1")
    Single<InspectionBean> getMostRecentInspectionWithNoStopTime();
    /**
     * 根据本地巡检id查询巡检记录信息
     *
     * @param mInspectId
     * @return
     */
    @Query("SELECT * FROM InspectionBean WHERE mInspectId  =:mInspectId  ORDER BY startTime DESC LIMIT 1")
    Single<InspectionBean> findBymInspectId(String mInspectId);
}
app/src/main/java/com/dayu/pipirrapp/dao/InspectionLocationDao.java
@@ -12,6 +12,7 @@
import java.util.List;
import io.reactivex.rxjava3.core.Completable;
import io.reactivex.rxjava3.core.Single;
@Dao
public interface InspectionLocationDao {
@@ -33,4 +34,10 @@
    //查询所有没有上传的坐标
    @Query("select  * from InspectionLocationBean where isPost=false")
    List<InspectionLocationBean> findByNoPost();
    //查询所有该巡检id的坐标
    @Query("select  * from InspectionLocationBean where mInspectId=:mInspectId ORDER BY locateTime ASC")
    Single<List<InspectionLocationBean>> findByInspectId(String mInspectId);
}
app/src/main/java/com/dayu/pipirrapp/fragment/MapFragment.java
@@ -1,8 +1,6 @@
package com.dayu.pipirrapp.fragment;
import static com.dayu.pipirrapp.net.Constants.BASE_URL;
import static com.dayu.pipirrapp.tool.InspectionUtils.addInspectionLocationData;
import static com.dayu.pipirrapp.tool.InspectionUtils.updateInspectionLocationData;
import android.content.Context;
import android.content.Intent;
@@ -25,7 +23,6 @@
import androidx.annotation.Nullable;
import androidx.lifecycle.Observer;
import com.dayu.pipirrapp.MyApplication;
import com.dayu.pipirrapp.R;
import com.dayu.pipirrapp.bean.db.CenterPointBean;
import com.dayu.pipirrapp.bean.db.InspectionBean;
@@ -33,8 +30,8 @@
import com.dayu.pipirrapp.bean.db.LatLonBean;
import com.dayu.pipirrapp.bean.db.MarkerBean;
import com.dayu.pipirrapp.bean.net.CenterPointResult;
import com.dayu.pipirrapp.bean.net.InsectionResult;
import com.dayu.pipirrapp.bean.net.InspectionRequest;
import com.dayu.pipirrapp.bean.net.LoginResult;
import com.dayu.pipirrapp.bean.net.MarkerResult;
import com.dayu.pipirrapp.dao.DaoSingleton;
import com.dayu.pipirrapp.databinding.FragmentMapBinding;
@@ -48,7 +45,6 @@
import com.dayu.pipirrapp.tool.InspectionUtils;
import com.dayu.pipirrapp.utils.CommonData;
import com.dayu.pipirrapp.utils.CommonKeyName;
import com.dayu.pipirrapp.utils.DateUtils;
import com.dayu.pipirrapp.utils.MapJpgUtils;
import com.dayu.pipirrapp.utils.MyLog;
import com.dayu.pipirrapp.utils.SharedPreferencesHelper;
@@ -88,9 +84,12 @@
    int mInspectionState;
    MapFragmenObserver mapFragmenObserver;
    //当前巡检记录的相关信息
    InspectionBean mInspectionBean;
    public InspectionBean mInspectionBean;
    LatLonBean lastLatLonBean;
    InspectionRequest inspectionRequest;
    volatile boolean isHaseAginData = false;
    volatile boolean webViewIsFinished = false;
    List<InspectionLocationBean> aginShowlocationBeans;
    @Override
    public void onAttach(@NonNull Context context) {
@@ -130,7 +129,12 @@
        initView();
        initLocalData();
        getMarkerData();
        //显示巡检状态
        //显示巡检状态并且显示因意外关闭的历史数据
        switch (mInspectionState) {
            case InspectionUtils.STAT_INSPECTION:
            case InspectionUtils.PAUSE_INSPECTION:
                InspectionUtils.aginShowLocation(MapFragment.this);
        }
        chageInspecState(mInspectionState);
        return binding.getRoot();
    }
@@ -324,10 +328,20 @@
                Log.e("setWebViewClient", "statusCode:" + statusCode + ">>>>description:" + description);
                // 根据HTTP状态码处理错误
            }
            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
                webViewIsFinished = true;
                //页面加载完成
                if (isHaseAginData) {
                    aginShowLocation(null);
                }
            }
        });
        //巡检按钮
        binding.inspectButton.setOnClickListener(v -> {
            chageInspecState(InspectionUtils.STAT_INSPECTION);
            chageInspecState(InspectionUtils.STAT_INSPECTION_ONCLICK);
        });
        //暂停巡检
        binding.inspectPause.setOnClickListener(v -> {
@@ -395,13 +409,16 @@
        track.setLocateTime(inspectionLocationBean.getLocateTime());
        inspectionRequest.getTracks().clear();
        inspectionRequest.addTracks(track);
        ApiManager.getInstance().requestPostHideLoading(MapFragment.this.getContext(), BASE_URL + "/app/inspect/save", LoginResult.class, inspectionRequest.toMap(inspectionRequest), new SubscriberListener<BaseResponse<LoginResult>>() {
        ApiManager.getInstance().requestPostHideLoading(MapFragment.this.getContext(), BASE_URL + "/app/inspect/save", InsectionResult.class, inspectionRequest.toMap(inspectionRequest), new SubscriberListener<BaseResponse<List<InsectionResult>>>() {
            @Override
            public void onNext(BaseResponse<LoginResult> t) {
            public void onNext(BaseResponse<List<InsectionResult>> t) {
                try {
                    if (t.isSuccess()) {
                        if (t.getContent() != null) {
                        }
                        inspectionLocationBean.setPost(true);
                        updateInspectionLocationData(MapFragment.this.getContext(), inspectionLocationBean);
                        InspectionUtils.updateInspectionLocationData(MapFragment.this.getContext(), inspectionLocationBean);
                    } else {
                    }
@@ -418,12 +435,7 @@
     * 开始巡检
     */
    private void startInspection() {
        DaoSingleton.getAsynchInstance(this.getContext()).inspectionDao().getMostRecentInspectionWithNoStopTime()
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread()).subscribe(inspectionBean -> {
                    // 更新 UI
                    mInspectionBean = inspectionBean;
                });
    }
@@ -439,8 +451,8 @@
                    //大于最小距离
                    lastLatLonBean = latLonBean;
                    Log.i("chageInspecState", "lat:" + latLonBean.getLatitude() + ",log:" + latLonBean.getLongitude());
                    InspectionLocationBean inspectionLocationBean = createInspectionLocation(latLonBean);
                    addInspectionLocationData(MapFragment.this.getContext(), inspectionLocationBean);
                    InspectionLocationBean inspectionLocationBean = InspectionUtils.createInspectionLocation(latLonBean, mInspectionBean);
                    InspectionUtils.addInspectionLocationData(MapFragment.this.getContext(), inspectionLocationBean);
                    //更新到地图
                    mWebView.evaluateJavascript("javascript:updateLocation(\"" + latLonBean.getLongitude() + "\",\"" + latLonBean.getLatitude() + "\")", value -> {
                    });
@@ -449,30 +461,15 @@
                } else {
                    Log.d(TAG, "isThanMinMeters>>>false");
                }
            }
        }
    };
    /**
     * 创建InspectionLocationBean
     */
    private InspectionLocationBean createInspectionLocation(LatLonBean latLonBean) {
        InspectionLocationBean inspectionLocationBean = new InspectionLocationBean();
        inspectionLocationBean.setInspectId(mInspectionBean.getInspectId());
        inspectionLocationBean.setLocateTime(DateUtils.getNowDateStr());
        inspectionLocationBean.setPost(false);
        inspectionLocationBean.setInspectorId(MyApplication.myApplication.userId);
        inspectionLocationBean.setLng(String.valueOf(latLonBean.getLongitude()));
        inspectionLocationBean.setLat(String.valueOf(latLonBean.getLatitude()));
        return inspectionLocationBean;
    }
    /**
     * 修改巡检状态
     *
     * @param inspectionState
     */
    private void chageInspecState(int inspectionState) {
        Intent location = new Intent(this.getActivity(), MyLocationService.class);
@@ -487,30 +484,17 @@
                //关闭定位
                this.getActivity().stopService(location);
                break;
            case InspectionUtils.STAT_INSPECTION://1开始
            case InspectionUtils.STAT_INSPECTION_ONCLICK:
                //添加新的巡检记录
                startInspection();
                //获取定位服务传过来的坐标点
                LiveEventBus.get(CommonKeyName.locationData).observeForever(locationObserver);
                binding.inspectRL.setVisibility(View.VISIBLE);
                binding.inspectButton.setVisibility(View.GONE);
                binding.inspectPause.setText("暂停");
                binding.stateText.setText("已开启巡检");
                binding.inspectRL.setBackgroundColor(this.getContext().getResources().getColor(R.color.base_blue));
                //开启定位
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                    this.getActivity().startForegroundService(location);
                } else {
                    this.getActivity().startService(location);
                }
                mInspectionBean = InspectionUtils.startInspection(this.getContext());
                inspectionRequest = new InspectionRequest();
                SharedPreferencesHelper.getInstance(this.getContext()).put(CommonKeyName.inspectionState, InspectionUtils.STAT_INSPECTION);
                startLocation(location);
                break;
            case InspectionUtils.STAT_INSPECTION://1开始
                startLocation(location);
                break;
            case 2://暂停
                try {
                    LiveEventBus.get(CommonKeyName.locationData).removeObserver(locationObserver);
                    //关闭定位
                    this.getActivity().stopService(location);
                    binding.stateText.setText("已暂停巡检");
@@ -535,6 +519,53 @@
            default:
        }
        mInspectionState = inspectionState;
    }
    /**
     * 意外退出后继续显示之前的坐标
     */
    public void aginShowLocation(List<InspectionLocationBean> locationBeans) {
        isHaseAginData = true;
        if (locationBeans != null) {
            aginShowlocationBeans = locationBeans;
        }
        if (webViewIsFinished) {
            if (aginShowlocationBeans != null) {
                for (InspectionLocationBean inspectionLocationBean : aginShowlocationBeans) {
                    Log.i("mWebView", "aginShowLocation" + inspectionLocationBean.getLng() + "\",\"" + inspectionLocationBean.getLat());
                    mWebView.evaluateJavascript("javascript:aginShowLocation(\"" + inspectionLocationBean.getLng() + "\",\"" + inspectionLocationBean.getLat() + "\")", value -> {
                    });
                }
                // 向 WebView 注入数据
                aginShowlocationBeans.clear();
            }
        }
    }
    /**
     * 开始巡检的相关逻辑
     *
     * @param location
     */
    private void startLocation(Intent location) {
        //获取定位服务传过来的坐标点
        LiveEventBus.get(CommonKeyName.locationData).observeForever(locationObserver);
        binding.inspectRL.setVisibility(View.VISIBLE);
        binding.inspectButton.setVisibility(View.GONE);
        binding.inspectPause.setText("暂停");
        binding.stateText.setText("已开启巡检");
        binding.inspectRL.setBackgroundColor(this.getContext().getResources().getColor(R.color.base_blue));
        //开启定位
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            this.getActivity().startForegroundService(location);
        } else {
            this.getActivity().startService(location);
        }
        inspectionRequest = new InspectionRequest();
        SharedPreferencesHelper.getInstance(this.getContext()).put(CommonKeyName.inspectionState, InspectionUtils.STAT_INSPECTION);
    }
}
app/src/main/java/com/dayu/pipirrapp/fragment/MyFragment.java
@@ -16,9 +16,15 @@
import com.dayu.pipirrapp.bean.db.LoginBean;
import com.dayu.pipirrapp.dao.DaoSingleton;
import com.dayu.pipirrapp.databinding.FragmentMyBinding;
import com.dayu.pipirrapp.tool.InspectionUtils;
import com.dayu.pipirrapp.utils.CleanDataUtils;
import com.dayu.pipirrapp.utils.CommonKeyName;
import com.dayu.pipirrapp.utils.SharedPreferencesHelper;
import com.dayu.pipirrapp.utils.ToastUtil;
import com.dayu.pipirrapp.view.ConfirmDialog;
import com.dayu.pipirrapp.view.TagDialog;
import com.dayu.pipirrapp.view.TipDialog;
import com.dayu.pipirrapp.view.TipUtil;
/**
 * author: zuo
@@ -46,19 +52,25 @@
        });
        //退出登录
        binding.loginOutRL.setOnClickListener((v) -> {
            int inspectionState = SharedPreferencesHelper.getInstance(this.getContext()).get(CommonKeyName.inspectionState, 0);
            if (inspectionState == InspectionUtils.NO_INSPECTION) {
                ConfirmDialog confirmDialog = new ConfirmDialog(MyFragment.this.getActivity(), "确定退出吗?", (confirmDialog1, v12) -> {
                    try {
                        confirmDialog1.dismiss();
                        CleanDataUtils.cleanUserData(MyFragment.this.getContext());
                        Intent intent = new Intent(MyFragment.this.getContext(), LoginActivity.class);
            ConfirmDialog confirmDialog = new ConfirmDialog(MyFragment.this.getActivity(), "确定退出吗?", (confirmDialog1, v12) -> {
                try {
                    confirmDialog1.dismiss();
                    CleanDataUtils.cleanUserData(MyFragment.this.getContext());
                    Intent intent = new Intent(MyFragment.this.getContext(), LoginActivity.class);
                    MyFragment.this.getActivity().startActivity(intent);
                    MyFragment.this.getActivity().finish();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            });
            confirmDialog.show();
                        MyFragment.this.getActivity().startActivity(intent);
                        MyFragment.this.getActivity().finish();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                });
                confirmDialog.show();
            } else {
                TipUtil.show(MyFragment.this.getActivity(), "您还未结束巡检,请结束巡检后退出!");
            }
        });
        LoginBean loginBean = DaoSingleton.getInstance(MyFragment.this.getContext()).loginDao().findFirst();
app/src/main/java/com/dayu/pipirrapp/tool/InspectionUtils.java
@@ -4,10 +4,14 @@
import android.location.Location;
import android.util.Log;
import androidx.room.Transaction;
import com.dayu.pipirrapp.MyApplication;
import com.dayu.pipirrapp.bean.db.InspectionBean;
import com.dayu.pipirrapp.bean.db.InspectionLocationBean;
import com.dayu.pipirrapp.bean.db.LatLonBean;
import com.dayu.pipirrapp.dao.DaoSingleton;
import com.dayu.pipirrapp.fragment.MapFragment;
import com.dayu.pipirrapp.utils.DateUtils;
import java.util.UUID;
@@ -26,9 +30,10 @@
    private static final String TAG = "InspectionUtils";
    //打点的最小两点最小距离
    private static final int MinMeters = 10;
    //0没有开始,1开始,2暂停,3关闭
    //0没有开始,1开始,2暂停,3关闭,4是点击的开始按钮
    public static final int NO_INSPECTION = 0;
    public static final int STAT_INSPECTION = 1;
    public static final int STAT_INSPECTION_ONCLICK = 4;
    public static final int PAUSE_INSPECTION = 2;
    public static final int STOP_INSPECTION = 3;
@@ -36,13 +41,31 @@
    /**
     * 获取当前巡检记录ID
     *
     * @param context
     * @param fragment
     * @return
     */
    public static String getInspectionId(Context context) {
    public static String getInspectionId(MapFragment fragment) {
        DaoSingleton.getAsynchInstance(fragment.getContext()).inspectionDao().getMostRecentInspectionWithNoStopTime()
                .subscribeOn(Schedulers.io())
                .observeOn(Schedulers.io()).subscribe(inspectionBean -> {
                });
        return "";
    }
    public static void aginShowLocation(MapFragment fragment) {
        //查询当前未关闭的巡检记录
        DaoSingleton.getAsynchInstance(fragment.getContext()).inspectionDao().getMostRecentInspectionWithNoStopTime()
                .subscribeOn(Schedulers.io())
                .observeOn(Schedulers.io()).subscribe(inspectionBean -> {
                    fragment.mInspectionBean = inspectionBean;
                    // 查询当前未关闭的巡检记录下所有的坐标
                    DaoSingleton.getAsynchInstance(fragment.getContext()).inspectionLocationDao().findByInspectId(inspectionBean.getmInspectId()).subscribeOn(Schedulers.io())
                            .observeOn(AndroidSchedulers.mainThread()).subscribe(inspectionLocationBeans -> {
                                fragment.aginShowLocation(inspectionLocationBeans);
                            });
                });
    }
@@ -57,6 +80,7 @@
        InspectionBean inspectionBean = new InspectionBean();
        inspectionBean.setmInspectId(UUID.randomUUID().toString());
        inspectionBean.setStartTime(DateUtils.getNowDateStr());
//        inspectionBean.
        // 异步插入到数据库
        DaoSingleton.getAsynchInstance(context)
                .inspectionDao()
@@ -66,7 +90,7 @@
                .subscribe(() -> {
                    Log.i(TAG, "Inspection started and inserted successfully.");
                }, throwable -> {
                    Log.e(TAG, "Error inserting inspection data: ", throwable);
                    Log.e(TAG, "Error inserting inspection data: "+throwable);
                });
        // 获取Dao并执行插入操作
        return inspectionBean;  // 插入完成后切换到主线程
@@ -80,7 +104,15 @@
     * @param locationBean
     */
    public static void addInspectionLocationData(Context context, InspectionLocationBean locationBean) {
        DaoSingleton.getAsynchInstance(context).inspectionLocationDao().insert(locationBean).subscribeOn(Schedulers.io());
        DaoSingleton.getAsynchInstance(context).inspectionLocationDao().insert(locationBean).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
                .subscribe(() -> {
                    // 插入成功的回调
                    Log.d(TAG, "addInspectionLocationData数据插入成功");
                }, throwable -> {
                    // 处理错误
                    Log.e(TAG, "addInspectionLocationData数据插入失败", throwable);
                });
        ;
    }
    /**
@@ -89,8 +121,17 @@
     * @param context
     * @param locationBean
     */
    @Transaction
    public static void updateInspectionLocationData(Context context, InspectionLocationBean locationBean) {
        DaoSingleton.getAsynchInstance(context).inspectionLocationDao().update(locationBean).subscribeOn(Schedulers.io());
        DaoSingleton.getAsynchInstance(context).inspectionLocationDao().update(locationBean).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
                .subscribe(() -> {
                    // 插入成功的回调
                    Log.d(TAG, "updateInspectionLocationData数据插入成功");
                }, throwable -> {
                    // 处理错误
                    Log.e(TAG, "updateInspectionLocationData数据插入失败", throwable);
                });
        ;
    }
    /**
@@ -115,4 +156,21 @@
        }
    }
    /**
     * 创建InspectionLocationBean
     */
    public static InspectionLocationBean createInspectionLocation(LatLonBean latLonBean, InspectionBean mInspectionBean) {
        InspectionLocationBean inspectionLocationBean = new InspectionLocationBean();
        inspectionLocationBean.setId(UUID.randomUUID().toString());
        inspectionLocationBean.setInspectId(mInspectionBean.getInspectId());
        inspectionLocationBean.setmInspectId(mInspectionBean.getmInspectId());
        inspectionLocationBean.setLocateTime(DateUtils.getNowDateStr());
        inspectionLocationBean.setPost(false);
        inspectionLocationBean.setInspectorId(MyApplication.myApplication.userId);
        inspectionLocationBean.setLng(String.valueOf(latLonBean.getLongitude()));
        inspectionLocationBean.setLat(String.valueOf(latLonBean.getLatitude()));
        return inspectionLocationBean;
    }
}
app/src/main/java/com/dayu/pipirrapp/view/TipDialog.java
New file
@@ -0,0 +1,83 @@
package com.dayu.pipirrapp.view;
import android.app.Dialog;
import android.content.Context;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.TextView;
import com.dayu.pipirrapp.R;
/**
 * Created by Android Studio.
 * author: zuo
 * Date: 2023-11-22
 * Time: 9:12
 * 备注:
 */
public class TipDialog extends Dialog {
    Context mContext;
    String mData;
    TipUtil.TipListener listener;
    public TipDialog(Context context, String data, TipUtil.TipListener tipListener) {
        super(context, R.style.showSelfDialog);
        mContext = context;
        mData = data;
        listener = tipListener;
        initView();
    }
    public TipDialog(Context context, String data) {
        super(context, R.style.showSelfDialog);
        mContext = context;
        mData = data;
        initView();
    }
    private void initView() {
        getWindow().setGravity(Gravity.CENTER);
        setContentView(R.layout.text_dialog);
        setCanceledOnTouchOutside(false);
        final TextView editText = (TextView) this.findViewById(R.id.textData);
        editText.setText(mData);
        TextView cannel = (TextView) this.findViewById(R.id.cannel);
        cannel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (listener != null) {
                    listener.onCancle();
                }
                TipDialog.this.dismiss();
            }
        });
    }
    @Override
    public void show() {
        super.show();
        /**
         * 设置宽度全屏,要设置在show的后面
         */
        WindowManager.LayoutParams layoutParams = getWindow().getAttributes();
        layoutParams.gravity = Gravity.CENTER;
        layoutParams.width = ViewGroup.LayoutParams.MATCH_PARENT;
        layoutParams.height = ViewGroup.LayoutParams.MATCH_PARENT;
        getWindow().getDecorView().setPadding(0, 0, 0, 0);
        getWindow().setAttributes(layoutParams);
    }
    public interface DialogBack {
        void onOk(String data);
        void onCancel();
    }
}
app/src/main/java/com/dayu/pipirrapp/view/TipUtil.java
New file
@@ -0,0 +1,65 @@
package com.dayu.pipirrapp.view;
import android.app.Activity;
import android.os.Build;
import android.widget.Toast;
import com.dayu.pipirrapp.MyApplication;
public class TipUtil {
    public interface TipListener {
         void onCancle();
    }
    public static void show(Activity mActivity, String data) {
//        Toast.makeText(context, data, Toast.LENGTH_LONG).show();
        try {
            if (!isDestroy(mActivity)) {
                TipDialog tipDialog = new TipDialog(mActivity, data);
                tipDialog.show();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public static void show(Activity mActivity, String data, TipListener tipListener) {
//        Toast.makeText(context, data, Toast.LENGTH_LONG).show();
        if (!isDestroy(mActivity)) {
            TipDialog tipDialog = new TipDialog(mActivity, data, tipListener);
            tipDialog.show();
        }
    }
    public static void show(String data) {
        Toast.makeText(MyApplication.myApplication, data, Toast.LENGTH_LONG).show();
    }
//    public static void show(String data, TipListener tipListener) {
////        Toast.makeText(, data, Toast.LENGTH_LONG).show();
//        TipDialog tipDialog = new TipDialog(MainActivity.myMainActivity, data, tipListener);
//        tipDialog.show();
//    }
    /**
     * 判断Activity是否Destroy
     *
     * @param mActivity
     * @return true:已销毁
     */
    public static boolean isDestroy(Activity mActivity) {
        if (mActivity == null ||
                mActivity.isFinishing() ||
                (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1 && mActivity.isDestroyed())) {
            return true;
        } else {
            return false;
        }
    }
}
app/src/main/res/layout/text_dialog.xml
New file
@@ -0,0 +1,62 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#00ffffff"
    android:gravity="center"
    android:orientation="vertical">
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/base_bg_dialog_top_stroke"
        android:gravity="center"
        android:orientation="vertical"
        android:paddingRight="20dp"
        android:paddingLeft="20dp"
        android:paddingTop="20dp"
        >
        <TextView
            android:id="@+id/textData"
            android:layout_width="300dp"
            android:layout_height="wrap_content"
            android:layout_marginTop="20dp"
            android:gravity="center"
            android:textColor="#000000"
            android:textSize="20sp" />
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center_horizontal"
            android:layout_marginTop="15dp"
            android:layout_marginBottom="10dp"
            android:orientation="vertical">
            <View
                android:layout_width="match_parent"
                android:layout_height="2px"
                android:background="@color/line_bg" />
            <TextView
                android:id="@+id/cannel"
                android:layout_width="match_parent"
                android:layout_height="@dimen/dialog_btn_height"
                android:layout_weight="1"
                android:background="@drawable/textview_select_bg"
                android:gravity="center"
                android:text="确    认"
                android:textColor="@color/dialog_btn"
                android:textSize="20sp" />
        </LinearLayout>
    </LinearLayout>
</LinearLayout>