|
@@ -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("");
|
|
|
}
|
|
|
+
|
|
|
}
|