|
@@ -14,8 +14,10 @@ import com.example.datalibrary.model.Group;
|
|
import com.example.datalibrary.model.User;
|
|
import com.example.datalibrary.model.User;
|
|
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.ArrayList;
|
|
|
|
+import java.util.Collections;
|
|
import java.util.HashMap;
|
|
import java.util.HashMap;
|
|
import java.util.Iterator;
|
|
import java.util.Iterator;
|
|
|
|
+import java.util.LinkedList;
|
|
import java.util.List;
|
|
import java.util.List;
|
|
import java.util.UUID;
|
|
import java.util.UUID;
|
|
import java.util.concurrent.ConcurrentHashMap;
|
|
import java.util.concurrent.ConcurrentHashMap;
|
|
@@ -27,11 +29,24 @@ public class FaceApi {
|
|
|
|
|
|
public boolean isDelete;
|
|
public boolean isDelete;
|
|
|
|
|
|
- private volatile ConcurrentHashMap<String, User> users = new ConcurrentHashMap<>();
|
|
|
|
|
|
+ // private volatile ConcurrentHashMap<String, User> users = new ConcurrentHashMap<>();
|
|
|
|
|
|
|
|
+ private final List<User> users;
|
|
|
|
|
|
- private FaceApi() {
|
|
|
|
|
|
+ public void add(User user) {
|
|
|
|
+ synchronized (users) {
|
|
|
|
+ users.add(user);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
|
|
|
|
+ public void remove(int element) {
|
|
|
|
+ synchronized (users) {
|
|
|
|
+ users.remove((Object) element);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private FaceApi() {
|
|
|
|
+ users = Collections.synchronizedList(new LinkedList<User>());
|
|
}
|
|
}
|
|
|
|
|
|
public static synchronized FaceApi getInstance() {
|
|
public static synchronized FaceApi getInstance() {
|
|
@@ -42,8 +57,6 @@ public class FaceApi {
|
|
}
|
|
}
|
|
|
|
|
|
public void init(DBLoadListener dbLoadListener , Context context){
|
|
public void init(DBLoadListener dbLoadListener , Context context){
|
|
-
|
|
|
|
- users = new ConcurrentHashMap<>();
|
|
|
|
DBManager.getInstance().init(context);
|
|
DBManager.getInstance().init(context);
|
|
DBManager.getInstance().queryAllUsers(dbLoadListener);
|
|
DBManager.getInstance().queryAllUsers(dbLoadListener);
|
|
}
|
|
}
|
|
@@ -120,19 +133,39 @@ public class FaceApi {
|
|
return false;
|
|
return false;
|
|
}
|
|
}
|
|
//Log.i("FaceApi", "人脸注册成功,user.getId=" + newUser.getId() );
|
|
//Log.i("FaceApi", "人脸注册成功,user.getId=" + newUser.getId() );
|
|
- users.put(newUser.getUserId() , newUser);
|
|
|
|
|
|
+ add(newUser);
|
|
}
|
|
}
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+/* *//**
|
|
|
|
+ * 查找所有用户
|
|
|
|
+ *//*
|
|
|
|
+ public List<User> getAllUserList() {
|
|
|
|
+ if(users.size()==0){
|
|
|
|
+ synchronized (users){
|
|
|
|
+ if(users.size()==0){
|
|
|
|
+ users.clear();
|
|
|
|
+ DBManager.getInstance().queryAllUsers(new DBManager.DBUserCallback() {
|
|
|
|
+ @Override
|
|
|
|
+ public void callback(User user) {
|
|
|
|
+ users.add(user);
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return users;
|
|
|
|
+ }*/
|
|
/**
|
|
/**
|
|
* 查找所有用户
|
|
* 查找所有用户
|
|
*/
|
|
*/
|
|
- public ConcurrentHashMap<String, User> getAllUserList() {
|
|
|
|
- if(users==null|| users.size() == 0){
|
|
|
|
- synchronized (FaceApi.class){
|
|
|
|
- if(users==null || users.size() == 0){
|
|
|
|
- users = DBManager.getInstance().queryAllUsers();
|
|
|
|
|
|
+ public List<User> getAllUserList() {
|
|
|
|
+ if(users.size()==0){
|
|
|
|
+ synchronized (users){
|
|
|
|
+ if(users.size()==0){
|
|
|
|
+ users.clear();
|
|
|
|
+ DBManager.getInstance().queryAllUsers(users);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -156,23 +189,24 @@ public class FaceApi {
|
|
if (TextUtils.isEmpty(userName)) {
|
|
if (TextUtils.isEmpty(userName)) {
|
|
return null;
|
|
return null;
|
|
}
|
|
}
|
|
-
|
|
|
|
- if (users != null && users.size() > 0){
|
|
|
|
|
|
+ if (users != null && users.size() > 0) {
|
|
List<User> list = new ArrayList();
|
|
List<User> list = new ArrayList();
|
|
-
|
|
|
|
- Iterator<HashMap.Entry<String, User>> iterator = users.entrySet().iterator();
|
|
|
|
|
|
+ // 使用迭代器安全地遍历和删除
|
|
|
|
+ Iterator<User> iterator = users.iterator();
|
|
while (iterator.hasNext()) {
|
|
while (iterator.hasNext()) {
|
|
- HashMap.Entry<String, User> entry = iterator.next();
|
|
|
|
- if (entry.getValue() != null &&
|
|
|
|
- entry.getValue().getUserName()!=null &&
|
|
|
|
- entry.getValue().getUserName().indexOf(userName)!= -1) { // 根据条件移除元素
|
|
|
|
- list.add(entry.getValue());
|
|
|
|
|
|
+ User item = iterator.next();
|
|
|
|
+ if (item != null &&
|
|
|
|
+ item.getUserName() != null &&
|
|
|
|
+ item.getUserName().indexOf(userName) != -1) {
|
|
|
|
+ list.add(item);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+
|
|
return list;
|
|
return list;
|
|
- }else {
|
|
|
|
|
|
+ } else {
|
|
return DBManager.getInstance().queryUserByUserNameVag(userName);
|
|
return DBManager.getInstance().queryUserByUserNameVag(userName);
|
|
}
|
|
}
|
|
|
|
+
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -199,19 +233,14 @@ public class FaceApi {
|
|
if (_id < 0) {
|
|
if (_id < 0) {
|
|
return null;
|
|
return null;
|
|
}
|
|
}
|
|
- synchronized (FaceApi.class) {
|
|
|
|
- //先从内存中寻找
|
|
|
|
- for (String key : users.keySet()) {
|
|
|
|
- User user = users.get(key);
|
|
|
|
- if (user == null) {
|
|
|
|
- continue;
|
|
|
|
- }
|
|
|
|
|
|
+ // 使用迭代器安全地遍历和删除
|
|
|
|
+ Iterator<User> iterator = users.iterator();
|
|
|
|
+ while (iterator.hasNext()) {
|
|
|
|
+ User user = iterator.next();
|
|
if (user.getId() == _id) {
|
|
if (user.getId() == _id) {
|
|
- //Log.i("faceApi","getUserListById_new, 内存中找到 _id=" + _id);
|
|
|
|
return user;
|
|
return user;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-
|
|
|
|
//Log.i("faceApi","getUserListById_new, 内存中没有找到 _id=" + _id);
|
|
//Log.i("faceApi","getUserListById_new, 内存中没有找到 _id=" + _id);
|
|
|
|
|
|
//再从数据库中寻找
|
|
//再从数据库中寻找
|
|
@@ -219,7 +248,6 @@ public class FaceApi {
|
|
if (userList != null && userList.size() > 0) {
|
|
if (userList != null && userList.size() > 0) {
|
|
return userList.get(0);
|
|
return userList.get(0);
|
|
}
|
|
}
|
|
- }
|
|
|
|
return null;
|
|
return null;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -230,12 +258,15 @@ public class FaceApi {
|
|
if (TextUtils.isEmpty(userId)) {
|
|
if (TextUtils.isEmpty(userId)) {
|
|
return null;
|
|
return null;
|
|
}
|
|
}
|
|
- if (users != null && users.containsKey(userId)) {
|
|
|
|
- User user = users.get(userId);
|
|
|
|
- if (user != null&&user.getId()!=0) {
|
|
|
|
- return user;
|
|
|
|
|
|
+ synchronized (users) {
|
|
|
|
+ // 使用迭代器安全地遍历和删除
|
|
|
|
+ Iterator<User> iterator = users.iterator();
|
|
|
|
+ while (iterator.hasNext()) {
|
|
|
|
+ User user = iterator.next();
|
|
|
|
+ if (userId.equals(user.getUserId())) {
|
|
|
|
+ return user;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
-
|
|
|
|
}
|
|
}
|
|
return DBManager.getInstance().queryUser(userId);
|
|
return DBManager.getInstance().queryUser(userId);
|
|
}
|
|
}
|
|
@@ -245,30 +276,25 @@ public class FaceApi {
|
|
* 更新用户
|
|
* 更新用户
|
|
*/
|
|
*/
|
|
public boolean userUpdate(User user) {
|
|
public boolean userUpdate(User user) {
|
|
- synchronized (DBManager.class) {
|
|
|
|
- if (user == null) {
|
|
|
|
|
|
+ synchronized (users) {
|
|
|
|
+ if (user == null || TextUtils.isEmpty(user.getUserId())) {
|
|
return false;
|
|
return false;
|
|
}
|
|
}
|
|
|
|
|
|
boolean ret = DBManager.getInstance().updateUser(user);
|
|
boolean ret = DBManager.getInstance().updateUser(user);
|
|
|
|
+ User dbUser= DBManager.getInstance().queryUser(user.getUserId());
|
|
if (ret) {
|
|
if (ret) {
|
|
String userId = user.getUserId();
|
|
String userId = user.getUserId();
|
|
int size = users.size();
|
|
int size = users.size();
|
|
-
|
|
|
|
- //先从内存中寻找
|
|
|
|
- for (String key : users.keySet()) {
|
|
|
|
- User curUser = users.get(key);
|
|
|
|
- if (curUser == null) {
|
|
|
|
- continue;
|
|
|
|
- }
|
|
|
|
- if (userId != null && userId.equals(curUser.getUserId())) {
|
|
|
|
- curUser.setUserName(user.getUserName());
|
|
|
|
- curUser.setImageName(user.getImageName());
|
|
|
|
- curUser.setUserInfo(user.getUserInfo());
|
|
|
|
- curUser.setFeature(user.getFeature());
|
|
|
|
- curUser.setUserInfo(user.getUserInfo());
|
|
|
|
- users.put(curUser.getUserId(), curUser);
|
|
|
|
- break;
|
|
|
|
|
|
+ if (TextUtils.isEmpty(userId) || dbUser == null) {
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
|
|
+ synchronized (users) {
|
|
|
|
+ for (int i = 0; i < users.size(); i++) {
|
|
|
|
+ if(userId.equals(users.get(i).getUserId())){
|
|
|
|
+ users.set(i, dbUser); // 更新值,比如翻倍
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -298,15 +324,18 @@ public class FaceApi {
|
|
}
|
|
}
|
|
boolean ret = DBManager.getInstance().deleteUser(userId);
|
|
boolean ret = DBManager.getInstance().deleteUser(userId);
|
|
if (ret){
|
|
if (ret){
|
|
- Iterator<HashMap.Entry<String, User>> iterator = users.entrySet().iterator();
|
|
|
|
- while (iterator.hasNext()) {
|
|
|
|
- HashMap.Entry<String, User> entry = iterator.next();
|
|
|
|
- if (entry.getValue() != null &&
|
|
|
|
- userId.equals(entry.getValue().getUserId())) { // 根据条件移除元素
|
|
|
|
- iterator.remove();
|
|
|
|
|
|
+ synchronized (users) {
|
|
|
|
+ // 使用迭代器安全地遍历和删除
|
|
|
|
+ Iterator<User> iterator = users.iterator();
|
|
|
|
+ while (iterator.hasNext()) {
|
|
|
|
+ User item = iterator.next();
|
|
|
|
+ if (item != null &&
|
|
|
|
+ item.getUserId() != null &&
|
|
|
|
+ item.getUserId().indexOf(userId) != -1) {
|
|
|
|
+ iterator.remove();
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-
|
|
|
|
}
|
|
}
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|
|
@@ -329,14 +358,17 @@ public class FaceApi {
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
}*/
|
|
}*/
|
|
-
|
|
|
|
- Iterator<HashMap.Entry<String, User>> iterator = users.entrySet().iterator();
|
|
|
|
- while (iterator.hasNext()) {
|
|
|
|
- HashMap.Entry<String, User> entry = iterator.next();
|
|
|
|
- if (entry.getValue() != null &&
|
|
|
|
- userId.equals(entry.getValue().getUserId())) { // 根据条件移除元素
|
|
|
|
- FaceSDKManager.getInstance().delPush(entry.getValue());
|
|
|
|
- iterator.remove();
|
|
|
|
|
|
+ synchronized (users) {
|
|
|
|
+ // 使用迭代器安全地遍历和删除
|
|
|
|
+ Iterator<User> iterator = users.iterator();
|
|
|
|
+ while (iterator.hasNext()) {
|
|
|
|
+ User item = iterator.next();
|
|
|
|
+ if (item != null &&
|
|
|
|
+ item.getUserId() != null &&
|
|
|
|
+ item.getUserId().indexOf(userId) != -1) {
|
|
|
|
+ FaceSDKManager.getInstance().delPush(item);
|
|
|
|
+ iterator.remove();
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -367,7 +399,7 @@ public class FaceApi {
|
|
if (isAllCover){
|
|
if (isAllCover){
|
|
dbLoadListener.onLoad(count / 2 ,
|
|
dbLoadListener.onLoad(count / 2 ,
|
|
count , 0.5f);
|
|
count , 0.5f);
|
|
- users = new ConcurrentHashMap<>();
|
|
|
|
|
|
+ users.clear();
|
|
DBManager.getInstance().clearTable();
|
|
DBManager.getInstance().clearTable();
|
|
dbLoadListener.onComplete(null , count);
|
|
dbLoadListener.onComplete(null , count);
|
|
return true;
|
|
return true;
|
|
@@ -377,32 +409,36 @@ public class FaceApi {
|
|
int i = 0;
|
|
int i = 0;
|
|
dbLoadListener.onStart(count);
|
|
dbLoadListener.onStart(count);
|
|
try {
|
|
try {
|
|
- Iterator<User> iterator = list.iterator();
|
|
|
|
- while (iterator.hasNext()) {
|
|
|
|
- User user = iterator.next();
|
|
|
|
- int userId = user.getId();
|
|
|
|
- if (user.isChecked()) {
|
|
|
|
- boolean ret = DBManager.getInstance().deleteUser(userId);
|
|
|
|
- if (ret){
|
|
|
|
- iterator.remove();
|
|
|
|
- if (isHave){
|
|
|
|
- users.remove(user);
|
|
|
|
|
|
+
|
|
|
|
+ synchronized (users){
|
|
|
|
+ // 使用迭代器安全地遍历和删除
|
|
|
|
+ Iterator<User> iterator = users.iterator();
|
|
|
|
+ while (iterator.hasNext()) {
|
|
|
|
+ User item = iterator.next();
|
|
|
|
+ if (item != null &&
|
|
|
|
+ item.isChecked()) {
|
|
|
|
+ boolean ret = DBManager.getInstance().deleteUser(item.getUserId());
|
|
|
|
+ if (ret){
|
|
|
|
+ iterator.remove();
|
|
}
|
|
}
|
|
|
|
+
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+
|
|
}catch (Exception e){
|
|
}catch (Exception e){
|
|
|
|
|
|
}
|
|
}
|
|
dbLoadListener.onComplete(null , count);
|
|
dbLoadListener.onComplete(null , count);
|
|
- return rets;
|
|
|
|
|
|
+ return rets;
|
|
}
|
|
}
|
|
|
|
|
|
public void userClean(){
|
|
public void userClean(){
|
|
- if(users != null) {
|
|
|
|
- users.clear();
|
|
|
|
|
|
+ synchronized (users) {
|
|
|
|
+ if (users != null) {
|
|
|
|
+ users.clear();
|
|
|
|
+ }
|
|
}
|
|
}
|
|
- users = new ConcurrentHashMap<>();
|
|
|
|
DBManager.getInstance().clearTable();
|
|
DBManager.getInstance().clearTable();
|
|
}
|
|
}
|
|
|
|
|
|
@@ -577,15 +613,20 @@ public class FaceApi {
|
|
}
|
|
}
|
|
|
|
|
|
public void clean(){
|
|
public void clean(){
|
|
- users = null;
|
|
|
|
|
|
+ synchronized (users) {
|
|
|
|
+ users.clear();
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
- public ConcurrentHashMap<String, User> getUsers() {
|
|
|
|
|
|
+ public List<User> getUsers() {
|
|
return users;
|
|
return users;
|
|
}
|
|
}
|
|
|
|
|
|
- public void setUsers(ConcurrentHashMap<String, User> users) {
|
|
|
|
- this.users = users;
|
|
|
|
|
|
+ public void setUsers(List<User> users) {
|
|
|
|
+ synchronized (users){
|
|
|
|
+ users.clear();
|
|
|
|
+ users.addAll(users);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|