Bladeren bron

upgrade:人员数据

xwh 1 maand geleden
bovenliggende
commit
eb57c4d6a5

+ 49 - 28
app/src/main/java/com/hanghui/senic/activity/setup/PersonnelDataActivity.java

@@ -6,7 +6,6 @@ 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;
 import android.widget.ImageView;
@@ -14,25 +13,21 @@ 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;
 import com.hanghui.senic.R;
 import com.hanghui.senic.activity.BaseActivity;
 import com.hanghui.senic.adapter.PersonnelDataAdapter;
-import com.hanghui.senic.common.AppHandler;
 import com.hanghui.senic.common.CommonUtil;
-import com.hanghui.senic.service.usbserialdemo.utile.ConfigManager;
 import com.hanghui.senic.service.usbserialdemo.utile.StringIsNull;
-import com.hanghui.senic.service.usbserialdemo.utile.loacat.AppLogUtils;
 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;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
 
 /**
  * 人员数据
@@ -47,7 +42,7 @@ public class PersonnelDataActivity extends BaseActivity implements View.OnClickL
     private TextView personnelData_inquireText;
     private LinearLayout personnelData_queryCondition_Linear;
     private XRecyclerView personnelData_RecyclerView;
-    private PersonnelDataAdapter personnelDataAdapter;
+    private PersonnelDataAdapter mAdapter;
 
     private boolean isShow = false;//是否显示筛选条件
     private EditText personnelData_inputID;
@@ -58,25 +53,46 @@ 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 ExecutorService es3 = Executors.newSingleThreadExecutor();
+    private Future future3;
+
     private List<User> dataList;
-    private int totalSize=0;
+    private volatile int totalSize=0;
     private final int WHAT_REFRESH=0x01;
+
+    private volatile boolean isSearching=false;
+
+
     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 + ")");
-                        }
-                    }
+                if (future3 != null && !future3.isDone()) {
+                    removeMessages(WHAT_REFRESH);
+                    sendEmptyMessageDelayed(WHAT_REFRESH,1000);
+                   return;
                 }
-                mHandler.removeMessages(WHAT_REFRESH);
-                mHandler.sendEmptyMessageDelayed(WHAT_REFRESH,1000);
+                future3 = es3.submit(() -> {
+                    dataList = FaceApi.getInstance().getUsers();
+                     final int tempTotalSize = dataList.size();
+                    post(() -> {
+                        if (!isSearching && mAdapter != null) {
+                            mAdapter.setList(dataList);
+                            mAdapter.notifyDataSetChanged();
+                            if (dataList != null && tempTotalSize > totalSize) {
+                                totalSize=tempTotalSize;
+                                if(setUPIncloud_title!=null) {
+                                    setUPIncloud_title.setText("人员数据(" + totalSize + ")");
+                                }
+                            }
+                        }
+                        removeMessages(WHAT_REFRESH);
+                        sendEmptyMessageDelayed(WHAT_REFRESH,1000);
+                    });
+                });
+
             }
         }
     };
@@ -88,8 +104,6 @@ public class PersonnelDataActivity extends BaseActivity implements View.OnClickL
 
     @Override
     public void setOnCreate() {
-        dataList=FaceApi.getInstance().getUsers();
-        totalSize=dataList.size();
         initView();
         mHandler.sendEmptyMessageDelayed(WHAT_REFRESH,1000);
     }
@@ -97,7 +111,11 @@ public class PersonnelDataActivity extends BaseActivity implements View.OnClickL
     @Override
     protected void onDestroy() {
         super.onDestroy();
-        if(mHandler!=null){
+        if (future3 != null && !future3.isDone()) {
+            future3.cancel(true);
+            future3 = null;
+        }
+        if (mHandler != null) {
             mHandler.removeCallbacksAndMessages(null);
         }
 
@@ -105,7 +123,7 @@ public class PersonnelDataActivity extends BaseActivity implements View.OnClickL
 
     private void initView() {
         setUPIncloud_title = findViewById(R.id.setUPIncloud_title);
-        setUPIncloud_title.setText("人员数据("+totalSize+")");
+        setUPIncloud_title.setText("人员数据(...)");
         setUPIncloud_finish = findViewById(R.id.setUPIncloud_finish);
         setUPIncloud_finish.setOnClickListener(this);
         personnelData_inquire = findViewById(R.id.personnelData_inquire);
@@ -126,8 +144,9 @@ 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(dataList, PersonnelDataActivity.this);
-        personnelData_RecyclerView.setAdapter(personnelDataAdapter);
+        mAdapter = new PersonnelDataAdapter(dataList == null ? new ArrayList<>() : dataList
+                , PersonnelDataActivity.this);
+        personnelData_RecyclerView.setAdapter(mAdapter);
         personnelData_RecyclerView.setPullRefreshEnabled(false);//禁止下拉刷新
 
     }
@@ -169,7 +188,7 @@ public class PersonnelDataActivity extends BaseActivity implements View.OnClickL
                 KeyboardsUtils.hintKeyBoards(personnelData_inquire);
                 try {
                     personnelData_input_search.setEnabled(false);
-                    personnelDataAdapter.setList(searchList(id,cardNumber,name,idNumber,phone));
+                    mAdapter.setList(searchList(id,cardNumber,name,idNumber,phone));
                     personnelData_RecyclerView.scrollToPosition(0);
                 }catch (Exception e){
 
@@ -186,10 +205,11 @@ public class PersonnelDataActivity extends BaseActivity implements View.OnClickL
                 && StringIsNull.IsStringNull(idNumber) && StringIsNull.IsStringNull(phone)){
             mHandler.removeMessages(WHAT_REFRESH);
             mHandler.sendEmptyMessageDelayed(WHAT_REFRESH,1000);
+            isSearching = false;
            return dataList;
         }
         List<User> itemList = new ArrayList<>();
-        if(dataList==null){
+        if (dataList == null) {
             return null;
         }
         List<User> tempDataList = new ArrayList<>();
@@ -229,6 +249,7 @@ public class PersonnelDataActivity extends BaseActivity implements View.OnClickL
 
         }
         mHandler.removeMessages(WHAT_REFRESH);
+        isSearching = true;
         if(setUPIncloud_title!=null) {
             setUPIncloud_title.setText("人员数据(" + itemList.size() + ")");
         }

+ 7 - 4
app/src/main/java/com/hanghui/senic/adapter/PersonnelDataAdapter.java

@@ -10,6 +10,7 @@ import android.widget.TextView;
 import androidx.annotation.NonNull;
 import androidx.recyclerview.widget.RecyclerView;
 
+import com.bumptech.glide.load.resource.bitmap.CenterCrop;
 import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
 import com.bumptech.glide.request.RequestOptions;
 import com.example.datalibrary.model.User;
@@ -28,6 +29,9 @@ public class PersonnelDataAdapter extends RecyclerView.Adapter<PersonnelDataAdap
     Context context;
     PersonnelDataAdapter.OnItemClickListener listener;
     PersonnelDataAdapter.Holder viewHolder;
+    RequestOptions options = new RequestOptions()
+            .placeholder(R.mipmap.ic_person_default)
+            .transform(new CenterCrop(),new RoundedCorners(99));
 
     public PersonnelDataAdapter(List<User> mList, Context context) {
         this.context = context;
@@ -35,8 +39,8 @@ public class PersonnelDataAdapter extends RecyclerView.Adapter<PersonnelDataAdap
     }
 
     public void setList(List<User> list) {
-        if(list==null){
-            list=new ArrayList<>();
+        if (list == null) {
+            list = new ArrayList<>();
         }
         this.list = list;
         notifyDataSetChanged();
@@ -66,8 +70,7 @@ public class PersonnelDataAdapter extends RecyclerView.Adapter<PersonnelDataAdap
         holder.personnelDataAdapter_phone.setText(phone);
         //照片添加
         //设置图片圆角角度
-        RequestOptions options = new RequestOptions().bitmapTransform(new RoundedCorners(99))
-                .placeholder(R.mipmap.personneldataadapter_title);
+
         ImageLoaderUtils.loadImage(list.get(i).getPhoto(),holder.personnelDataAdapter_titleImage,options);
     }
 

+ 3 - 1
app/src/main/res/layout/personneldata_adapter.xml

@@ -11,11 +11,13 @@
         android:layout_marginBottom="@dimen/dp_24"
         android:layout_marginLeft="@dimen/dp_32"
         android:layout_marginRight="@dimen/dp_32">
+
         <ImageView
             android:id="@+id/personnelDataAdapter_titleImage"
             android:layout_width="@dimen/dp_160"
             android:layout_height="@dimen/dp_160"
-            android:src="@mipmap/personneldataadapter_title"/>
+            android:src="@mipmap/ic_person_default" />
+
         <LinearLayout
             android:layout_width="wrap_content"
             android:layout_height="match_parent"

BIN
app/src/main/res/mipmap-xhdpi/ic_person_default.png


BIN
app/src/main/res/mipmap-xhdpi/personneldataadapter_title.png