Explorar o código

upgrade:LOG日志异常修复.
人员列表实时更新。

xwh hai 1 mes
pai
achega
96a0b117c8

+ 101 - 146
app/src/main/java/com/hanghui/senic/activity/setup/PersonnelDataActivity.java

@@ -1,7 +1,11 @@
 package com.hanghui.senic.activity.setup;
 
+import androidx.annotation.NonNull;
 import androidx.recyclerview.widget.LinearLayoutManager;
 
+import android.os.Handler;
+import android.os.Looper;
+import android.os.Message;
 import android.util.Log;
 import android.view.View;
 import android.widget.EditText;
@@ -10,6 +14,7 @@ import android.widget.LinearLayout;
 import android.widget.TextView;
 
 import com.example.datalibrary.api.FaceApi;
+import com.example.datalibrary.manager.FaceSDKManager;
 import com.example.datalibrary.model.KeyboardsUtils;
 import com.example.datalibrary.model.User;
 import com.google.gson.Gson;
@@ -25,6 +30,7 @@ import com.jcodecraeer.xrecyclerview.XRecyclerView;
 
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Iterator;
 import java.util.List;
 import java.util.concurrent.ConcurrentHashMap;
 
@@ -42,8 +48,7 @@ public class PersonnelDataActivity extends BaseActivity implements View.OnClickL
     private LinearLayout personnelData_queryCondition_Linear;
     private XRecyclerView personnelData_RecyclerView;
     private PersonnelDataAdapter personnelDataAdapter;
-    private List<User> list = new ArrayList<>();
-    private int page = 1;
+
     private boolean isShow = false;//是否显示筛选条件
     private EditText personnelData_inputID;
     private EditText queryCondition_inputName;
@@ -53,8 +58,28 @@ public class PersonnelDataActivity extends BaseActivity implements View.OnClickL
     private TextView personnelData_input_empty;//清空按钮
     private TextView personnelData_input_search;//搜索按钮
 //    private List<User> userList = new ArrayList<>();
-    private AddListDataThread addListDataThread;
-    private boolean isFlushLoop = true;//是否刷新数据
+    private List<User> dataList;
+    private int totalSize=0;
+    private final int WHAT_REFRESH=0x01;
+    private Handler mHandler=new Handler(Looper.getMainLooper()){
+        @Override
+        public void handleMessage(@NonNull Message msg) {
+            super.handleMessage(msg);
+            if(WHAT_REFRESH==msg.what){
+                if(dataList.size()>totalSize){
+                    if(personnelDataAdapter!=null){
+                        personnelDataAdapter.notifyDataSetChanged();
+                        totalSize=dataList.size();
+                        if(setUPIncloud_title!=null) {
+                            setUPIncloud_title.setText("人员数据(" + totalSize + ")");
+                        }
+                    }
+                }
+                mHandler.removeMessages(WHAT_REFRESH);
+                mHandler.sendEmptyMessageDelayed(WHAT_REFRESH,1000);
+            }
+        }
+    };
 
     @Override
     public int getLayout() {
@@ -63,24 +88,24 @@ public class PersonnelDataActivity extends BaseActivity implements View.OnClickL
 
     @Override
     public void setOnCreate() {
-        addListDataThread = new AddListDataThread();
-        addListDataThread.start();
+        dataList=FaceApi.getInstance().getUsers();
+        totalSize=dataList.size();
         initView();
+        mHandler.sendEmptyMessageDelayed(WHAT_REFRESH,1000);
     }
 
     @Override
     protected void onDestroy() {
         super.onDestroy();
-        if (addListDataThread != null) {
-            isFlushLoop = false;
-            addListDataThread.interrupt();
-            addListDataThread = null;
+        if(mHandler!=null){
+            mHandler.removeCallbacksAndMessages(null);
         }
+
     }
 
     private void initView() {
         setUPIncloud_title = findViewById(R.id.setUPIncloud_title);
-        setUPIncloud_title.setText("人员数据");
+        setUPIncloud_title.setText("人员数据("+totalSize+")");
         setUPIncloud_finish = findViewById(R.id.setUPIncloud_finish);
         setUPIncloud_finish.setOnClickListener(this);
         personnelData_inquire = findViewById(R.id.personnelData_inquire);
@@ -101,80 +126,13 @@ public class PersonnelDataActivity extends BaseActivity implements View.OnClickL
         LinearLayoutManager manager = new LinearLayoutManager(CommonUtil.getCurrentActivity());
         manager.setOrientation(LinearLayoutManager.VERTICAL);
         personnelData_RecyclerView.setLayoutManager(manager);
-        personnelDataAdapter = new PersonnelDataAdapter(list, PersonnelDataActivity.this);
+        personnelDataAdapter = new PersonnelDataAdapter(dataList, PersonnelDataActivity.this);
         personnelData_RecyclerView.setAdapter(personnelDataAdapter);
-//        personnelData_RecyclerView.setPullRefreshEnabled(false);//禁止下拉刷新
-        // 添加RecyclerView的滚动监听来实现上拉加载
-        personnelData_RecyclerView.setLoadingListener(new XRecyclerView.LoadingListener() {
-            @Override
-            public void onRefresh() {
-                //下拉刷新
-                String id = personnelData_inputID.getText().toString();
-                String cardNumber = personnelData_inputCardNumber.getText().toString();
-                String name = queryCondition_inputName.getText().toString();
-                String idNumber = queryCondition_inputIdNumber.getText().toString();
-                String phone = queryCondition_inputPhone.getText().toString();
-                if (StringIsNull.IsStringNull(id) && StringIsNull.IsStringNull(cardNumber) && StringIsNull.IsStringNull(name)
-                        && StringIsNull.IsStringNull(idNumber) && StringIsNull.IsStringNull(phone)){
-                    isFlushLoop = true;
-                } else {
-                    personnelData_RecyclerView.refreshComplete();
-                }
-
-            }
+        personnelData_RecyclerView.setPullRefreshEnabled(false);//禁止下拉刷新
 
-            @Override
-            public void onLoadMore() {
-                // 上滑加载数据的逻辑
-                loadMoreData();
-            }
-        });
     }
 
-    private void addList(int page) {
-        int size;
-        List<User> users = FaceApi.getInstance().getUsers();
-        if (users == null ){
-            return;
-        }
-        if (users.size() <= 20){
-            size = users.size();
-        }else {
-            size = page * 20;
-        }
-        int currentSubscript = 0;//获取当前下标,处理数据
-        for (User value : users) {
-            currentSubscript++;
-            if (currentSubscript == size){
-                break;
-            }
-            if (value != null){
-                list.add(value);
-            }
-        }
-        //数据去重
-        for (User element : list) {
-            if (!list.contains(element)) {
-                list.add(element);
-            }
-        }
-    }
 
-    private void loadMoreData() {//加载更多
-        String id = personnelData_inputID.getText().toString();
-        String cardNumber = personnelData_inputCardNumber.getText().toString();
-        String name = queryCondition_inputName.getText().toString();
-        String idNumber = queryCondition_inputIdNumber.getText().toString();
-        String phone = queryCondition_inputPhone.getText().toString();
-        if (StringIsNull.IsStringNull(id) && StringIsNull.IsStringNull(cardNumber) && StringIsNull.IsStringNull(name)
-                && StringIsNull.IsStringNull(idNumber) && StringIsNull.IsStringNull(phone)){
-            page++;
-            //list赋值
-            addList(page);
-        }
-        personnelData_RecyclerView.loadMoreComplete();
-        personnelDataAdapter.notifyDataSetChanged();
-    }
 
     @Override
     public void onClick(View v) {
@@ -198,94 +156,91 @@ public class PersonnelDataActivity extends BaseActivity implements View.OnClickL
                 }
                 break;
             case R.id.personnelData_input_empty://清空按钮
-                personnelData_inputID.setText("");
-                personnelData_inputCardNumber.setText("");
-                queryCondition_inputName.setText("");
-                queryCondition_inputIdNumber.setText("");
-                queryCondition_inputPhone.setText("");
+                cleanSearch();
                 break;
             case R.id.personnelData_input_search://搜索按钮
                 //去数据库搜索
-                String id = personnelData_inputID.getText().toString();
-                String cardNumber = personnelData_inputCardNumber.getText().toString();
-                String name = queryCondition_inputName.getText().toString();
-                String idNumber = queryCondition_inputIdNumber.getText().toString();
-                String phone = queryCondition_inputPhone.getText().toString();
-                page = 0;
-                list.clear();
-                list.addAll(searchList(id,cardNumber,name,idNumber,phone));
-                personnelDataAdapter.notifyDataSetChanged();
+                String id = personnelData_inputID.getText().toString().trim();
+                String cardNumber = personnelData_inputCardNumber.getText().toString().trim();
+                String name = queryCondition_inputName.getText().toString().trim();
+                String idNumber = queryCondition_inputIdNumber.getText().toString().trim();
+                String phone = queryCondition_inputPhone.getText().toString().trim();
+                //关闭软键盘
+                KeyboardsUtils.hintKeyBoards(personnelData_inquire);
+                try {
+                    personnelData_input_search.setEnabled(false);
+                    personnelDataAdapter.setList(searchList(id,cardNumber,name,idNumber,phone));
+                    personnelData_RecyclerView.scrollToPosition(0);
+                }catch (Exception e){
+
+                }finally {
+                    personnelData_input_search.setEnabled(true);
+                }
+
                 break;
         }
     }
 
     private List<User> searchList(String id, String cardNumber, String name, String idNumber, String phone){
-        List<User> itemList = new ArrayList<>();
-        List<User> users  = FaceApi.getInstance().getUsers();
-        //当搜索条件为空时,重新添加数据
         if (StringIsNull.IsStringNull(id) && StringIsNull.IsStringNull(cardNumber) && StringIsNull.IsStringNull(name)
                 && StringIsNull.IsStringNull(idNumber) && StringIsNull.IsStringNull(phone)){
-            for (User item : users) {
-                User userInfoBean = ConfigManager.getGson().fromJson(item.getUserInfo(), User.class);
-                itemList.add(userInfoBean);
-            }
-            return itemList;
+            mHandler.removeMessages(WHAT_REFRESH);
+            mHandler.sendEmptyMessageDelayed(WHAT_REFRESH,1000);
+           return dataList;
         }
-
-        for (User item : users) {
-            User userInfoBean = ConfigManager.getGson().fromJson(item.getUserInfo(), User.class);
-            // 比较当前元素是否等于 "Apple"
-            String userId = String.valueOf(userInfoBean.getUserId());
+        List<User> itemList = new ArrayList<>();
+        if(dataList==null){
+            return null;
+        }
+        List<User> tempDataList = new ArrayList<>();
+        tempDataList.addAll(dataList);
+        // 使用迭代器安全地遍历和删除
+        Iterator<User> iterator = tempDataList.iterator();
+        while (iterator.hasNext()) {
+            User item = iterator.next();
+            if(item==null){
+                continue;
+            }
+            String userId = String.valueOf(item.getUserId());
             if (!StringIsNull.IsStringNull(id) && !StringIsNull.IsStringNull(userId)
                     && userId.contains(id)) {
-                itemList.add(userInfoBean);
+                itemList.add(item);
+                continue;
             }
-            if (!StringIsNull.IsStringNull(cardNumber) && !StringIsNull.IsStringNull(userInfoBean.getCardIdEx())
-                    && userInfoBean.getCardIdEx().contains(cardNumber)) {
-                itemList.add(userInfoBean);
+            if (!StringIsNull.IsStringNull(cardNumber) && !StringIsNull.IsStringNull(item.getCardIdEx())
+                    && item.getCardIdEx().contains(cardNumber)) {
+                itemList.add(item);
+                continue;
             }
-            if (!StringIsNull.IsStringNull(name) && !StringIsNull.IsStringNull(userInfoBean.getUserName())
-                    && userInfoBean.getUserName().contains(name)) {
-                itemList.add(userInfoBean);
+            if (!StringIsNull.IsStringNull(name) && !StringIsNull.IsStringNull(item.getUserName())
+                    && item.getUserName().contains(name)) {
+                itemList.add(item);
+                continue;
             }
-            if (!StringIsNull.IsStringNull(idNumber) && !StringIsNull.IsStringNull(userInfoBean.getIdNumber())
-                    && userInfoBean.getIdNumber().contains(idNumber)) {
-                itemList.add(userInfoBean);
+            if (!StringIsNull.IsStringNull(idNumber) && !StringIsNull.IsStringNull(item.getIdNumber())
+                    && item.getIdNumber().contains(idNumber)) {
+                itemList.add(item);
+                continue;
             }
-            if (!StringIsNull.IsStringNull(phone) && !StringIsNull.IsStringNull(userInfoBean.getPhone())
-                    && userInfoBean.getPhone().contains(phone)) {
-                itemList.add(userInfoBean);
+            if (!StringIsNull.IsStringNull(phone) && !StringIsNull.IsStringNull(item.getPhone())
+                    && item.getPhone().contains(phone)) {
+                itemList.add(item);
             }
 
         }
+        mHandler.removeMessages(WHAT_REFRESH);
+        if(setUPIncloud_title!=null) {
+            setUPIncloud_title.setText("人员数据(" + itemList.size() + ")");
+        }
         return itemList;
     }
 
-    private class AddListDataThread extends Thread {
-        @Override
-        public void run() {
-            super.run();
-            while (true){
-                //当isFlushLoop为false时,不做后续刷新处理,等待状态改变后,再次执行后续方法
-                if (!isFlushLoop){
-                    continue;
-                }
-                isFlushLoop = false;
-                list.clear();
-                addList(page);
-                runOnUiThread(new Runnable() {
-                    @Override
-                    public void run() {
-                        if (personnelDataAdapter != null ){
-                            personnelDataAdapter.notifyDataSetChanged();
-                        }
-                        if (personnelData_RecyclerView != null ){
-                            personnelData_RecyclerView.refreshComplete();
-                        }
-                    }
-                });
-
-            }
-        }
+    private void cleanSearch(){
+        personnelData_inputID.setText("");
+        personnelData_inputCardNumber.setText("");
+        queryCondition_inputName.setText("");
+        queryCondition_inputIdNumber.setText("");
+        queryCondition_inputPhone.setText("");
     }
+
 }

+ 9 - 0
app/src/main/java/com/hanghui/senic/adapter/PersonnelDataAdapter.java

@@ -19,6 +19,7 @@ import com.hanghui.senic.service.usbserialdemo.utile.StringIsNull;
 import com.hanghui.senic.service.usbserialdemo.utile.StringUtils;
 import com.hanghui.senic.utils.ImageLoaderUtils;
 
+import java.util.ArrayList;
 import java.util.List;
 
 public class PersonnelDataAdapter extends RecyclerView.Adapter<PersonnelDataAdapter.Holder> {
@@ -33,6 +34,14 @@ public class PersonnelDataAdapter extends RecyclerView.Adapter<PersonnelDataAdap
         this.list = mList;
     }
 
+    public void setList(List<User> list) {
+        if(list==null){
+            list=new ArrayList<>();
+        }
+        this.list = list;
+        notifyDataSetChanged();
+    }
+
     @NonNull
     @Override
     public Holder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {