Commit 3af6a422 authored by hywang's avatar hywang

1.增加ble连接蓝牙尺;

2.增加单选和时间的默认值;
3.标签重复提示对换标签位置;
4.基础信息,养殖类型写死。
parent 757c9eef
...@@ -9,8 +9,8 @@ android { ...@@ -9,8 +9,8 @@ android {
applicationId "com.phlx.anchorcollect" applicationId "com.phlx.anchorcollect"
minSdkVersion 21 minSdkVersion 21
targetSdkVersion 29 targetSdkVersion 29
versionCode 21 versionCode 22
versionName "2.3.1" versionName "2.3.2"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
...@@ -50,7 +50,7 @@ android { ...@@ -50,7 +50,7 @@ android {
} }
greendao { greendao {
schemaVersion 8 //数据库版本号 schemaVersion 9 //数据库版本号
daoPackage 'com.phlx.anchorcollect.db.gen' daoPackage 'com.phlx.anchorcollect.db.gen'
targetGenDir 'src/main/java' targetGenDir 'src/main/java'
} }
......
...@@ -14,11 +14,16 @@ ...@@ -14,11 +14,16 @@
<uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
<uses-permission android:name="android.permission.BLUETOOTH_PRIVILEGED"
tools:ignore="ProtectedPermissions" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION " />
<application <application
android:name="App" android:name="App"
...@@ -122,6 +127,11 @@ ...@@ -122,6 +127,11 @@
android:exported="true" android:exported="true"
android:persistent="true"/> android:persistent="true"/>
<service
android:name=".ble.BleService"
android:enabled="true"
android:exported="true" />
<meta-data <meta-data
android:name="design_width_in_dp" android:name="design_width_in_dp"
android:value="640"/> android:value="640"/>
......
package com.phlx.anchorcollect; package com.phlx.anchorcollect;
import android.bluetooth.le.ScanSettings;
import android.graphics.Typeface; import android.graphics.Typeface;
import android.os.Build;
import android.util.DisplayMetrics; import android.util.DisplayMetrics;
import com.kongzue.dialogx.DialogX; import com.kongzue.dialogx.DialogX;
...@@ -11,7 +13,10 @@ import com.phlx.anchorcollect.util.DeviceIdUtils; ...@@ -11,7 +13,10 @@ import com.phlx.anchorcollect.util.DeviceIdUtils;
import com.uhf.linkage.Linkage; import com.uhf.linkage.Linkage;
import cn.wandersnail.ble.EasyBLE; import cn.wandersnail.ble.EasyBLE;
import cn.wandersnail.ble.ScanConfiguration;
import cn.wandersnail.ble.ScannerType;
import cn.wandersnail.bluetooth.BTManager; import cn.wandersnail.bluetooth.BTManager;
import cn.wandersnail.commons.poster.ThreadMode;
import me.goldze.mvvmhabit.base.BaseApplication; import me.goldze.mvvmhabit.base.BaseApplication;
import me.goldze.mvvmhabit.crash.CaocConfig; import me.goldze.mvvmhabit.crash.CaocConfig;
import me.goldze.mvvmhabit.utils.KLog; import me.goldze.mvvmhabit.utils.KLog;
...@@ -20,6 +25,8 @@ public class App extends BaseApplication { ...@@ -20,6 +25,8 @@ public class App extends BaseApplication {
private Linkage link; private Linkage link;
private static App instance; private static App instance;
EasyBLE ble;
@Override @Override
public void onCreate() { public void onCreate() {
...@@ -42,9 +49,26 @@ public class App extends BaseApplication { ...@@ -42,9 +49,26 @@ public class App extends BaseApplication {
//初始化字典项 //初始化字典项
initDict(); initDict();
//实例化并初始化 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
// EasyBLE.getInstance().initialize(this) ScanConfiguration scanConfig = new ScanConfiguration()
BTManager.getInstance().initialize(this); .setScanSettings(new ScanSettings.Builder()
.setScanMode(ScanSettings.SCAN_MODE_BALANCED)
.build())
.setScanPeriodMillis(15000)//搜索一次的毫秒值
.setAcceptSysConnectedDevice(true)
.setOnlyAcceptBleDevice(true);
if(ble==null){
ble = EasyBLE.getBuilder().setScanConfiguration(scanConfig)
.setObserveAnnotationRequired(true)
.setMethodDefaultThreadMode(ThreadMode.BACKGROUND)//指定回调方法和观察者方法的默认线程
.setScannerType(ScannerType.LEGACY)
.build();
ble.setLogEnabled(true);
ble.initialize(this);
}
}else {
EasyBLE.getInstance().initialize(this);
}
Configs.cpuName = DeviceIdUtils.getCpuName(); Configs.cpuName = DeviceIdUtils.getCpuName();
......
package com.phlx.anchorcollect; package com.phlx.anchorcollect;
import android.bluetooth.BluetoothGatt;
import android.bluetooth.BluetoothGattCharacteristic;
import android.content.Context; import android.content.Context;
import android.content.pm.PackageInfo; import android.content.pm.PackageInfo;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
...@@ -14,6 +16,7 @@ import java.util.ArrayList; ...@@ -14,6 +16,7 @@ import java.util.ArrayList;
import java.util.LinkedHashSet; import java.util.LinkedHashSet;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import java.util.UUID;
import me.goldze.mvvmhabit.utils.SPUtils; import me.goldze.mvvmhabit.utils.SPUtils;
...@@ -161,6 +164,21 @@ public class Configs { ...@@ -161,6 +164,21 @@ public class Configs {
public static String deptName = ""; public static String deptName = "";
/**
* ble
*/
public static UUID uuid_service;
public static UUID uuid_write;
public static UUID uuid_notify;
public static UUID uuid_indicate;
public static BluetoothGatt mBluetoothGatt = null;
public static BluetoothGattCharacteristic mNotifyCharacteristic3 = null;
public static BluetoothGattCharacteristic mNotifyCharacteristic6 = null;
// public static boolean ISCONNECTED; // public static boolean ISCONNECTED;
......
...@@ -9,11 +9,13 @@ import android.util.Log; ...@@ -9,11 +9,13 @@ import android.util.Log;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import com.phlx.anchorcollect.Configs;
import com.phlx.anchorcollect.event.EventKey; import com.phlx.anchorcollect.event.EventKey;
import com.phlx.anchorcollect.event.EventMsg; import com.phlx.anchorcollect.event.EventMsg;
import com.phlx.anchorcollect.event.EventUtils; import com.phlx.anchorcollect.event.EventUtils;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.UUID; import java.util.UUID;
...@@ -22,21 +24,20 @@ import cn.wandersnail.ble.Connection; ...@@ -22,21 +24,20 @@ import cn.wandersnail.ble.Connection;
import cn.wandersnail.ble.ConnectionConfiguration; import cn.wandersnail.ble.ConnectionConfiguration;
import cn.wandersnail.ble.Device; import cn.wandersnail.ble.Device;
import cn.wandersnail.ble.EasyBLE; import cn.wandersnail.ble.EasyBLE;
import cn.wandersnail.ble.Request;
import cn.wandersnail.ble.RequestBuilder; import cn.wandersnail.ble.RequestBuilder;
import cn.wandersnail.ble.RequestBuilderFactory; import cn.wandersnail.ble.RequestBuilderFactory;
import cn.wandersnail.ble.WriteCharacteristicBuilder; import cn.wandersnail.ble.WriteCharacteristicBuilder;
import cn.wandersnail.ble.WriteOptions; import cn.wandersnail.ble.WriteOptions;
import cn.wandersnail.ble.callback.ReadCharacteristicCallback; import cn.wandersnail.ble.callback.ReadCharacteristicCallback;
import cn.wandersnail.ble.callback.ScanListener; import cn.wandersnail.ble.callback.ScanListener;
import cn.wandersnail.ble.callback.WriteCharacteristicCallback;
import io.reactivex.annotations.Nullable;
/** /**
* <pre> * <pre>
* author : lei * ble蓝牙manager
* e-mail : 18600395998@163.com
* time : 2019/09/03
* desc :
* version: 1.0
* </pre> * </pre>
*/ */
public class BleManagers { public class BleManagers {
...@@ -51,6 +52,7 @@ public class BleManagers { ...@@ -51,6 +52,7 @@ public class BleManagers {
private Connection connection; private Connection connection;
private Map<String, String> devicesNameMap; private Map<String, String> devicesNameMap;
private OnBleSearchListener listener;
/** /**
* 从给定的上下文中获取btUtils * 从给定的上下文中获取btUtils
...@@ -78,13 +80,20 @@ public class BleManagers { ...@@ -78,13 +80,20 @@ public class BleManagers {
bleService = new Intent(context, BleService.class); bleService = new Intent(context, BleService.class);
} }
public void setListener(OnBleSearchListener listener) {
this.listener = listener;
}
public void removeListener() {
this.listener = null;
}
/** /**
* 搜索设备 * 搜索设备
* *
* @param listener 监听接口 * @param listener 监听接口
*/ */
public void searchBleDevices(OnBleSearchListener listener) { public void searchBleDevices() {
//扫描前,先停止上一次扫描 //扫描前,先停止上一次扫描
cancelBLESearch(); cancelBLESearch();
...@@ -94,19 +103,23 @@ public class BleManagers { ...@@ -94,19 +103,23 @@ public class BleManagers {
if (devicesNameMap == null) if (devicesNameMap == null)
devicesNameMap = new HashMap<>(); devicesNameMap = new HashMap<>();
devicesNameMap.clear(); devicesNameMap.clear();
if (listener != null)
listener.onStartDiscovery(); listener.onStartDiscovery();
} }
@Override @Override
public void onScanStop() { public void onScanStop() {
//搜索停止 //搜索停止
// listener.onStartDiscovery(); if (listener != null)
listener.onStopDiscovery();
} }
@Override @Override
public void onScanResult(@NonNull Device device, boolean isConnectedBySys) { public void onScanResult(@NonNull Device device, boolean isConnectedBySys) {
// Log.e("why", "onScanResult--"+device.getName());
if (!devicesNameMap.containsKey(device.getAddress())) { if (!devicesNameMap.containsKey(device.getAddress())) {
devicesNameMap.put(device.getAddress(), device.getName()); devicesNameMap.put(device.getAddress(), device.getName());
if (listener != null)
listener.onBleDeviceFound(device); listener.onBleDeviceFound(device);
} }
} }
...@@ -115,12 +128,15 @@ public class BleManagers { ...@@ -115,12 +128,15 @@ public class BleManagers {
public void onScanError(int errorCode, @NonNull String errorMsg) { public void onScanError(int errorCode, @NonNull String errorMsg) {
switch (errorCode) { switch (errorCode) {
case ScanListener.ERROR_LACK_LOCATION_PERMISSION://缺少定位权限 case ScanListener.ERROR_LACK_LOCATION_PERMISSION://缺少定位权限
if (listener != null)
listener.onBleError("缺少定位权限"); listener.onBleError("缺少定位权限");
break; break;
case ScanListener.ERROR_LOCATION_SERVICE_CLOSED://位置服务未开启 case ScanListener.ERROR_LOCATION_SERVICE_CLOSED://位置服务未开启
if (listener != null)
listener.onBleError("位置服务未开启"); listener.onBleError("位置服务未开启");
break; break;
case ScanListener.ERROR_SCAN_FAILED://搜索失败 case ScanListener.ERROR_SCAN_FAILED://搜索失败
if (listener != null)
listener.onBleError("搜索失败"); listener.onBleError("搜索失败");
break; break;
} }
...@@ -167,6 +183,19 @@ public class BleManagers { ...@@ -167,6 +183,19 @@ public class BleManagers {
devicesNameMap.clear(); devicesNameMap.clear();
} }
public void disCurConnectBLE() {
if (connection != null) {
EasyBLE.getInstance().disconnectConnection(connection.getDevice());//断开指定连接
connection = null;
}
//关闭蓝牙服务
stopBleService();
//清空已存设备地址列表
if (devicesNameMap != null) {
devicesNameMap.clear();
}
}
public void writeCharacteristic(UUID uuid_service, UUID uuid_write, byte[] bytes) { public void writeCharacteristic(UUID uuid_service, UUID uuid_write, byte[] bytes) {
WriteCharacteristicBuilder builder = WriteCharacteristicBuilder builder =
new RequestBuilderFactory().getWriteCharacteristicBuilder(uuid_service, new RequestBuilderFactory().getWriteCharacteristicBuilder(uuid_service,
...@@ -179,8 +208,27 @@ public class BleManagers { ...@@ -179,8 +208,27 @@ public class BleManagers {
.setWaitWriteResult(true) .setWaitWriteResult(true)
.setWriteType(BluetoothGattCharacteristic.WRITE_TYPE_DEFAULT) .setWriteType(BluetoothGattCharacteristic.WRITE_TYPE_DEFAULT)
.build()); .build());
// 设置回调(可选)
builder.setCallback(new WriteCharacteristicCallback() {
@Override
public void onRequestFailed(@NonNull Request request, int failType, @Nullable Object value) {
Log.e("EasyBLE", "写入失败,失败类型:" + failType);
}
@Override
public void onCharacteristicWrite(@NonNull Request request, @NonNull byte[] value) {
Log.i("EasyBLE", "写入成功,写入数据:" + Arrays.toString(value));
}
});
//不设置回调,使用观察者模式接收结果 //不设置回调,使用观察者模式接收结果
builder.build().execute(connection); builder.build().execute(connection);
// if (Configs.mNotifyCharacteristic3 != null) {
//// byte[] data = DataManageUtils.HexString2Bytes(s);//转十六进制
// Configs.mNotifyCharacteristic3.setValue(data);
// Log.d("ZM", "信道3发出: " + DataManageUtils.bytesToHexString(data));
// mBluetoothLeService.wirteCharacteristic(Configs.mNotifyCharacteristic3);
// }
} }
public void readCharacteristic(UUID uuid_service, UUID uuid_read) { public void readCharacteristic(UUID uuid_service, UUID uuid_read) {
...@@ -196,7 +244,7 @@ public class BleManagers { ...@@ -196,7 +244,7 @@ public class BleManagers {
if (!isServiceRunning(mContext)) { if (!isServiceRunning(mContext)) {
mContext.startService(bleService); mContext.startService(bleService);
} else { } else {
EventUtils.post(new EventMsg(EventKey.KEY_BLUETOOTH_CONNECT_SUCCESS,null)); EventUtils.post(new EventMsg(EventKey.KEY_BLUETOOTH_CONNECT_SUCCESS, null));
} }
} }
......
package com.phlx.anchorcollect.ble; package com.phlx.anchorcollect.ble;
import static com.phlx.anchorcollect.Configs.uuid_service;
import static com.phlx.anchorcollect.Configs.uuid_write;
import android.app.Service; import android.app.Service;
import android.bluetooth.BluetoothGattCharacteristic;
import android.bluetooth.BluetoothGattService;
import android.content.Intent; import android.content.Intent;
import android.os.IBinder; import android.os.IBinder;
import android.os.SystemClock;
import android.util.Log; import android.util.Log;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.phlx.anchorcollect.App; import com.phlx.anchorcollect.App;
import com.phlx.anchorcollect.Configs;
import com.phlx.anchorcollect.event.EventKey; import com.phlx.anchorcollect.event.EventKey;
import com.phlx.anchorcollect.event.EventMsg; import com.phlx.anchorcollect.event.EventMsg;
import com.phlx.anchorcollect.event.EventTag;
import com.phlx.anchorcollect.event.EventUtils; import com.phlx.anchorcollect.event.EventUtils;
import com.phlx.anchorcollect.util.DataManageUtils;
import com.uhf.structures.OnBluetoothListener; import com.uhf.structures.OnBluetoothListener;
import org.greenrobot.eventbus.EventBus;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.UUID; import java.util.UUID;
import cn.wandersnail.ble.Connection;
import cn.wandersnail.ble.ConnectionState; import cn.wandersnail.ble.ConnectionState;
import cn.wandersnail.ble.Device; import cn.wandersnail.ble.Device;
import cn.wandersnail.ble.EasyBLE; import cn.wandersnail.ble.EasyBLE;
import cn.wandersnail.ble.EventObserver; import cn.wandersnail.ble.EventObserver;
import cn.wandersnail.ble.Request; import cn.wandersnail.ble.Request;
import cn.wandersnail.ble.RequestBuilder;
import cn.wandersnail.ble.RequestBuilderFactory;
import cn.wandersnail.ble.callback.MtuChangeCallback;
import cn.wandersnail.ble.callback.NotificationChangeCallback;
import cn.wandersnail.commons.observer.Observe; import cn.wandersnail.commons.observer.Observe;
import cn.wandersnail.commons.poster.RunOn; import cn.wandersnail.commons.poster.RunOn;
import cn.wandersnail.commons.poster.Tag; import cn.wandersnail.commons.poster.Tag;
import cn.wandersnail.commons.poster.ThreadMode; import cn.wandersnail.commons.poster.ThreadMode;
import me.goldze.mvvmhabit.bus.RxBus;
/** /**
* <pre> * <pre>
* author : lei * ble蓝牙service
* e-mail : 18600395998@163.com
* time : 2019/04/12
* desc : 蓝牙接收数据服务
* version: 1.0
* </pre> * </pre>
*/ */
public class BleService extends Service implements EventObserver { public class BleService extends Service implements EventObserver {
...@@ -50,40 +68,35 @@ public class BleService extends Service implements EventObserver { ...@@ -50,40 +68,35 @@ public class BleService extends Service implements EventObserver {
public int onStartCommand(Intent intent, int flags, int startId) { public int onStartCommand(Intent intent, int flags, int startId) {
EasyBLE.getInstance().registerObserver(this); EasyBLE.getInstance().registerObserver(this);
bleManagers = BleManagers.from(this); bleManagers = BleManagers.from(this);
EventUtils.post(new EventMsg(EventKey.KEY_BLUETOOTH_CONNECT_SUCCESS,null)); EventUtils.post(new EventMsg(EventKey.KEY_BLUETOOTH_CONNECT_SUCCESS, null));
Log.e(TAG, "onStartCommand: "+"服务开启了" ); Log.e(TAG, "onStartCommand: " + "服务开启了");
return START_STICKY; return START_STICKY;
} }
@Tag("onCharacteristicChanged") @Tag("onCharacteristicChanged")
@RunOn(ThreadMode.BACKGROUND) @RunOn(ThreadMode.BACKGROUND)
@Observe @Observe
@Override @Override
public void onCharacteristicChanged(Device device, UUID service, UUID characteristic, byte[] value) { public void onCharacteristicChanged(Device device, UUID service, UUID characteristic, byte[] value) {
// App.getInstance().getLinkage().pushRemoteRFIDData(value); // App.getInstance().getLinkage().pushRemoteRFIDData(value);
Log.e("Data:notify", value.length + "<--" + bytesToHexString(value, value.length)); String changedStr = byteToString(2, value);
} Log.e("Data:notify", value.length + "<--" + changedStr);
if(value[1] == (byte) 0x0A ) {
/** //设置model
* 连接状态 监听 bleManagers.writeCharacteristic(uuid_service, uuid_write, new byte[]{(byte) 0xAA, 0x54, 0x01, (byte) 0xFF, 0x00});
* //告诉设备收到消息
* @param device bleManagers.writeCharacteristic(uuid_service, uuid_write, new byte[]{(byte) 0xAA, (byte) 0x8A, 0x01, 0x35, 0x00});
*/ SystemClock.sleep(300);
@Tag("onConnectionStateChanged") EventMsg eventMsg = new EventMsg();
@Observe eventMsg.setAction(EventTag.EVENT_BLE_LEN);
@RunOn(ThreadMode.MAIN) eventMsg.setObj(changedStr);
@Override RxBus.getDefault().post(eventMsg);
public void onConnectionStateChanged(@NonNull Device device) {
if (device.getConnectionState() == ConnectionState.DISCONNECTED) {
EventUtils.post(new EventMsg(EventKey.KEY_BLUETOOTH_CONNECT_FAILED,null));
EventUtils.post(new EventMsg<>(EventKey.KEY_INVENTORY_STOP, null));
} }
} }
/** /**
* 写入状态监听 * 写入状态监听
* *
...@@ -112,7 +125,7 @@ public class BleService extends Service implements EventObserver { ...@@ -112,7 +125,7 @@ public class BleService extends Service implements EventObserver {
@Override @Override
public void onDestroy() { public void onDestroy() {
Log.e(TAG, "onDestroy: "+"服务挂掉了" ); Log.e(TAG, "onDestroy: " + "服务挂掉了");
EasyBLE.getInstance().unregisterObserver(this); EasyBLE.getInstance().unregisterObserver(this);
} }
...@@ -130,4 +143,23 @@ public class BleService extends Service implements EventObserver { ...@@ -130,4 +143,23 @@ public class BleService extends Service implements EventObserver {
return stringBuilder.toString().toUpperCase(); return stringBuilder.toString().toUpperCase();
} }
public static String byteToString(int length, byte[] bytes) {
String data = "";
byte[] result = new byte[length];
try {
System.arraycopy(bytes, 3, result, 0, length);
} catch (Exception e) {
e.printStackTrace();
}
String byteArrayToString = DataManageUtils.byteArrayToString(result);
int l = 0;
if (!"ffff".equals(byteArrayToString)) {
l = Integer.parseInt(Objects.requireNonNull(byteArrayToString), 16);
double resultDouble = (double) l / 10;
data = resultDouble + "";
}
return data;
}
} }
\ No newline at end of file
package com.phlx.anchorcollect.ble;
public interface OnBleNotifyListener {
void pushInputDialogLen();
}
...@@ -9,6 +9,8 @@ public interface OnBleSearchListener { ...@@ -9,6 +9,8 @@ public interface OnBleSearchListener {
*/ */
void onStartDiscovery(); void onStartDiscovery();
void onStopDiscovery();
/** /**
* 搜索到新设备 * 搜索到新设备
* *
...@@ -18,4 +20,5 @@ public interface OnBleSearchListener { ...@@ -18,4 +20,5 @@ public interface OnBleSearchListener {
void onBleError(String e); void onBleError(String e);
} }
package com.phlx.anchorcollect.ble; package com.phlx.anchorcollect.bt;
import android.bluetooth.BluetoothClass;
import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothDevice;
import android.os.Parcel; import android.os.Parcel;
import android.os.Parcelable; import android.os.Parcelable;
......
...@@ -11,7 +11,6 @@ import androidx.annotation.NonNull; ...@@ -11,7 +11,6 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import com.phlx.anchorcollect.Configs; import com.phlx.anchorcollect.Configs;
import com.phlx.anchorcollect.ble.BleService;
import com.phlx.anchorcollect.event.EventKey; import com.phlx.anchorcollect.event.EventKey;
import com.phlx.anchorcollect.event.EventMsg; import com.phlx.anchorcollect.event.EventMsg;
import com.phlx.anchorcollect.event.EventTag; import com.phlx.anchorcollect.event.EventTag;
......
...@@ -14,10 +14,10 @@ import org.greenrobot.greendao.identityscope.IdentityScopeType; ...@@ -14,10 +14,10 @@ import org.greenrobot.greendao.identityscope.IdentityScopeType;
// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. // THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.
/** /**
* Master of DAO (schema version 8): knows all DAOs. * Master of DAO (schema version 9): knows all DAOs.
*/ */
public class DaoMaster extends AbstractDaoMaster { public class DaoMaster extends AbstractDaoMaster {
public static final int SCHEMA_VERSION = 8; public static final int SCHEMA_VERSION = 9;
/** Creates underlying database table using DAOs. */ /** Creates underlying database table using DAOs. */
public static void createAllTables(Database db, boolean ifNotExists) { public static void createAllTables(Database db, boolean ifNotExists) {
......
...@@ -134,6 +134,21 @@ public class CattleResumeEntity extends BaseObservable implements Parcelable { ...@@ -134,6 +134,21 @@ public class CattleResumeEntity extends BaseObservable implements Parcelable {
/** 犊牛毛色 */ /** 犊牛毛色 */
private String colour; private String colour;
/**
* 是否有角
*/
private String isJiao;
/**
* 是否自繁
*/
private String isZifan;
/**
* 入场日期
*/
private String inTime;
/** 时间戳 */ /** 时间戳 */
private String inputTime; private String inputTime;
...@@ -226,6 +241,9 @@ public class CattleResumeEntity extends BaseObservable implements Parcelable { ...@@ -226,6 +241,9 @@ public class CattleResumeEntity extends BaseObservable implements Parcelable {
age = in.readInt(); age = in.readInt();
} }
colour = in.readString(); colour = in.readString();
isJiao = in.readString();
isZifan = in.readString();
inTime = in.readString();
inputTime = in.readString(); inputTime = in.readString();
if (in.readByte() == 0) { if (in.readByte() == 0) {
deptId = null; deptId = null;
...@@ -246,7 +264,7 @@ public class CattleResumeEntity extends BaseObservable implements Parcelable { ...@@ -246,7 +264,7 @@ public class CattleResumeEntity extends BaseObservable implements Parcelable {
remark = in.readString(); remark = in.readString();
} }
@Generated(hash = 952388002) @Generated(hash = 1472470825)
public CattleResumeEntity(Long unid, String registrationNo, String individualNo, String circleNo, public CattleResumeEntity(Long unid, String registrationNo, String individualNo, String circleNo,
String raiseType, String raiseVarieties, String birthdate, Double birthHeavy, String sex, String raiseType, String raiseVarieties, String birthdate, Double birthHeavy, String sex,
String birthDifficulty, String isTwins, String childTime, String grade, String fatherReg, String birthDifficulty, String isTwins, String childTime, String grade, String fatherReg,
...@@ -254,8 +272,9 @@ public class CattleResumeEntity extends BaseObservable implements Parcelable { ...@@ -254,8 +272,9 @@ public class CattleResumeEntity extends BaseObservable implements Parcelable {
String ffmNum, String fmfNum, String fmmNum, String mffNum, String mfmNum, String mmfNum, String ffmNum, String fmfNum, String fmmNum, String mffNum, String mfmNum, String mmfNum,
String mmmNum, Double fromMilkHeavy, String health, String junHeavy, String decAppScore, String mmmNum, Double fromMilkHeavy, String health, String junHeavy, String decAppScore,
String photo, String photoPath, String status, Long isOut, Integer age, String colour, String photo, String photoPath, String status, Long isOut, Integer age, String colour,
String inputTime, Long deptId, Long deptName, String uploadStatus, String uploadTime, String isJiao, String isZifan, String inTime, String inputTime, Long deptId, Long deptName,
String createBy, String createTime, String updateBy, String updateTime, String remark) { String uploadStatus, String uploadTime, String createBy, String createTime, String updateBy,
String updateTime, String remark) {
this.unid = unid; this.unid = unid;
this.registrationNo = registrationNo; this.registrationNo = registrationNo;
this.individualNo = individualNo; this.individualNo = individualNo;
...@@ -293,6 +312,9 @@ public class CattleResumeEntity extends BaseObservable implements Parcelable { ...@@ -293,6 +312,9 @@ public class CattleResumeEntity extends BaseObservable implements Parcelable {
this.isOut = isOut; this.isOut = isOut;
this.age = age; this.age = age;
this.colour = colour; this.colour = colour;
this.isJiao = isJiao;
this.isZifan = isZifan;
this.inTime = inTime;
this.inputTime = inputTime; this.inputTime = inputTime;
this.deptId = deptId; this.deptId = deptId;
this.deptName = deptName; this.deptName = deptName;
...@@ -369,6 +391,9 @@ public class CattleResumeEntity extends BaseObservable implements Parcelable { ...@@ -369,6 +391,9 @@ public class CattleResumeEntity extends BaseObservable implements Parcelable {
dest.writeInt(age); dest.writeInt(age);
} }
dest.writeString(colour); dest.writeString(colour);
dest.writeString(isJiao);
dest.writeString(isZifan);
dest.writeString(inTime);
dest.writeString(inputTime); dest.writeString(inputTime);
if (deptId == null) { if (deptId == null) {
dest.writeByte((byte) 0); dest.writeByte((byte) 0);
...@@ -704,6 +729,30 @@ public class CattleResumeEntity extends BaseObservable implements Parcelable { ...@@ -704,6 +729,30 @@ public class CattleResumeEntity extends BaseObservable implements Parcelable {
this.colour = colour; this.colour = colour;
} }
public String getIsJiao() {
return isJiao;
}
public void setIsJiao(String isJiao) {
this.isJiao = isJiao;
}
public String getIsZifan() {
return isZifan;
}
public void setIsZifan(String isZifan) {
this.isZifan = isZifan;
}
public String getInTime() {
return inTime;
}
public void setInTime(String inTime) {
this.inTime = inTime;
}
public String getInputTime() { public String getInputTime() {
return inputTime; return inputTime;
} }
...@@ -784,6 +833,62 @@ public class CattleResumeEntity extends BaseObservable implements Parcelable { ...@@ -784,6 +833,62 @@ public class CattleResumeEntity extends BaseObservable implements Parcelable {
this.remark = remark; this.remark = remark;
} }
@Override
public String toString() {
return "CattleResumeEntity{" +
"unid=" + unid +
", registrationNo='" + registrationNo + '\'' +
", individualNo='" + individualNo + '\'' +
", circleNo='" + circleNo + '\'' +
", raiseType='" + raiseType + '\'' +
", raiseVarieties='" + raiseVarieties + '\'' +
", birthdate='" + birthdate + '\'' +
", birthHeavy=" + birthHeavy +
", sex='" + sex + '\'' +
", birthDifficulty='" + birthDifficulty + '\'' +
", isTwins='" + isTwins + '\'' +
", childTime='" + childTime + '\'' +
", grade='" + grade + '\'' +
", fatherReg='" + fatherReg + '\'' +
", motherReg='" + motherReg + '\'' +
", ffNum='" + ffNum + '\'' +
", fmNum='" + fmNum + '\'' +
", mfNum='" + mfNum + '\'' +
", mmNum='" + mmNum + '\'' +
", fffNum='" + fffNum + '\'' +
", ffmNum='" + ffmNum + '\'' +
", fmfNum='" + fmfNum + '\'' +
", fmmNum='" + fmmNum + '\'' +
", mffNum='" + mffNum + '\'' +
", mfmNum='" + mfmNum + '\'' +
", mmfNum='" + mmfNum + '\'' +
", mmmNum='" + mmmNum + '\'' +
", fromMilkHeavy=" + fromMilkHeavy +
", health='" + health + '\'' +
", junHeavy='" + junHeavy + '\'' +
", decAppScore='" + decAppScore + '\'' +
", photo='" + photo + '\'' +
", photoPath='" + photoPath + '\'' +
", status='" + status + '\'' +
", isOut=" + isOut +
", age=" + age +
", colour='" + colour + '\'' +
", isJiao='" + isJiao + '\'' +
", isZifan='" + isZifan + '\'' +
", inTime='" + inTime + '\'' +
", inputTime='" + inputTime + '\'' +
", deptId=" + deptId +
", deptName=" + deptName +
", uploadStatus='" + uploadStatus + '\'' +
", uploadTime='" + uploadTime + '\'' +
", createBy='" + createBy + '\'' +
", createTime='" + createTime + '\'' +
", updateBy='" + updateBy + '\'' +
", updateTime='" + updateTime + '\'' +
", remark='" + remark + '\'' +
'}';
}
public void copyEntity(CattleResumeEntity cre) { public void copyEntity(CattleResumeEntity cre) {
this.unid= cre.getUnid(); this.unid= cre.getUnid();
...@@ -823,6 +928,9 @@ public class CattleResumeEntity extends BaseObservable implements Parcelable { ...@@ -823,6 +928,9 @@ public class CattleResumeEntity extends BaseObservable implements Parcelable {
this.isOut= cre.getIsOut(); this.isOut= cre.getIsOut();
this.age= cre.getAge(); this.age= cre.getAge();
this.colour= cre.getColour(); this.colour= cre.getColour();
this.isJiao= cre.getIsJiao();
this.isZifan= cre.getIsZifan();
this.inTime= cre.getInTime();
this.inputTime= cre.getInputTime(); this.inputTime= cre.getInputTime();
this.deptId= cre.getDeptId(); this.deptId= cre.getDeptId();
this.uploadStatus= cre.getUploadStatus(); this.uploadStatus= cre.getUploadStatus();
......
...@@ -18,6 +18,9 @@ public class EventTag { ...@@ -18,6 +18,9 @@ public class EventTag {
public final static String EVENT_WEIGHT_DATA_BASICS = "basics_weight_data_event";//正常 public final static String EVENT_WEIGHT_DATA_BASICS = "basics_weight_data_event";//正常
public final static String EVENT_WEIGHT_DATA_WEIGHT = "weight_weight_data_event";//正常 public final static String EVENT_WEIGHT_DATA_WEIGHT = "weight_weight_data_event";//正常
//蓝牙尺返回数据
public final static String EVENT_BLE_LEN = "ble_len_event";//
//蓝牙链接成功 //蓝牙链接成功
public final static String EVENT_BT_SUCC = "bt_succ_event";// public final static String EVENT_BT_SUCC = "bt_succ_event";//
......
package com.phlx.anchorcollect.ui.fragment; package com.phlx.anchorcollect.ui.fragment;
import static com.phlx.anchorcollect.Configs.uuid_service;
import static com.phlx.anchorcollect.Configs.uuid_write;
import android.Manifest; import android.Manifest;
import android.app.Dialog; import android.app.Dialog;
import android.os.Bundle; import android.os.Bundle;
import android.os.SystemClock;
import android.text.InputType; import android.text.InputType;
import android.util.Log; import android.util.Log;
import android.view.Gravity; import android.view.Gravity;
...@@ -30,6 +34,7 @@ import com.kongzue.dialogx.util.InputInfo; ...@@ -30,6 +34,7 @@ import com.kongzue.dialogx.util.InputInfo;
import com.kongzue.dialogx.util.TextInfo; import com.kongzue.dialogx.util.TextInfo;
import com.phlx.anchorcollect.Configs; import com.phlx.anchorcollect.Configs;
import com.phlx.anchorcollect.R; import com.phlx.anchorcollect.R;
import com.phlx.anchorcollect.ble.BleManagers;
import com.phlx.anchorcollect.data.VMFactory; import com.phlx.anchorcollect.data.VMFactory;
import com.phlx.anchorcollect.databinding.FragmentPerformanceBinding; import com.phlx.anchorcollect.databinding.FragmentPerformanceBinding;
import com.phlx.anchorcollect.entity.DictEntity; import com.phlx.anchorcollect.entity.DictEntity;
...@@ -55,6 +60,8 @@ public class PerformanceFragment extends BaseFragment<FragmentPerformanceBinding ...@@ -55,6 +60,8 @@ public class PerformanceFragment extends BaseFragment<FragmentPerformanceBinding
private ImagePicker mImagePicker; private ImagePicker mImagePicker;
private InputDialog inputDialog;
private static class SingletonClassInstance { private static class SingletonClassInstance {
private static final PerformanceFragment instance = new PerformanceFragment(); private static final PerformanceFragment instance = new PerformanceFragment();
} }
...@@ -163,6 +170,15 @@ public class PerformanceFragment extends BaseFragment<FragmentPerformanceBinding ...@@ -163,6 +170,15 @@ public class PerformanceFragment extends BaseFragment<FragmentPerformanceBinding
} }
}); });
viewModel.onInputDialogEvent.observe(getActivity(), new Observer<String>() {
@Override
public void onChanged(String s) {
if(inputDialog!=null) {
inputDialog.setInputText(s);
}
}
});
} }
...@@ -273,7 +289,7 @@ public class PerformanceFragment extends BaseFragment<FragmentPerformanceBinding ...@@ -273,7 +289,7 @@ public class PerformanceFragment extends BaseFragment<FragmentPerformanceBinding
int finalColumnSize = columnSize; int finalColumnSize = columnSize;
int finalColumnPointSize = columnPointSize; int finalColumnPointSize = columnPointSize;
InputDialog.show(uiParamEntity.getColumnComment(), "", "确定", "取消") inputDialog = InputDialog.show(uiParamEntity.getColumnComment(), "", "确定", "取消")
.setCancelable(false) .setCancelable(false)
.setInputInfo(new InputInfo().setTextInfo(textInfo).setInputType(finalInputType).setMAX_LENGTH(columnSize)) .setInputInfo(new InputInfo().setTextInfo(textInfo).setInputType(finalInputType).setMAX_LENGTH(columnSize))
.setTitleTextInfo(textInfo) .setTitleTextInfo(textInfo)
......
...@@ -188,7 +188,9 @@ public class BasicsCollectVM extends BaseViewModel<Repository> implements OnInve ...@@ -188,7 +188,9 @@ public class BasicsCollectVM extends BaseViewModel<Repository> implements OnInve
// imgFile = new File(imgUrl); // imgFile = new File(imgUrl);
int i = 0; int i = 0;
dateFormat = new SimpleDateFormat("yyyy-MM-dd");
for (GenTableColumn gtc : Configs.cattleresume) { for (GenTableColumn gtc : Configs.cattleresume) {
LoginInfoUtils.setGenTableColumnDefault(gtc, dateFormat);
if (i < 4) { if (i < 4) {
uiList.add(gtc); uiList.add(gtc);
} else { } else {
...@@ -557,10 +559,9 @@ public class BasicsCollectVM extends BaseViewModel<Repository> implements OnInve ...@@ -557,10 +559,9 @@ public class BasicsCollectVM extends BaseViewModel<Repository> implements OnInve
queryGainWeight(); queryGainWeight();
String[] filedName = EntityUtils.getFiledName(result.get(0)); String[] filedName = EntityUtils.getFiledName(result.get(0));
dateFormat = new SimpleDateFormat("yyyy-MM-dd");
for (String name : filedName) { for (String name : filedName) {
for (GenTableColumn gtc : Configs.cattleresume) { for (GenTableColumn gtc : Configs.cattleresume) {
if (name.equals(gtc.getJavaField())) { if (name.equals(gtc.getJavaField())) {
try { try {
// Log.e("key:", name); // Log.e("key:", name);
...@@ -587,6 +588,7 @@ public class BasicsCollectVM extends BaseViewModel<Repository> implements OnInve ...@@ -587,6 +588,7 @@ public class BasicsCollectVM extends BaseViewModel<Repository> implements OnInve
e.printStackTrace(); e.printStackTrace();
} }
} }
LoginInfoUtils.setGenTableColumnDefault(gtc, dateFormat);
} }
} }
...@@ -623,6 +625,7 @@ public class BasicsCollectVM extends BaseViewModel<Repository> implements OnInve ...@@ -623,6 +625,7 @@ public class BasicsCollectVM extends BaseViewModel<Repository> implements OnInve
break; break;
} }
} }
jsonObject.addProperty(gtc.getJavaField(), gtc.getContent()); jsonObject.addProperty(gtc.getJavaField(), gtc.getContent());
} }
...@@ -649,6 +652,12 @@ public class BasicsCollectVM extends BaseViewModel<Repository> implements OnInve ...@@ -649,6 +652,12 @@ public class BasicsCollectVM extends BaseViewModel<Repository> implements OnInve
// cattleResumeEntity.setPhoto(BaseImageUtils.bitmapToString(Configs.tempCattleResume.getPhotoPath(), // cattleResumeEntity.setPhoto(BaseImageUtils.bitmapToString(Configs.tempCattleResume.getPhotoPath(),
// getApplication())); // getApplication()));
// } // }
//如果是自繁默认成出生日期
if ("Y".equals(cattleResumeEntity.getIsZifan()) && !StringUtils.isEmpty(cattleResumeEntity.getBirthdate())) {
cattleResumeEntity.setInTime(cattleResumeEntity.getBirthdate());
}
//设置饲养类型为02
cattleResumeEntity.setRaiseType("02");
cattleResumeEntity.setPhotoPath(Configs.tempCattleResume.getPhotoPath()); cattleResumeEntity.setPhotoPath(Configs.tempCattleResume.getPhotoPath());
cattleResumeEntity.setDeptId(Long.parseLong(SPUtils.getInstance().getString(Configs.SP_DEPT_ID))); cattleResumeEntity.setDeptId(Long.parseLong(SPUtils.getInstance().getString(Configs.SP_DEPT_ID)));
cattleResumeEntity.setRegistrationNo(rfid.get()); cattleResumeEntity.setRegistrationNo(rfid.get());
...@@ -657,9 +666,9 @@ public class BasicsCollectVM extends BaseViewModel<Repository> implements OnInve ...@@ -657,9 +666,9 @@ public class BasicsCollectVM extends BaseViewModel<Repository> implements OnInve
cattleResumeEntity.setUploadStatus("0"); cattleResumeEntity.setUploadStatus("0");
//添加冻精系谱到牛只系谱 //添加冻精系谱到牛只系谱
if(!StringUtils.isEmpty(cattleResumeEntity.getFatherReg())){ if (!StringUtils.isEmpty(cattleResumeEntity.getFatherReg())) {
FrozenSemenEntity frozenSemenEntity = LoginInfoUtils.getFrozenSemenForName(cattleResumeEntity.getFatherReg()); FrozenSemenEntity frozenSemenEntity = LoginInfoUtils.getFrozenSemenForName(cattleResumeEntity.getFatherReg());
if(frozenSemenEntity!=null){ if (frozenSemenEntity != null) {
cattleResumeEntity.setFfNum(frozenSemenEntity.getFuCode()); cattleResumeEntity.setFfNum(frozenSemenEntity.getFuCode());
cattleResumeEntity.setFmNum(frozenSemenEntity.getMuCode()); cattleResumeEntity.setFmNum(frozenSemenEntity.getMuCode());
cattleResumeEntity.setFffNum(frozenSemenEntity.getZfCode()); cattleResumeEntity.setFffNum(frozenSemenEntity.getZfCode());
...@@ -862,9 +871,11 @@ public class BasicsCollectVM extends BaseViewModel<Repository> implements OnInve ...@@ -862,9 +871,11 @@ public class BasicsCollectVM extends BaseViewModel<Repository> implements OnInve
remarkParamEntity.setContent(""); remarkParamEntity.setContent("");
remarkParamEntity.setShowName(""); remarkParamEntity.setShowName("");
currentParamEntity = new GenTableColumn(); currentParamEntity = new GenTableColumn();
dateFormat = new SimpleDateFormat("yyyy-MM-dd");
for (GenTableColumn gtc : Configs.cattleresume) { for (GenTableColumn gtc : Configs.cattleresume) {
gtc.setShowName(""); gtc.setShowName("");
gtc.setContent(""); gtc.setContent("");
LoginInfoUtils.setGenTableColumnDefault(gtc, dateFormat);
} }
} }
......
...@@ -32,6 +32,7 @@ import com.phlx.anchorcollect.entity.PerformanceEntity; ...@@ -32,6 +32,7 @@ import com.phlx.anchorcollect.entity.PerformanceEntity;
import com.phlx.anchorcollect.ui.fragment.list.CollectGridItem; import com.phlx.anchorcollect.ui.fragment.list.CollectGridItem;
import com.phlx.anchorcollect.util.DateUtils; import com.phlx.anchorcollect.util.DateUtils;
import com.phlx.anchorcollect.util.EntityUtils; import com.phlx.anchorcollect.util.EntityUtils;
import com.phlx.anchorcollect.util.LoginInfoUtils;
import org.greenrobot.greendao.query.QueryBuilder; import org.greenrobot.greendao.query.QueryBuilder;
...@@ -114,7 +115,9 @@ public class BreedingRecordVM extends BaseViewModel<Repository> { ...@@ -114,7 +115,9 @@ public class BreedingRecordVM extends BaseViewModel<Repository> {
CollectGridItem cgi = new CollectGridItem(this, gtc, Configs.BREEDING_RECORD); CollectGridItem cgi = new CollectGridItem(this, gtc, Configs.BREEDING_RECORD);
observableList.add(cgi); observableList.add(cgi);
} }
dateFormat = new SimpleDateFormat("yyyy-MM-dd");
for (GenTableColumn gtc : Configs.cattlematingDetaill) { for (GenTableColumn gtc : Configs.cattlematingDetaill) {
LoginInfoUtils.setGenTableColumnDefault(gtc, dateFormat);
CollectGridItem cgi = new CollectGridItem(this, gtc, Configs.BREEDING_RECORD_DETAIL); CollectGridItem cgi = new CollectGridItem(this, gtc, Configs.BREEDING_RECORD_DETAIL);
detailObservableList.add(cgi); detailObservableList.add(cgi);
} }
...@@ -258,10 +261,9 @@ public class BreedingRecordVM extends BaseViewModel<Repository> { ...@@ -258,10 +261,9 @@ public class BreedingRecordVM extends BaseViewModel<Repository> {
remarkParamEntity.setContent(brdEntity.getRemark()); remarkParamEntity.setContent(brdEntity.getRemark());
String[] filedName = EntityUtils.getFiledName(brdEntity); String[] filedName = EntityUtils.getFiledName(brdEntity);
dateFormat = new SimpleDateFormat("yyyy-MM-dd");
for (String name : filedName) { for (String name : filedName) {
for (GenTableColumn gtc : Configs.cattlematingDetaill) { for (GenTableColumn gtc : Configs.cattlematingDetaill) {
if (name.equals(gtc.getJavaField())) { if (name.equals(gtc.getJavaField())) {
try { try {
Object fieldValueByName = EntityUtils.getFieldValueByName(name, brdEntity); Object fieldValueByName = EntityUtils.getFieldValueByName(name, brdEntity);
...@@ -286,6 +288,7 @@ public class BreedingRecordVM extends BaseViewModel<Repository> { ...@@ -286,6 +288,7 @@ public class BreedingRecordVM extends BaseViewModel<Repository> {
e.printStackTrace(); e.printStackTrace();
} }
} }
LoginInfoUtils.setGenTableColumnDefault(gtc, dateFormat);
} }
} }
onNotifyAllEvent.setValue(false); onNotifyAllEvent.setValue(false);
...@@ -605,6 +608,7 @@ public class BreedingRecordVM extends BaseViewModel<Repository> { ...@@ -605,6 +608,7 @@ public class BreedingRecordVM extends BaseViewModel<Repository> {
remarkParamEntity.setShowName(""); remarkParamEntity.setShowName("");
currentParamEntity = new GenTableColumn(); currentParamEntity = new GenTableColumn();
dateFormat = new SimpleDateFormat("yyyy-MM-dd");
for (GenTableColumn gtc : Configs.cattlematingDetaill) { for (GenTableColumn gtc : Configs.cattlematingDetaill) {
gtc.setShowName(""); gtc.setShowName("");
gtc.setContent(""); gtc.setContent("");
...@@ -612,6 +616,7 @@ public class BreedingRecordVM extends BaseViewModel<Repository> { ...@@ -612,6 +616,7 @@ public class BreedingRecordVM extends BaseViewModel<Repository> {
for (GenTableColumn gtc : Configs.cattlematingDetaillList) { for (GenTableColumn gtc : Configs.cattlematingDetaillList) {
gtc.setShowName(""); gtc.setShowName("");
gtc.setContent(""); gtc.setContent("");
LoginInfoUtils.setGenTableColumnDefault(gtc, dateFormat);
} }
} }
} }
...@@ -35,6 +35,7 @@ import com.phlx.anchorcollect.entity.MedicalRecordEntity; ...@@ -35,6 +35,7 @@ import com.phlx.anchorcollect.entity.MedicalRecordEntity;
import com.phlx.anchorcollect.entity.PerformanceEntity; import com.phlx.anchorcollect.entity.PerformanceEntity;
import com.phlx.anchorcollect.ui.fragment.list.CollectGridItem; import com.phlx.anchorcollect.ui.fragment.list.CollectGridItem;
import com.phlx.anchorcollect.util.EntityUtils; import com.phlx.anchorcollect.util.EntityUtils;
import com.phlx.anchorcollect.util.LoginInfoUtils;
import com.phlx.anchorcollect.util.StringUtil; import com.phlx.anchorcollect.util.StringUtil;
import org.greenrobot.greendao.query.QueryBuilder; import org.greenrobot.greendao.query.QueryBuilder;
...@@ -104,7 +105,9 @@ public class ImmunRecordVM extends BaseViewModel<Repository> { ...@@ -104,7 +105,9 @@ public class ImmunRecordVM extends BaseViewModel<Repository> {
+ "anchorCiq" + tag + ".jpg"; + "anchorCiq" + tag + ".jpg";
imgFile = new File(imgUrl); imgFile = new File(imgUrl);
dateFormat = new SimpleDateFormat("yyyy-MM-dd");
for (GenTableColumn gtc : Configs.immunebatch) { for (GenTableColumn gtc : Configs.immunebatch) {
LoginInfoUtils.setGenTableColumnDefault(gtc, dateFormat);
CollectGridItem cgi = new CollectGridItem(this, gtc, Configs.IMMUN_RECORD); CollectGridItem cgi = new CollectGridItem(this, gtc, Configs.IMMUN_RECORD);
observableList.add(cgi); observableList.add(cgi);
} }
...@@ -127,10 +130,9 @@ public class ImmunRecordVM extends BaseViewModel<Repository> { ...@@ -127,10 +130,9 @@ public class ImmunRecordVM extends BaseViewModel<Repository> {
remarkParamEntity.setContent(immuneBatchEntity.getRemark()); remarkParamEntity.setContent(immuneBatchEntity.getRemark());
String[] filedName = EntityUtils.getFiledName(immuneBatchEntity); String[] filedName = EntityUtils.getFiledName(immuneBatchEntity);
dateFormat = new SimpleDateFormat("yyyy-MM-dd");
for (String name : filedName) { for (String name : filedName) {
for (GenTableColumn gtc : Configs.immunebatch) { for (GenTableColumn gtc : Configs.immunebatch) {
if (name.equals(gtc.getJavaField())) { if (name.equals(gtc.getJavaField())) {
try { try {
Object fieldValueByName = EntityUtils.getFieldValueByName(name, immuneBatchEntity); Object fieldValueByName = EntityUtils.getFieldValueByName(name, immuneBatchEntity);
...@@ -155,6 +157,7 @@ public class ImmunRecordVM extends BaseViewModel<Repository> { ...@@ -155,6 +157,7 @@ public class ImmunRecordVM extends BaseViewModel<Repository> {
e.printStackTrace(); e.printStackTrace();
} }
} }
LoginInfoUtils.setGenTableColumnDefault(gtc, dateFormat);
} }
onNotifyAllEvent.setValue(false); onNotifyAllEvent.setValue(false);
...@@ -361,9 +364,11 @@ public class ImmunRecordVM extends BaseViewModel<Repository> { ...@@ -361,9 +364,11 @@ public class ImmunRecordVM extends BaseViewModel<Repository> {
remarkParamEntity.setShowName(""); remarkParamEntity.setShowName("");
currentParamEntity = new GenTableColumn(); currentParamEntity = new GenTableColumn();
uuid = 0; uuid = 0;
dateFormat = new SimpleDateFormat("yyyy-MM-dd");
for (GenTableColumn gtc : Configs.immunebatch) { for (GenTableColumn gtc : Configs.immunebatch) {
gtc.setShowName(""); gtc.setShowName("");
gtc.setContent(""); gtc.setContent("");
LoginInfoUtils.setGenTableColumnDefault(gtc, dateFormat);
} }
} }
......
...@@ -27,6 +27,7 @@ import com.phlx.anchorcollect.entity.MedicalRecordEntity; ...@@ -27,6 +27,7 @@ import com.phlx.anchorcollect.entity.MedicalRecordEntity;
import com.phlx.anchorcollect.entity.PerformanceEntity; import com.phlx.anchorcollect.entity.PerformanceEntity;
import com.phlx.anchorcollect.ui.fragment.list.CollectGridItem; import com.phlx.anchorcollect.ui.fragment.list.CollectGridItem;
import com.phlx.anchorcollect.util.EntityUtils; import com.phlx.anchorcollect.util.EntityUtils;
import com.phlx.anchorcollect.util.LoginInfoUtils;
import org.greenrobot.greendao.query.QueryBuilder; import org.greenrobot.greendao.query.QueryBuilder;
...@@ -93,7 +94,9 @@ public class MedicalRecordVM extends BaseViewModel<Repository> { ...@@ -93,7 +94,9 @@ public class MedicalRecordVM extends BaseViewModel<Repository> {
+ "anchorCiq" + tag + ".jpg"; + "anchorCiq" + tag + ".jpg";
imgFile = new File(imgUrl); imgFile = new File(imgUrl);
dateFormat = new SimpleDateFormat("yyyy-MM-dd");
for (GenTableColumn gtc : Configs.medicalrecords) { for (GenTableColumn gtc : Configs.medicalrecords) {
LoginInfoUtils.setGenTableColumnDefault(gtc, dateFormat);
CollectGridItem cgi = new CollectGridItem(this, gtc, Configs.TREATMENT_RECORD); CollectGridItem cgi = new CollectGridItem(this, gtc, Configs.TREATMENT_RECORD);
observableList.add(cgi); observableList.add(cgi);
} }
...@@ -116,10 +119,9 @@ public class MedicalRecordVM extends BaseViewModel<Repository> { ...@@ -116,10 +119,9 @@ public class MedicalRecordVM extends BaseViewModel<Repository> {
remarkParamEntity.setContent(medicalRecordEntity.getRemark()); remarkParamEntity.setContent(medicalRecordEntity.getRemark());
String[] filedName = EntityUtils.getFiledName(medicalRecordEntity); String[] filedName = EntityUtils.getFiledName(medicalRecordEntity);
dateFormat = new SimpleDateFormat("yyyy-MM-dd");
for (String name : filedName) { for (String name : filedName) {
for (GenTableColumn gtc : Configs.medicalrecords) { for (GenTableColumn gtc : Configs.medicalrecords) {
if (name.equals(gtc.getJavaField())) { if (name.equals(gtc.getJavaField())) {
try { try {
Object fieldValueByName = EntityUtils.getFieldValueByName(name, medicalRecordEntity); Object fieldValueByName = EntityUtils.getFieldValueByName(name, medicalRecordEntity);
...@@ -144,6 +146,7 @@ public class MedicalRecordVM extends BaseViewModel<Repository> { ...@@ -144,6 +146,7 @@ public class MedicalRecordVM extends BaseViewModel<Repository> {
e.printStackTrace(); e.printStackTrace();
} }
} }
LoginInfoUtils.setGenTableColumnDefault(gtc, dateFormat);
} }
onNotifyAllEvent.setValue(false); onNotifyAllEvent.setValue(false);
...@@ -298,9 +301,11 @@ public class MedicalRecordVM extends BaseViewModel<Repository> { ...@@ -298,9 +301,11 @@ public class MedicalRecordVM extends BaseViewModel<Repository> {
remarkParamEntity.setShowName(""); remarkParamEntity.setShowName("");
currentParamEntity = new GenTableColumn(); currentParamEntity = new GenTableColumn();
uuid = 0; uuid = 0;
dateFormat = new SimpleDateFormat("yyyy-MM-dd");
for (GenTableColumn gtc : Configs.medicalrecords) { for (GenTableColumn gtc : Configs.medicalrecords) {
gtc.setShowName(""); gtc.setShowName("");
gtc.setContent(""); gtc.setContent("");
LoginInfoUtils.setGenTableColumnDefault(gtc, dateFormat);
} }
} }
......
package com.phlx.anchorcollect.ui.fragment.vm; package com.phlx.anchorcollect.ui.fragment.vm;
import android.annotation.SuppressLint;
import android.app.Application; import android.app.Application;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.os.Environment; import android.os.Environment;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.databinding.ObservableArrayList; import androidx.databinding.ObservableArrayList;
...@@ -25,9 +29,12 @@ import com.phlx.anchorcollect.entity.BreedingRecordDetailEntity; ...@@ -25,9 +29,12 @@ import com.phlx.anchorcollect.entity.BreedingRecordDetailEntity;
import com.phlx.anchorcollect.entity.DictEntity; import com.phlx.anchorcollect.entity.DictEntity;
import com.phlx.anchorcollect.entity.GenTableColumn; import com.phlx.anchorcollect.entity.GenTableColumn;
import com.phlx.anchorcollect.entity.PerformanceEntity; import com.phlx.anchorcollect.entity.PerformanceEntity;
import com.phlx.anchorcollect.event.EventMsg;
import com.phlx.anchorcollect.event.EventTag;
import com.phlx.anchorcollect.ui.fragment.list.CollectGridItem; import com.phlx.anchorcollect.ui.fragment.list.CollectGridItem;
import com.phlx.anchorcollect.util.DateUtils; import com.phlx.anchorcollect.util.DateUtils;
import com.phlx.anchorcollect.util.EntityUtils; import com.phlx.anchorcollect.util.EntityUtils;
import com.phlx.anchorcollect.util.LoginInfoUtils;
import com.phlx.anchorcollect.util.StringUtil; import com.phlx.anchorcollect.util.StringUtil;
import org.greenrobot.greendao.query.QueryBuilder; import org.greenrobot.greendao.query.QueryBuilder;
...@@ -39,9 +46,13 @@ import java.util.Date; ...@@ -39,9 +46,13 @@ import java.util.Date;
import java.util.List; import java.util.List;
import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.IdUtil;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import me.goldze.mvvmhabit.base.BaseViewModel; import me.goldze.mvvmhabit.base.BaseViewModel;
import me.goldze.mvvmhabit.binding.command.BindingAction; import me.goldze.mvvmhabit.binding.command.BindingAction;
import me.goldze.mvvmhabit.binding.command.BindingCommand; import me.goldze.mvvmhabit.binding.command.BindingCommand;
import me.goldze.mvvmhabit.bus.RxBus;
import me.goldze.mvvmhabit.bus.RxSubscriptions;
import me.goldze.mvvmhabit.bus.event.SingleLiveEvent; import me.goldze.mvvmhabit.bus.event.SingleLiveEvent;
import me.goldze.mvvmhabit.utils.SPUtils; import me.goldze.mvvmhabit.utils.SPUtils;
import me.goldze.mvvmhabit.utils.StringUtils; import me.goldze.mvvmhabit.utils.StringUtils;
...@@ -50,6 +61,9 @@ import me.tatarka.bindingcollectionadapter2.ItemBinding; ...@@ -50,6 +61,9 @@ import me.tatarka.bindingcollectionadapter2.ItemBinding;
public class PerformanceVM extends BaseViewModel<Repository> { public class PerformanceVM extends BaseViewModel<Repository> {
private Disposable lengthBus;
public Drawable drawableImg; public Drawable drawableImg;
//照片路径 //照片路径
private String imgUrl; private String imgUrl;
...@@ -73,6 +87,7 @@ public class PerformanceVM extends BaseViewModel<Repository> { ...@@ -73,6 +87,7 @@ public class PerformanceVM extends BaseViewModel<Repository> {
public SingleLiveEvent<Boolean> onNotifyAllEvent = new SingleLiveEvent<>();//true是清空页面 public SingleLiveEvent<Boolean> onNotifyAllEvent = new SingleLiveEvent<>();//true是清空页面
public SingleLiveEvent<String> onShowDialogEvent = new SingleLiveEvent<>();//弹窗提示 public SingleLiveEvent<String> onShowDialogEvent = new SingleLiveEvent<>();//弹窗提示
public SingleLiveEvent<String> onInputDialogEvent = new SingleLiveEvent<>();//设置输入框的值
public ObservableField<String> tag = new ObservableField<>(""); public ObservableField<String> tag = new ObservableField<>("");
public ObservableField<String> weight = new ObservableField<>("125.5"); public ObservableField<String> weight = new ObservableField<>("125.5");
...@@ -103,6 +118,8 @@ public class PerformanceVM extends BaseViewModel<Repository> { ...@@ -103,6 +118,8 @@ public class PerformanceVM extends BaseViewModel<Repository> {
gtc.setShowName(Configs.tempWeight + ""); gtc.setShowName(Configs.tempWeight + "");
gtc.setContent(Configs.tempWeight + ""); gtc.setContent(Configs.tempWeight + "");
} }
dateFormat = new SimpleDateFormat("yyyy-MM-dd");
LoginInfoUtils.setGenTableColumnDefault(gtc, dateFormat);
CollectGridItem cgi = new CollectGridItem(this, gtc, Configs.SIGN_MEASURE); CollectGridItem cgi = new CollectGridItem(this, gtc, Configs.SIGN_MEASURE);
observableList.add(cgi); observableList.add(cgi);
...@@ -364,4 +381,42 @@ public class PerformanceVM extends BaseViewModel<Repository> { ...@@ -364,4 +381,42 @@ public class PerformanceVM extends BaseViewModel<Repository> {
} }
@Override
public void registerRxBus() {
super.registerRxBus();
//蓝牙尺返回数据
lengthBus =
RxBus.getDefault().toObservable(EventMsg.class)
.observeOn(AndroidSchedulers.mainThread()) // 确保在主线程中执行
.subscribe(eventType -> {
if (eventType.getAction().equals(EventTag.EVENT_BLE_LEN)) {
// cn.wandersnail.commons.util.ToastUtils.showShort("长度数据获取成功");
onInputDialogEvent.setValue(eventType.getObj().toString());
//用于屏蔽普通蓝牙信息
}else if(eventType.getAction().equals(EventTag.EVENT_BT_SUCC)){
}else if(eventType.getAction().equals(EventTag.EVENT_BT_FAIL)){
} else {
cn.wandersnail.commons.util.ToastUtils.showShort("长度数据获取失败");
}
});
RxSubscriptions.add(lengthBus);
}
@Override
public void removeRxBus() {
super.removeRxBus();
RxSubscriptions.remove(lengthBus);
}
@SuppressLint("HandlerLeak")
private Handler myHandler = new Handler(Looper.getMainLooper()){
@Override
public void handleMessage(@NonNull Message msg) {
super.handleMessage(msg);
onInputDialogEvent.setValue(msg.obj.toString());
}
};
} }
...@@ -40,6 +40,7 @@ import com.phlx.anchorcollect.event.EventMsg; ...@@ -40,6 +40,7 @@ import com.phlx.anchorcollect.event.EventMsg;
import com.phlx.anchorcollect.event.EventTag; import com.phlx.anchorcollect.event.EventTag;
import com.phlx.anchorcollect.ui.fragment.list.CollectGridItem; import com.phlx.anchorcollect.ui.fragment.list.CollectGridItem;
import com.phlx.anchorcollect.util.EntityUtils; import com.phlx.anchorcollect.util.EntityUtils;
import com.phlx.anchorcollect.util.LoginInfoUtils;
import com.phlx.anchorcollect.util.TextUtil; import com.phlx.anchorcollect.util.TextUtil;
import com.uhf.structures.InventoryData; import com.uhf.structures.InventoryData;
import com.uhf.structures.OnInventoryListener; import com.uhf.structures.OnInventoryListener;
...@@ -178,6 +179,7 @@ public class WeightManVM extends BaseViewModel<Repository> implements OnInventor ...@@ -178,6 +179,7 @@ public class WeightManVM extends BaseViewModel<Repository> implements OnInventor
gtc.setShowName(dateFormat.format(new Date())); gtc.setShowName(dateFormat.format(new Date()));
} }
} }
LoginInfoUtils.setGenTableColumnDefault(gtc, dateFormat);
if (i < 4) { if (i < 4) {
uiList.add(gtc); uiList.add(gtc);
} else { } else {
...@@ -510,13 +512,11 @@ public class WeightManVM extends BaseViewModel<Repository> implements OnInventor ...@@ -510,13 +512,11 @@ public class WeightManVM extends BaseViewModel<Repository> implements OnInventor
queryGainWeight();//刷新一下增重数据 queryGainWeight();//刷新一下增重数据
String[] filedName = EntityUtils.getFiledName(result.get(0)); String[] filedName = EntityUtils.getFiledName(result.get(0));
dateFormat = new SimpleDateFormat("yyyy-MM-dd");
for (String name : filedName) { for (String name : filedName) {
for (GenTableColumn gtc : Configs.weightMan) { for (GenTableColumn gtc : Configs.weightMan) {
if (gtc.getHtmlType() != null && gtc.getHtmlType().equals("datetime")) { if (gtc.getHtmlType() != null && gtc.getHtmlType().equals("datetime")) {
if (gtc.getContent() == null || "".equals(gtc.getContent())) { if (gtc.getContent() == null || "".equals(gtc.getContent())) {
dateFormat = new SimpleDateFormat("yyyy-MM-dd");
gtc.setContent(dateFormat.format(new Date())); gtc.setContent(dateFormat.format(new Date()));
gtc.setShowName(dateFormat.format(new Date())); gtc.setShowName(dateFormat.format(new Date()));
} }
...@@ -546,6 +546,7 @@ public class WeightManVM extends BaseViewModel<Repository> implements OnInventor ...@@ -546,6 +546,7 @@ public class WeightManVM extends BaseViewModel<Repository> implements OnInventor
e.printStackTrace(); e.printStackTrace();
} }
} }
LoginInfoUtils.setGenTableColumnDefault(gtc, dateFormat);
} }
} }
...@@ -715,9 +716,11 @@ public class WeightManVM extends BaseViewModel<Repository> implements OnInventor ...@@ -715,9 +716,11 @@ public class WeightManVM extends BaseViewModel<Repository> implements OnInventor
remarkParamEntity.setContent(""); remarkParamEntity.setContent("");
remarkParamEntity.setShowName(""); remarkParamEntity.setShowName("");
currentParamEntity = new GenTableColumn(); currentParamEntity = new GenTableColumn();
dateFormat = new SimpleDateFormat("yyyy-MM-dd");
for (GenTableColumn gtc : Configs.weightMan) { for (GenTableColumn gtc : Configs.weightMan) {
gtc.setShowName(""); gtc.setShowName("");
gtc.setContent(""); gtc.setContent("");
LoginInfoUtils.setGenTableColumnDefault(gtc, dateFormat);
} }
} }
} }
...@@ -81,8 +81,8 @@ public class LoginVM extends BaseViewModel<Repository> { ...@@ -81,8 +81,8 @@ public class LoginVM extends BaseViewModel<Repository> {
userName.set(model.getUserName()); userName.set(model.getUserName());
password.set(model.getPassword()); password.set(model.getPassword());
userName.set("13664793087"); // userName.set("13664793087");
password.set("Abgq3087@"); // password.set("Abgq3087@");
// userName.set("15047962756"); // userName.set("15047962756");
// password.set("Tpsq2756*"); // password.set("Tpsq2756*");
// userName.set("13847913985"); // userName.set("13847913985");
......
package com.phlx.anchorcollect.ui.setting;
import androidx.annotation.NonNull;
import androidx.databinding.ObservableField;
import com.phlx.anchorcollect.bt.BluetoothEntity;
import cn.wandersnail.ble.Device;
import me.goldze.mvvmhabit.base.ItemViewModel;
import me.goldze.mvvmhabit.binding.command.BindingAction;
import me.goldze.mvvmhabit.binding.command.BindingCommand;
public class BleItem extends ItemViewModel<SettingVM> {
public ObservableField<Device> entity = new ObservableField<>();
public BleItem(@NonNull SettingVM viewModel, Device entity) {
super(viewModel);
this.entity.set(entity);
}
//条目的点击事件
public BindingCommand itemClick = new BindingCommand(new BindingAction() {
@Override
public void call() {
viewModel.bleItemOnClick(entity.get());
}
});
}
...@@ -3,17 +3,17 @@ package com.phlx.anchorcollect.ui.setting; ...@@ -3,17 +3,17 @@ package com.phlx.anchorcollect.ui.setting;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.databinding.ObservableField; import androidx.databinding.ObservableField;
import com.phlx.anchorcollect.ble.BluetoothEntity; import com.phlx.anchorcollect.bt.BluetoothEntity;
import me.goldze.mvvmhabit.base.ItemViewModel; import me.goldze.mvvmhabit.base.ItemViewModel;
import me.goldze.mvvmhabit.binding.command.BindingAction; import me.goldze.mvvmhabit.binding.command.BindingAction;
import me.goldze.mvvmhabit.binding.command.BindingCommand; import me.goldze.mvvmhabit.binding.command.BindingCommand;
public class BLEItem extends ItemViewModel<SettingVM> { public class BluetoothItem extends ItemViewModel<SettingVM> {
public ObservableField<BluetoothEntity> entity = new ObservableField<>(); public ObservableField<BluetoothEntity> entity = new ObservableField<>();
public BLEItem(@NonNull SettingVM viewModel, BluetoothEntity entity) { public BluetoothItem(@NonNull SettingVM viewModel, BluetoothEntity entity) {
super(viewModel); super(viewModel);
this.entity.set(entity); this.entity.set(entity);
} }
......
...@@ -88,6 +88,13 @@ public class SettingActivity extends BaseActivity<ActivitySettingBinding, Settin ...@@ -88,6 +88,13 @@ public class SettingActivity extends BaseActivity<ActivitySettingBinding, Settin
finish(); finish();
} }
}); });
viewModel.closeDialogEvent.observe(this, new Observer<String>() {
@Override
public void onChanged(String s) {
dismissDialog();
}
});
} }
......
...@@ -3,10 +3,15 @@ package com.phlx.anchorcollect.util; ...@@ -3,10 +3,15 @@ package com.phlx.anchorcollect.util;
import com.phlx.anchorcollect.Configs; import com.phlx.anchorcollect.Configs;
import com.phlx.anchorcollect.entity.DictEntity; import com.phlx.anchorcollect.entity.DictEntity;
import com.phlx.anchorcollect.entity.FrozenSemenEntity; import com.phlx.anchorcollect.entity.FrozenSemenEntity;
import com.phlx.anchorcollect.entity.GenTableColumn;
import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date;
import java.util.List; import java.util.List;
import me.goldze.mvvmhabit.utils.StringUtils;
public class LoginInfoUtils { public class LoginInfoUtils {
public static List<String> getDistNameList(String type) { public static List<String> getDistNameList(String type) {
...@@ -47,5 +52,23 @@ public class LoginInfoUtils { ...@@ -47,5 +52,23 @@ public class LoginInfoUtils {
return null; return null;
} }
public static void setGenTableColumnDefault(GenTableColumn gtc, SimpleDateFormat dateFormat){
//增加单选默认值
if (StringUtils.isEmpty(gtc.getContent()) && (gtc.getHtmlType().equals("select") || gtc.getHtmlType().equals("radio"))) {
List<DictEntity> dictEntities = LoginInfoUtils.getDistList(gtc.getDictType());
for (int i = 0; i < dictEntities.size(); i++) {
if ("Y".equals(dictEntities.get(i).getIsDefault())) {
gtc.setContent(dictEntities.get(i).getDictValue());
gtc.setShowName(dictEntities.get(i).getDictLabel());
}
}
}
//增加时间默认值
if (StringUtils.isEmpty(gtc.getContent()) && gtc.getHtmlType().equals("datetime")) {
gtc.setContent(dateFormat.format(new Date()));
gtc.setShowName(dateFormat.format(new Date()));
}
}
} }
/*
java基础数据类型转换:
简单数据类型之间的转换又分为自动类型转换(低级到高级)、强制类型转换(高级到低级以及同级之间)、包装类过度类型转换;
注意事项:
1、boolean类型不能转换成其它数据类型
2、低级别自动转换为高级别 :byte,short,char->int->long->float->double
3、同级之间不会自动转换,可以强制类型转换
4、强制类型转换是由高级别像低级别之间转化,会降低精度准确性
5、包装类:Boolean、Character、Byte、Short、Integer、Long、Float、Double
*/
package com.phlx.anchorcollect.util;
import android.text.TextUtils;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* String数据判断、转换
* Created by 张明_ on 2017/8/18.
* Email 741183142@qq.com
*/
public class Pk30StringUtils {
/**
* 判断是否是中文名字
*
* @param str String
* @return 验证通过返回true
*/
public static boolean isChineseName(String str) {
String regEx = "^[\\u4e00-\\u9fa5]{2,4}+$";
return Pattern.matches(regEx, str);
}
/**
* 判断是否全为中文
*
* @param str String
* @return 验证通过返回true
*/
public static boolean isChinese(String str) {
String reg = "[\\u4e00-\\u9fa5]+";
return str.matches(reg);
}
/**
* 通过判断是否是http开始,来判断是否是 url
*
* @param string String
* @return 验证通过返回true
*/
public static boolean isUrlString(String string) {
return !TextUtils.isEmpty(string) && string.startsWith("http");
}
/**
* 字符串都是数字吗
*
* @param str String
* @return 验证通过返回true
*/
public static boolean isNumber(String str) {
Pattern pattern = Pattern.compile("[0-9]*");
Matcher isNum = pattern.matcher(str);
if (!isNum.matches()) {
return false;
}
return true;
}
/**
* 判断字符串是否是邮箱
*
* @param email email
* @return 字符串是否是邮箱
*/
public static boolean isEmail(String email) {
String str = "^([a-zA-Z0-9_\\-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(" +
"([a-zA-Z0-9\\-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$";
Pattern p = Pattern.compile(str);
Matcher m = p.matcher(email);
return m.matches();
}
/**
* 判断手机号字符串是否合法
*
* @param phoneNumber 手机号字符串
* @return 手机号字符串是否合法
*/
public static boolean isPhoneNumberValid(String phoneNumber) {
boolean isValid = false;
String expression = "^1[3|4|5|7|8]\\d{9}$";
Pattern pattern = Pattern.compile(expression);
Matcher matcher = pattern.matcher(phoneNumber);
if (matcher.matches()) {
isValid = true;
}
return isValid;
}
/**
* 判断手机号字符串是否合法
*
* @param areaCode 区号
* @param phoneNumber 手机号字符串
* @return 手机号字符串是否合法
*/
public static boolean isPhoneNumberValid(String areaCode, String phoneNumber) {
if (TextUtils.isEmpty(phoneNumber)) {
return false;
}
if (phoneNumber.length() < 5) {
return false;
}
if (TextUtils.equals(areaCode, "+86") || TextUtils.equals(areaCode, "86")) {
return isPhoneNumberValid(phoneNumber);
}
boolean isValid = false;
String expression = "^[0-9]*$";
Pattern pattern = Pattern.compile(expression);
Matcher matcher = pattern.matcher(phoneNumber);
if (matcher.matches()) {
isValid = true;
}
return isValid;
}
/**
* 16进制String --> byte[]
*
* @param hexString String 十六进制
* @return byte[]
*/
public static byte[] hexStringToByteArray(String hexString) {
if (hexString == null || "".equals(hexString)) {
return null;
}
hexString = hexString.toUpperCase();
int length = hexString.length() / 2;
char[] hexChars = hexString.toCharArray();
byte[] d = new byte[length];
for (int i = 0; i < length; i++) {
int pos = i * 2;
d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1]));
}
return d;
}
private static byte charToByte(char c) {
return (byte) "0123456789ABCDEF".indexOf(c);
}
/**
* String转char数组
*
* @param value String
* @return char[]
*/
public static char[] toCharArray(String value) {
char[] WriteText = new char[value.length() / 4];
byte[] b_temp = new byte[value.length()];
int i;
for (i = 0; i < b_temp.length; ++i) {
b_temp[i] = Byte.parseByte(value.substring(i, i + 1), 16);
}
for (i = 0; i < WriteText.length; ++i) {
WriteText[i] = (char) ((b_temp[i * 4] & 15) << 12 | (b_temp[i * 4 + 1] & 15) << 8 | (b_temp[i * 4 + 2] & 15) << 4 | b_temp[i * 4 + 3] & 15);
}
return WriteText;
}
/**
* String转16进制String
*
* @param value String
* @return 16进制String
*/
public static String toHexString(String value) {
StringBuilder str = new StringBuilder();
for (int i = 0; i < value.length(); ++i) {
char ch = value.charAt(i);
String s4 = Integer.toHexString(ch);
str.append(s4);
}
return str.toString();
}
/**
* utf-8 转换成 unicode
*
* @param inStr
* @return
*/
public static String utf8ToUnicode(String inStr) {
char[] myBuffer = inStr.toCharArray();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < inStr.length(); i++) {
Character.UnicodeBlock ub = Character.UnicodeBlock.of(myBuffer[i]);
if (ub == Character.UnicodeBlock.BASIC_LATIN) {
//英文及数字等
sb.append(myBuffer[i]);
} else if (ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS) {
//全角半角字符
int j = (int) myBuffer[i] - 65248;
sb.append((char) j);
} else {
//汉字
short s = (short) myBuffer[i];
String hexS = Integer.toHexString(s);
String unicode = "\\u" + hexS;
sb.append(unicode.toLowerCase());
}
}
return sb.toString();
}
/**
* unicode 转换成 utf-8
*
* @param theString
* @return
*/
public static String unicodeToUtf8(String theString) {
char aChar;
int len = theString.length();
StringBuffer outBuffer = new StringBuffer(len);
for (int x = 0; x < len; ) {
aChar = theString.charAt(x++);
if (aChar == '\\') {
aChar = theString.charAt(x++);
if (aChar == 'u') {
// Read the xxxx
int value = 0;
for (int i = 0; i < 4; i++) {
aChar = theString.charAt(x++);
switch (aChar) {
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
value = (value << 4) + aChar - '0';
break;
case 'a':
case 'b':
case 'c':
case 'd':
case 'e':
case 'f':
value = (value << 4) + 10 + aChar - 'a';
break;
case 'A':
case 'B':
case 'C':
case 'D':
case 'E':
case 'F':
value = (value << 4) + 10 + aChar - 'A';
break;
default:
throw new IllegalArgumentException(
"Malformed \\uxxxx encoding.");
}
}
outBuffer.append((char) value);
} else {
if (aChar == 't') {
aChar = '\t';
} else if (aChar == 'r') {
aChar = '\r';
} else if (aChar == 'n') {
aChar = '\n';
} else if (aChar == 'f') {
aChar = '\f';
}
outBuffer.append(aChar);
}
} else {
outBuffer.append(aChar);
}
}
return outBuffer.toString();
}
}
<layout xmlns:android="http://schemas.android.com/apk/res/android" <layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:binding="http://schemas.android.com/apk/res-auto"> xmlns:binding="http://schemas.android.com/apk/res-auto"
xmlns:app="http://schemas.android.com/tools">
<data> <data>
...@@ -17,12 +18,19 @@ ...@@ -17,12 +18,19 @@
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="@mipmap/home_bg"> android:background="@mipmap/home_bg">
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline_vertical_35"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
binding:layout_constraintGuide_percent="0.33" />
<androidx.constraintlayout.widget.Guideline <androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline_vertical" android:id="@+id/guideline_vertical"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical" android:orientation="vertical"
binding:layout_constraintGuide_percent="0.60" /> binding:layout_constraintGuide_percent="0.66" />
<androidx.appcompat.widget.LinearLayoutCompat <androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/ll_button" android:id="@+id/ll_button"
...@@ -37,7 +45,7 @@ ...@@ -37,7 +45,7 @@
<androidx.appcompat.widget.AppCompatButton <androidx.appcompat.widget.AppCompatButton
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="刷新" android:text="刷新"
binding:onClickCommand="@{viewModel.OnRefreshClickCommand}" /> binding:onClickCommand="@{viewModel.OnRefreshClickCommand}" />
<androidx.appcompat.widget.AppCompatButton <androidx.appcompat.widget.AppCompatButton
...@@ -46,27 +54,52 @@ ...@@ -46,27 +54,52 @@
android:text="停止" android:text="停止"
binding:onClickCommand="@{viewModel.OnStopClickCommand}" /> binding:onClickCommand="@{viewModel.OnStopClickCommand}" />
<View
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
/>
<androidx.appcompat.widget.AppCompatButton <androidx.appcompat.widget.AppCompatButton
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="连接" android:text="刷新尺"
binding:onClickCommand="@{viewModel.OnConnectionClickCommand}" /> binding:onClickCommand="@{viewModel.OnBleRefreshClickCommand}" />
<androidx.appcompat.widget.AppCompatButton <androidx.appcompat.widget.AppCompatButton
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="断开" android:text="停止"
binding:onClickCommand="@{viewModel.OnDisconnectionClickCommand}" /> binding:onClickCommand="@{viewModel.OnBleStopClickCommand}" />
<View
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
/>
</androidx.appcompat.widget.LinearLayoutCompat> </androidx.appcompat.widget.LinearLayoutCompat>
<androidx.recyclerview.widget.RecyclerView <androidx.recyclerview.widget.RecyclerView
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="@dimen/dp_0" android:layout_height="@dimen/dp_0"
android:layout_margin="@dimen/dp_2"
binding:itemBinding="@{viewModel.itemBinding}" binding:itemBinding="@{viewModel.itemBinding}"
binding:items="@{viewModel.observableList}" binding:items="@{viewModel.observaBluetoothList}"
binding:layoutManager="@{LayoutManagers.linear()}" binding:layoutManager="@{LayoutManagers.linear()}"
binding:layout_constraintBottom_toBottomOf="parent" binding:layout_constraintBottom_toBottomOf="parent"
binding:layout_constraintLeft_toLeftOf="parent" binding:layout_constraintLeft_toLeftOf="parent"
binding:layout_constraintRight_toLeftOf="@+id/guideline_vertical_35"
binding:layout_constraintTop_toBottomOf="@+id/ll_button" />
<androidx.recyclerview.widget.RecyclerView
android:layout_width="0dp"
android:layout_height="@dimen/dp_0"
android:layout_margin="@dimen/dp_2"
binding:itemBinding="@{viewModel.bleItemBinding}"
binding:items="@{viewModel.observaBleList}"
binding:layoutManager="@{LayoutManagers.linear()}"
binding:layout_constraintBottom_toBottomOf="parent"
binding:layout_constraintLeft_toRightOf="@+id/guideline_vertical_35"
binding:layout_constraintRight_toLeftOf="@+id/guideline_vertical" binding:layout_constraintRight_toLeftOf="@+id/guideline_vertical"
binding:layout_constraintTop_toBottomOf="@+id/ll_button" /> binding:layout_constraintTop_toBottomOf="@+id/ll_button" />
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
<variable <variable
name="viewModel" name="viewModel"
type="com.phlx.anchorcollect.ui.setting.BLEItem" /> type="com.phlx.anchorcollect.ui.setting.BleItem" />
</data> </data>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:app="http://schemas.android.com/apk/res-auto" <androidx.constraintlayout.widget.ConstraintLayout xmlns:app="http://schemas.android.com/apk/res-auto"
......
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:binding="http://schemas.android.com/apk/res-auto">
<data>
<variable
name="viewModel"
type="com.phlx.anchorcollect.ui.setting.BluetoothItem" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="3dp"
android:layout_marginBottom="3dp"
android:background="@color/white"
android:paddingLeft="5dp"
android:paddingRight="5dp"
binding:onClickCommand="@{viewModel.itemClick}">
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/cl_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="vertical"
binding:layout_constraintLeft_toLeftOf="parent"
binding:layout_constraintRight_toRightOf="parent"
binding:layout_constraintTop_toTopOf="parent">
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ellipsize="end"
android:maxLines="1"
android:text="@{viewModel.entity.name}"
android:textSize="@dimen/sp_15" />
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ellipsize="end"
android:maxLines="1"
android:text="@{viewModel.entity.address}"
android:textSize="@dimen/sp_15" />
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
\ No newline at end of file
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
<androidx.appcompat.widget.AppCompatTextView <androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_1_1_title" android:id="@+id/tv_1_1_title"
style="@style/ItemTitleFontBlueStyle" style="@style/ItemTitleFontBlueStyle"
android:text="@string/registration_no" android:text="@string/individual_no"
binding:layout_constraintTop_toTopOf="parent" binding:layout_constraintTop_toTopOf="parent"
binding:layout_constraintStart_toStartOf="parent" binding:layout_constraintStart_toStartOf="parent"
binding:layout_constraintBottom_toTopOf="@+id/tv_2_1_title" binding:layout_constraintBottom_toTopOf="@+id/tv_2_1_title"
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
<androidx.appcompat.widget.AppCompatTextView <androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_1_1" android:id="@+id/tv_1_1"
style="@style/ItemContentFontBlackStyle" style="@style/ItemContentFontBlackStyle"
android:text="@{viewModel.entity.registrationNo}" android:text="@{viewModel.entity.individualNo}"
binding:layout_constraintTop_toTopOf="@+id/tv_1_1_title" binding:layout_constraintTop_toTopOf="@+id/tv_1_1_title"
binding:layout_constraintLeft_toRightOf="@+id/tv_1_1_title" binding:layout_constraintLeft_toRightOf="@+id/tv_1_1_title"
/> />
...@@ -48,7 +48,7 @@ ...@@ -48,7 +48,7 @@
<androidx.appcompat.widget.AppCompatTextView <androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_2_1_title" android:id="@+id/tv_2_1_title"
style="@style/ItemTitleFontBlueStyle" style="@style/ItemTitleFontBlueStyle"
android:text="@string/individual_no" android:text="@string/registration_no"
android:layout_marginTop="@dimen/dp_10" android:layout_marginTop="@dimen/dp_10"
binding:layout_constraintStart_toStartOf="parent" binding:layout_constraintStart_toStartOf="parent"
binding:layout_constraintTop_toBottomOf="@+id/tv_1_1_title" /> binding:layout_constraintTop_toBottomOf="@+id/tv_1_1_title" />
...@@ -56,7 +56,7 @@ ...@@ -56,7 +56,7 @@
<androidx.appcompat.widget.AppCompatTextView <androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_2_1" android:id="@+id/tv_2_1"
style="@style/ItemContentFontBlackStyle" style="@style/ItemContentFontBlackStyle"
android:text="@{viewModel.entity.individualNo}" android:text="@{viewModel.entity.registrationNo}"
binding:layout_constraintTop_toTopOf="@+id/tv_2_1_title" binding:layout_constraintTop_toTopOf="@+id/tv_2_1_title"
binding:layout_constraintLeft_toRightOf="@+id/tv_2_1_title" binding:layout_constraintLeft_toRightOf="@+id/tv_2_1_title"
/> />
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment