diff --git a/app/src/main/java/kz/istt/locust/DbOpenHelper.java b/app/src/main/java/kz/istt/locust/DbOpenHelper.java index c8364fd..c4a1feb 100644 --- a/app/src/main/java/kz/istt/locust/DbOpenHelper.java +++ b/app/src/main/java/kz/istt/locust/DbOpenHelper.java @@ -1462,7 +1462,7 @@ public class DbOpenHelper extends SQLiteOpenHelper String[] par = new String[] { tbl.getRowByName("id").getStrVal() }; Cursor cursor = getReadableDatabase().rawQuery(sql, par); - boolean b=cursor.moveToFirst(); + boolean exists=cursor.moveToFirst(); cursor.close(); ContentValues cv = new ContentValues(); @@ -1471,7 +1471,7 @@ public class DbOpenHelper extends SQLiteOpenHelper //if(b && tbl.fields.get(i).name.equals("id")) continue; //Если существует не записываем //Log.i("igor","fld="+tbl.fields.get(i).name+" val="+tbl.fields.get(i).getStrVal()); //Для дебага - if(fb[i]) //Присваиваем только поля существующие локально + if(fb[i]) //Присваиваем только поля существующие в локальной базе { if(tbl.fields.get(i).value==null) cv.putNull(tbl.fields.get(i).name); @@ -1480,7 +1480,7 @@ public class DbOpenHelper extends SQLiteOpenHelper } } - if(!b) + if(!exists) { db.beginTransaction(); //Вроде как защита от многопоточности (для сервиса) try { @@ -1502,7 +1502,6 @@ public class DbOpenHelper extends SQLiteOpenHelper } db.close(); -/* //Для дебага Cursor cursor = getReadableDatabase().rawQuery("select sum(1) s from "+tbl.name,null); if(cursor.moveToFirst()) @@ -1512,7 +1511,7 @@ public class DbOpenHelper extends SQLiteOpenHelper }while (cursor.moveToNext()); } cursor.close(); -*/ +/**/ return true; } diff --git a/app/src/main/java/kz/istt/locust/MySynchronizationOld.java b/app/src/main/java/kz/istt/locust/MySynchronizationOld.java index e97eb1e..4a755cc 100644 --- a/app/src/main/java/kz/istt/locust/MySynchronizationOld.java +++ b/app/src/main/java/kz/istt/locust/MySynchronizationOld.java @@ -335,9 +335,11 @@ public class MySynchronizationOld String xml=""; + String android_id = Settings.Secure.getString(_context.getContentResolver(), Settings.Secure.ANDROID_ID); + //Последовательно отправляю изменёные пользователям записи (send=0 и они заполнены) DbOpenHelper dboh = new DbOpenHelper(_context); - Cursor cursor = dboh.getReadableDatabase().rawQuery("select uid from frmlocust where send=0 and filled=1", null); + Cursor cursor = dboh.getReadableDatabase().rawQuery("select uid from frmlocust where send=0 and filled=1 and device_id=?", new String[]{ android_id }); if(cursor.moveToFirst()) { do{ @@ -349,7 +351,7 @@ public class MySynchronizationOld //Последовательно отправляю изменёные пользователям записи (send=0 и они заполнены) dboh = new DbOpenHelper(_context); - cursor = dboh.getReadableDatabase().rawQuery("select uid from frmlocustdel where send=0 and filled=1", null); + cursor = dboh.getReadableDatabase().rawQuery("select uid from frmlocustdel where send=0 and filled=1 and device_id=?", new String[]{ android_id }); if(cursor.moveToFirst()) { do{ diff --git a/app/src/main/java/tctable/Point.java b/app/src/main/java/tctable/Point.java deleted file mode 100644 index c212768..0000000 --- a/app/src/main/java/tctable/Point.java +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Created by IntelliJ IDEA. - * User: igor - * Date: 09.03.2007 - * Time: 0:53:45 - * To change this template use File | Settings | File Templates. - */ -package tctable; - -public class Point -{ - public double x=0; - public double y=0; -} \ No newline at end of file diff --git a/app/src/main/java/tctable/Point.java b/app/src/main/java/tctable/Point.java new file mode 120000 index 0000000..49abcf9 --- /dev/null +++ b/app/src/main/java/tctable/Point.java @@ -0,0 +1 @@ +O:/projects/Workspace_Java/CCALM_main/src/main/java/tctable/Point.java \ No newline at end of file diff --git a/app/src/main/java/tctable/TCField.java b/app/src/main/java/tctable/TCField.java deleted file mode 100644 index 5bac22c..0000000 --- a/app/src/main/java/tctable/TCField.java +++ /dev/null @@ -1,388 +0,0 @@ -package tctable; - -import java.io.IOException; -import java.io.InputStream; -import java.io.UnsupportedEncodingException; - -public class TCField -{ - //Типы данных - static int BD_UINT1 = 0; //1 байт без знаковый - static int BD_UINT2 = 1; //2 байта без знаковый - static int BD_UINT4 = 3; //4 байта без знаковый - static int BD_INT1 = 10; //1 байт со знаковый - static int BD_INT2 = 11; //2 байта со знаковый - static int BD_INT4 = 13; //4 байта со знаковый - static int BD_INT8 = 17; //8 байт со знаковый - static int BD_FLOAT4 = 20; //4 байта - static int BD_FLOAT8 = 22; //8 байт double - static int BD_UTF8_1 = 100; //100 - utf8_1 string 1й байт размер строки в байтах - static int BD_UTF8_2 = 101; //101 - utf8_2 string 1х 2 байта размер строки в байтах - static int BD_UTF8_4 = 102; //102 - utf8_4 string 1х 4 байта размер строки в байтах - static int BD_BLOB_2 = 141; - static int BD_BLOB_4 = 143; //Двоичные данные uint4 количество байт - - public String name=""; //Название столбца - public int type=-1; //Тип данных - public byte[] value=null; //Запакованые данные - - public TCField(String name, int type) - { - this.name=name; - this.type=type; - } - - public TCField(String name, String type) - { - this.name=name; - //this.type=type; - - this.type= TCField.BD_UTF8_2; //Defalt type - //From PostgreSQL and MySQL - if(type.equals("bool") || type.equals("tinyint")) { this.type= TCField.BD_UINT1; } else - if(type.equals("int4") || type.equals("int") || type.equals("serial") || type.equals("bigint")) { this.type= TCField.BD_INT4; } else //bigint немного неправильно потому что это 64 бита но для андрод приложения не сделал - if(type.equals("int8")) { this.type= TCField.BD_INT8; } else - if(type.equals("float4") || type.equals("float")) { this.type= TCField.BD_FLOAT4; } else - if(type.equals("float8") || type.equals("NUMBER")) { this.type= TCField.BD_FLOAT8; } else - if(type.equals("varchar") || type.equals("VARCHAR2")) { this.type= TCField.BD_UTF8_2; } else - if(type.equals("text")) { this.type= TCField.BD_UTF8_4; } else - if(type.equals("bytea") || type.equals("longblob")) { this.type= TCField.BD_BLOB_4; } else - if(type.equals("timestamptz")) { this.type= TCField.BD_UTF8_1; } else - if(type.equals("timestamp")) { this.type= TCField.BD_UTF8_1; } else - if(type.equals("date")) { this.type= TCField.BD_UTF8_1; } - } - - - private int byteArrayToInt(byte[] b, int start, int length) - { - int dt = 0; - if ((b[start] & 0x80) != 0) - dt = Integer.MAX_VALUE; - for (int i = 0; i < length; i++) - dt = (dt << 8) + (b[start++] & 255); - return dt; - } - -/* - private byte[] intToByteArray(int n, int byteCount) - { - byte[] res = new byte[byteCount]; - for (int i = 0; i < byteCount; i++) - res[byteCount - i - 1] = (byte) ((n >> i * 8) & 255); - return res; - } -*/ - - //Прочитать значение из потока в соответствии с типом - public void ReadValue(InputStream fileHandle) throws IOException - { - if(this.type== TCField.BD_UINT1) - { - value=new byte[1]; - fileHandle.read(value); - }else - if(this.type== TCField.BD_UINT2) - { - value=new byte[2]; - fileHandle.read(value); - }else - if(this.type== TCField.BD_UINT4) - { - value=new byte[4]; - fileHandle.read(value); - }else - if(this.type== TCField.BD_INT1) - { - value=new byte[1]; - fileHandle.read(value); - }else - if(this.type== TCField.BD_INT2) - { - value=new byte[2]; - fileHandle.read(value); - }else - if(this.type== TCField.BD_INT4) - { - value=new byte[4]; - fileHandle.read(value); - }else - if(this.type== TCField.BD_INT8) - { - value=new byte[8]; - fileHandle.read(value); - }else - if(this.type== TCField.BD_FLOAT4) - { - value=new byte[4]; - fileHandle.read(value); - }else - if(this.type== TCField.BD_FLOAT8) - { - value=new byte[8]; - fileHandle.read(value); - }else - if(this.type== TCField.BD_UTF8_1) - { - byte[] s=new byte[1]; - fileHandle.read(s); - if(s[0]==0) value=null; - else - { - value=new byte[s[0]]; - fileHandle.read(value); - } - }else - if(this.type== TCField.BD_UTF8_2) - { - int s= Tools.readUShort(fileHandle); - if(s==0) value=null; - else - { - value=new byte[s]; - fileHandle.read(value); - } - }else - if(this.type== TCField.BD_BLOB_4) - { - byte[] ss=new byte[4]; - fileHandle.read(ss); - int s=byteArrayToInt(ss, 0, 4); - if(s==0) value=null; - else - { - value=new byte[s]; - fileHandle.read(value); - } - } - } - - public String getStrVal() - { - String result=null; - try - { - if(value==null) result = ""; - if(type== TCField.BD_UINT1) result = String.valueOf(getUByteVal()); - if(type== TCField.BD_UINT4) result = String.valueOf(getUIntVal()); - if(type== TCField.BD_INT4) result = String.valueOf(getIntVal()); - if(type== TCField.BD_FLOAT4) result = String.valueOf(getFloatVal()); - if(type== TCField.BD_UTF8_1 || type== TCField.BD_UTF8_2) - { - result = new String(value, "UTF8"); - } - } catch (Exception e) {} - return result; - } - - public int getIntVal() - { - int i1 = value[0] & 0xff; - int i2 = value[1] & 0xff; - int i3 = value[2] & 0xff; - int i4 = value[3] & 0xff; - - int val = i4 << 24 | i3 << 16 | i2 << 8 | i1; - - return val; - } - - /** Пока не использую но если буду использовать протестировать с большими числами */ - public long getUIntVal() - { - long ch1, ch2, ch3, ch4, count; - ch1 = value[0] & 0xff; - ch2 = value[1] & 0xff; - ch3 = value[2] & 0xff; - ch4 = value[3] & 0xff; - count = (ch4 << 24) | (ch3 << 16) | (ch2 << 8) | ch1; - return count; - } - - public short getUByteVal() - { - return (short) (value[0] & 0xff); - } - - public float getFloatVal() - { - float f; - int ch1, ch2, ch3, ch4, count; - ch1 = value[0] & 0xFF; - ch2 = value[1] & 0xFF; - ch3 = value[2] & 0xFF; - ch4 = value[3] & 0xFF; - - count = (ch4 << 24) | (ch3 << 16) | (ch2 << 8) | ch1; - f = Float.intBitsToFloat(count); - return f; - } - - public boolean setValue(String val) - { - boolean result=true; - if(val==null) - { value=null; - }else if(type== TCField.BD_UINT1) - { - if(val.equals("f") || val.equals("false")) val="0"; - else if(val.equals("t") || val.equals("true")) val="1"; - - int v= Integer.parseInt(val); - if(v<0 || v>255) result=false; - value=new byte[1]; - value[0]=(byte)v; - }else if(type== TCField.BD_UINT2) - { - int v= Integer.parseInt(val); - if(v<0 || v>65535) result=false; - value=new byte[2]; - value[0] = (byte)((v & 0x000000ff)); - value[1] = (byte)((v & 0x0000ff00) >> 8); - }else if(type== TCField.BD_UINT4) - { - long v= Long.parseLong(val); - value=new byte[4]; - value[0] = (byte)((v & 0x000000ff)); - value[1] = (byte)((v & 0x0000ff00) >> 8); - value[2] = (byte)((v & 0x00ff0000) >> 16); - value[3] = (byte)((v & 0xff000000) >> 24); - }else if(type== TCField.BD_INT1) - { - int v= Integer.parseInt(val); - value=new byte[1]; - value[0]=(byte)v; - }else if(type== TCField.BD_INT2) - { - int v= Integer.parseInt(val); - value=new byte[2]; - value[0] = (byte)((v & 0x000000ff)); - value[1] = (byte)((v & 0x0000ff00) >> 8); - }else if(type== TCField.BD_INT4) - { - long v= Long.parseLong(val); - value=new byte[4]; - value[0] = (byte)((v & 0x000000ff)); - value[1] = (byte)((v & 0x0000ff00) >> 8); - value[2] = (byte)((v & 0x00ff0000) >> 16); - value[3] = (byte)((v & 0xff000000) >> 24); - }else if(type== TCField.BD_INT8) - { - long v= Long.parseLong(val); - value=new byte[8]; - value[0] = (byte) (v & 0x00000000000000ffl); - value[1] = (byte)((v & 0x000000000000ff00l) >> 8); - value[2] = (byte)((v & 0x0000000000ff0000l) >> 16); - value[3] = (byte)((v & 0x00000000ff000000l) >> 24); - value[4] = (byte)((v & 0x000000ff00000000l) >> 32); - value[5] = (byte)((v & 0x0000ff0000000000l) >> 40); - value[6] = (byte)((v & 0x00ff000000000000l) >> 48); - value[7] = (byte)((v & 0xff00000000000000l) >> 56); - - }else if(type== TCField.BD_FLOAT4) - { - Float v= Float.parseFloat(val); - int iv= Float.floatToIntBits(v); - - value=new byte[4]; - value[0] = (byte)((iv & 0x000000ff)); - value[1] = (byte)((iv & 0x0000ff00) >> 8); - value[2] = (byte)((iv & 0x00ff0000) >> 16); - value[3] = (byte)((iv & 0xff000000) >> 24); - }else if(type== TCField.BD_FLOAT8) - { - Double v= Double.parseDouble(val); - long iv= Double.doubleToLongBits(v); - - value=new byte[8]; - value[0] = (byte)((iv & 0x00000000000000ffl)); - value[1] = (byte)((iv & 0x000000000000ff00l) >> 8); - value[2] = (byte)((iv & 0x0000000000ff0000l) >> 16); - value[3] = (byte)((iv & 0x00000000ff000000l) >> 24); - value[4] = (byte)((iv & 0x000000ff00000000l) >> 32); - value[5] = (byte)((iv & 0x0000ff0000000000l) >> 40); - value[6] = (byte)((iv & 0x00ff000000000000l) >> 48); - value[7] = (byte)((iv & 0xff00000000000000l) >> 56); - - }else if(type== TCField.BD_UTF8_1) - { - value=null; - if(val!=null && !val.equals("")) - { - byte[] b=null; - try { - b = val.getBytes("UTF-8"); - } catch (UnsupportedEncodingException e) { - result=false; - } - if(b!=null) - { - int len=b.length; - if(len>255) len=255; - value=new byte[len+1]; - value[0]=(byte)len; - for(int i=0;i65535) len=65535; - value=new byte[len+2]; - value[0]=(byte) (len & 0x000000ff); - value[1]=(byte)((len & 0x0000ff00) >> 8); - for(int i=0;i> 8); - value[2]=(byte)((len & 0x00ff0000) >> 16); - value[3]=(byte)((len & 0xff000000) >> 24); - for(int i=0;itype==TCField::$BD_BLOB_4) - { return pack("I",strlen($value)).$value; - } -*/ - return result; - } - -} diff --git a/app/src/main/java/tctable/TCField.java b/app/src/main/java/tctable/TCField.java new file mode 120000 index 0000000..d76ee9b --- /dev/null +++ b/app/src/main/java/tctable/TCField.java @@ -0,0 +1 @@ +O:/projects/Workspace_Java/CCALM_main/src/main/java/tctable/TCField.java \ No newline at end of file diff --git a/app/src/main/java/tctable/TCTable.java b/app/src/main/java/tctable/TCTable.java deleted file mode 100644 index bfed7c1..0000000 --- a/app/src/main/java/tctable/TCTable.java +++ /dev/null @@ -1,200 +0,0 @@ -package tctable; - -import java.io.DataInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.util.ArrayList; -import java.util.List; - - -public class TCTable -{ - public int id=0; //Идентификатор таблицы - public String name=""; //Название таблицы - public List fields=new ArrayList(); //Список полей - - private int nc=0; //Байтов под NULL значения - private byte[] m_NULL=null; //NULL значения - private InputStream m_file; - - /** - * Конструктор - * @param Строка name Название таблицы - * @param Целое id Идентификатор таблицы (обычно уникальный) - */ - public TCTable(String name, int id) - { this.name=name; - this.id=id; - } - - //Открыть таблицу по названию файла - /*function OpenTableF(file) - { - if(file_exists(file)) - { - this.OpenTableH(fopen(file,'r')); - } - }*/ - - //Открыть таблицу из потока HANDLE - public boolean OpenTableH(InputStream handle) throws IOException - { - this.m_file=handle; - DataInputStream dis = new DataInputStream(handle); - - if(Tools.readUShort(dis)!=65500) return false; //id файла - if(Tools.readUShort(dis)!=1) return false; //Версия файла - this.id= Tools.readInt(dis); //ID таблицы или запроса (4 байта можно сделать 2) - if(dis.readByte()!=0) return false; //Только плотные таблицы - //Считываем название таблицы - this.name = Tools.readUTF8_1(dis); - - //Считываем столбцы - int count=dis.readUnsignedByte(); //Количество столбцов - for(int i=0;i> 8); - //File version: 2 bytes. - os.write((1 & 0x000000ff)); - os.write((1 & 0x0000ff00) >> 8); - //Table ID (or Request ID): 4 bytes. - os.write((this.id & 0x000000ff)); - os.write((this.id & 0x0000ff00) >> 8); - os.write((this.id & 0x00ff0000) >> 16); - os.write((this.id & 0xff000000) >> 24); - //Table type: 1 byte (0- "Dense" 1- "Loose") - os.write(0); - //UTF8_1 String - byte[] ba = this.name.getBytes("UTF-8"); - os.write(ba.length); - os.write(ba); - //Count of fields: 1 byte. - os.write(this.fields.size()); - //Write name and type id - for(int i=0;i JDK 7 - try { - return result.toString("UTF-8"); - } catch (UnsupportedEncodingException e) { - } - return ""; - } - - //Преобразовать арабские и индийские в современные цифры - public static String numConvert(String str) - { - if(str==null) return null; - String persian = "۰۱۲۳۴۵۶۷۸۹"; - String arabic = "٩٨٧٦٥٤٣٢١٠"; - String num = "0123456789"; - //Заменяю персидские - for(int i=0;i> pos)); - } - - public static String readUTF8_1(InputStream handle) throws IOException - { - byte[] tmp=new byte[handle.read()]; - handle.read(tmp); - return new String(tmp, "UTF8"); - } - - public static float readFloat(DataInputStream InStream) throws IOException - { - float f; - int ch1, ch2, ch3, ch4, count; - ch1 = InStream.readUnsignedByte(); - ch2 = InStream.readUnsignedByte(); - ch3 = InStream.readUnsignedByte(); - ch4 = InStream.readUnsignedByte(); - - count = (ch4 << 24) | (ch3 << 16) | (ch2 << 8) | ch1; - f = Float.intBitsToFloat(count); - return f; - } - - public static int readInt(DataInputStream InStream) throws IOException - { - int ch1, ch2, ch3, ch4, count; - ch1 = InStream.readUnsignedByte(); - ch2 = InStream.readUnsignedByte(); - ch3 = InStream.readUnsignedByte(); - ch4 = InStream.readUnsignedByte(); - - count = (ch4 << 24) | (ch3 << 16) | (ch2 << 8) | ch1; - return count; - } - - public static short readShort(DataInputStream InStream) throws IOException - { - int ch1, ch2, count; - ch1 = InStream.readUnsignedByte(); - ch2 = InStream.readUnsignedByte(); - - count = (ch2 << 8) | ch1; - return (short)count; - } - - public static int readUShort(InputStream InStream) throws IOException - { - int ch1, ch2; - ch1 = InStream.read(); - ch2 = InStream.read(); - return (ch2 << 8) | ch1; - } - - public static String afterLast(String str, String ch) - { - int i=str.lastIndexOf(ch); - if(i!=-1) - { - return str.substring(i+ch.length()); - } - return ""; - } - public static String beforeLast(String str, String ch) - { - int i=str.lastIndexOf(ch); - if(i!=-1) - { - return str.substring(0,i); - } - return ""; - } - public static String beforeFirst(String str, String ch) - { - int i=str.indexOf(ch); - if(i!=-1) - { - return str.substring(0,i); - } - return ""; - } - - //узнать точку пересичений 2х линай если x=0 и y=0 то не пересиклась - public static Point getCrossingLine(Point PHead0, Point PTail0, Point PHead1, Point PTail1) - { - Point rezPoint = new Point(); - - double a0, b0, c0, a1, b1, c1; - boolean bRez = true; - a0 = PTail0.y - PHead0.y; - b0 = PHead0.x - PTail0.x; - c0 = PTail0.x * PHead0.y - PHead0.x * PTail0.y; - - a1 = PTail1.y - PHead1.y; - b1 = PHead1.x - PTail1.x; - c1 = PTail1.x * PHead1.y - PHead1.x * PTail1.y; - - if (b1 == 0) rezPoint.x = PHead1.x;//если перпендикулярна oy - else rezPoint.x = (-(b0 * c1 / b1) + c0) / ((b0 * a1 / b1) - a0); - if (a1 == 0) rezPoint.y = PHead1.y;//если перпендикулярна oy - else rezPoint.y = (-(c1 * a0 / a1) + c0) / ((a0 * b1 / a1) - b0); - //проверка на вхождение в отрезоки (с погрешностью 0.0000001 (зачем понадобилась погрешность?)) - //по x - if ((rezPoint.x < Math.min(PHead0.x, PTail0.x) - 0.0000001) || (rezPoint.x > Math.max(PHead0.x, PTail0.x) + 0.0000001)) - bRez = false; - if ((rezPoint.x < Math.min(PHead1.x, PTail1.x) - 0.0000001) || (rezPoint.x > Math.max(PHead1.x, PTail1.x) + 0.0000001)) - bRez = false; - //по y - if ((rezPoint.y < Math.min(PHead0.y, PTail0.y) - 0.0000001) || (rezPoint.y > Math.max(PHead0.y, PTail0.y) + 0.0000001)) - bRez = false; - if ((rezPoint.y < Math.min(PHead1.y, PTail1.y) - 0.0000001) || (rezPoint.y > Math.max(PHead1.y, PTail1.y) + 0.0000001)) - bRez = false; - - if (!bRez) - { - rezPoint.x = 0; - rezPoint.y = 0; - } - return rezPoint; - } - - public static Point getCrossingLine2(Point PHead0,Point PTail0,Point PHead1,Point PTail1) - { - boolean bRez=true; - Point rezPoint = new Point(); - rezPoint.x=0; - rezPoint.y=0; - - double a0,b0,c0,a1,b1,c1; - a0=PTail0.y-PHead0.y; - b0=PHead0.x-PTail0.x; - c0=PTail0.x*PHead0.y-PHead0.x*PTail0.y; - - a1=PTail1.y-PHead1.y; - b1=PHead1.x-PTail1.x; - c1=PTail1.x*PHead1.y-PHead1.x*PTail1.y; - - if (b1==0) rezPoint.x=PHead1.x;//если перпендикулярна oy - else rezPoint.x=(-(b0*c1/b1)+c0)/((b0*a1/b1)-a0); - if (a1==0) rezPoint.y=PHead1.y;//если перпендикулярна ox - else rezPoint.y=(-(c1*a0/a1)+c0)/((a0*b1/a1)-b0); - //по x - if (rezPoint.xMath.max(PHead0.x,PTail0.x)) - bRez=false; - if (rezPoint.xMath.max(PHead1.x,PTail1.x)) - bRez=false; - //по y - if (rezPoint.yMath.max(PHead0.y,PTail0.y)) - bRez=false; - if (rezPoint.yMath.max(PHead1.y,PTail1.y)) - bRez=false; - if (!bRez) - { - rezPoint.x=0; - rezPoint.y=0; - } - return rezPoint; - } - - //Так как в replaceAll много заморочек с регулярными выражениями - public static String replaceAll(String txt, String val, String rep) { - if(txt==null || val==null || rep==null) return txt; - return txt.replace(val,rep); - /*while(true) - { - String tmpstr=txt.replace(val, rep); - if(tmpstr.equals(txt)) - { - txt=tmpstr; - break; - }else - { - txt=tmpstr; - } - } - return txt;*/ - } - - public static byte[] subArray(byte[] b, int offset, int length) { - byte[] sub = new byte[length]; - for (int i = offset; i < offset + length; i++) { - try { - sub[i - offset] = b[i]; - } catch (Exception e) { - - } - } - return sub; - } -} diff --git a/app/src/main/java/tctable/Tools.java b/app/src/main/java/tctable/Tools.java new file mode 120000 index 0000000..ecbcb79 --- /dev/null +++ b/app/src/main/java/tctable/Tools.java @@ -0,0 +1 @@ +O:/projects/Workspace_Java/CCALM_main/src/main/java/tctable/Tools.java \ No newline at end of file