На работе выключили свет

This commit is contained in:
2024-08-13 15:29:39 +05:00
parent c8b20ca108
commit ec643c43a0
4 changed files with 228 additions and 178 deletions

View File

@ -359,7 +359,7 @@ public class DBGUITable
{
if(obj==null) return;
String className = obj.getClass().toString();
//Log.d("igor","getClass = "+className);
//Log.d("CCALM","getClass = "+className);
if(className.indexOf("android.widget.EditText")!=-1) ((EditText)obj).setText(value);
if(className.indexOf("android.material.textfield.TextInputEditText")!=-1) ((TextInputEditText)obj).setText(value);

View File

@ -492,7 +492,7 @@ public class DbOpenHelper extends SQLiteOpenHelper
"terrain text, " + //Название местности либо урочища
"observer text, " + //ФИО наблюдателя
"date text, " +//"date integer, " + //Время создания секунд с 1970 года (long) (по гринвичу?)
"date text, " +//"date integer, " + //Дата создания (по гринвичу?)
"timezone text, " + //Временная зона
"lat_center double, " +
"lon_center double, " +
@ -596,7 +596,7 @@ public class DbOpenHelper extends SQLiteOpenHelper
"terrain text, " + //Название местности либо урочища
"observer text, " + //ФИО наблюдателя
"date text," + //"date integer," + //Время создания секунд с 1970 года (long), теоретически должна быть уникальной для пользователя (по гринвичу?)
"date text," + //"date integer," + //Дата создания (по гринвичу?)
"timezone text, " + //Временная зона
"lat_center double, " +
"lon_center double, " +
@ -709,7 +709,7 @@ public class DbOpenHelper extends SQLiteOpenHelper
//Для формы уничтожения саранчи id может быть пустым (только если создали на КПК)
sql = "create table if not exists frmlocusthealth(" +
"id integer," + //Локальный идентификатор на сервере для убыстрения доступа
"uid text NOT NULL, " + //Уникальный идентификатор пока не используется но для распределенной базы будет использоваться
"uid text NOT NULL, " + //Уникальный идентификатор
"del boolean NOT NULL DEFAULT 0," +
"seq integer NOT NULL DEFAULT 1," +
"send boolean NOT NULL DEFAULT 0," +
@ -724,7 +724,7 @@ public class DbOpenHelper extends SQLiteOpenHelper
//Идентификация места мониторинга
"observer text, " + //Имя руководителя бригады по мониторингу ЗЧ и ОС
"date text," + //Дата мониторинга (секунд с 1970 года)
"date text," + //Дата создания (по гринвичу?)
"timezone text, " + //Временная зона
"lat_center double, " +
"lon_center double, " +
@ -888,7 +888,7 @@ public class DbOpenHelper extends SQLiteOpenHelper
");";
db.execSQL(sql);
Log.i("igor", "Создали базы");
Log.i("CCALM", "Создали базы");
}
/** Обновление базы если версия не соответствует
@ -1248,7 +1248,7 @@ public class DbOpenHelper extends SQLiteOpenHelper
//Идентификация места мониторинга
"observer text, " + //Имя руководителя бригады по мониторингу ЗЧ и ОС
"date integer," + //Дата мониторинга (секунд с 1970 года)
"date integer," + //Дата создания (по гринвичу?)
"frmlocustdel_filled boolean," + //Заполнялась ли Форма по Мониторингу противосаранчовых обработок бригадой по обработке? (Похоже что это бесполезное поле так как есть поле frmlocustdel_uid)
//Бригада по обработке
@ -1609,9 +1609,9 @@ public class DbOpenHelper extends SQLiteOpenHelper
Cursor cursor;
//if(tbl.name.equals("countries"))
// Log.i("igor", "tbl0=" + tbl.name);
// Log.i("CCALM", "tbl0=" + tbl.name);
//if(tbl.name.equals("countriesregions"))
// Log.i("igor", "tbl0=" + tbl.name);
// Log.i("CCALM", "tbl0=" + tbl.name);
//Проверка на существование полей
Boolean[] fb=new Boolean[tbl.fields.size()]; //Для проверки существования полей в локальной таблице
@ -1632,7 +1632,7 @@ public class DbOpenHelper extends SQLiteOpenHelper
while(tbl.ReadNextRecord())
{
if(tbl.name.equals("frmlocustdel_locations")){
Log.i("igor","tbl.name="+tbl.name);
Log.i("CCALM","tbl.name="+tbl.name);
}
String sql=null;
String[] par=null;
@ -1663,7 +1663,7 @@ public class DbOpenHelper extends SQLiteOpenHelper
for(int i=0;i<tbl.fields.size();i++)
{
//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()+" type="+tbl.fields.get(i).type); //Для дебага
//Log.i("CCALM","fld="+tbl.fields.get(i).name+" val="+tbl.fields.get(i).getStrVal()+" type="+tbl.fields.get(i).type); //Для дебага
if(fb[i]) //Присваиваем только поля существующие в локальной базе
{
@ -1728,7 +1728,7 @@ public class DbOpenHelper extends SQLiteOpenHelper
// cursor = rdb.rawQuery("select sum(1) cnt from " + tbl.name, null);
// if (cursor.moveToFirst()) {
// do {
// Log.i("igor", "tbl1=" + tbl.name + " cnt=" + cursor.getString(0));
// Log.i("CCALM", "tbl1=" + tbl.name + " cnt=" + cursor.getString(0));
// } while (cursor.moveToNext());
// }
// cursor.close();
@ -2250,7 +2250,7 @@ public class DbOpenHelper extends SQLiteOpenHelper
if (cursor.moveToFirst()) {
do {
result[0] = cursor.getInt(cursor.getColumnIndex("country_id"));
Log.i("igor", "Region name = " + cursor.getString(cursor.getColumnIndex("name")) + " id = " + cursor.getString(cursor.getColumnIndex("id")));
Log.i("CCALM", "Region name = " + cursor.getString(cursor.getColumnIndex("name")) + " id = " + cursor.getString(cursor.getColumnIndex("id")));
//String points="{ \"type\": \"Polygon\", \"coordinates\": [[";
Point PHead0 = new Point();
PHead0.x = lon;
@ -2292,7 +2292,7 @@ public class DbOpenHelper extends SQLiteOpenHelper
}
}
//points+="]]}";
//Log.i("igor", points);
//Log.i("CCALM", points);
if (cnt % 2 != 0) {
result[1] = cursor.getInt(cursor.getColumnIndex("id"));
break;

View File

@ -14,7 +14,6 @@ import android.provider.Settings;
import android.util.Log;
import android.webkit.URLUtil;
/*import org.apache.http.HttpResponse;
import org.apache.http.HttpVersion;
import org.apache.http.client.ClientProtocolException;
@ -81,8 +80,7 @@ import tools.TCTableTools2;
public class MySynchronizationOld
{
public static String URL="https://ccalm.org";
//public static String URL="http://192.168.200.100:8080";
public static int SyncDays=30;
public static int SyncDays=30; // How many days to store data of sent data packets and synchronize with the server
private Context _context; //От какого контекста показывать алерты
private String android_id;
@ -91,12 +89,12 @@ public class MySynchronizationOld
public MyThread myThread = null;
/*
private int rid_sendFrmLocust = -1; //Для отправки данных
private int rid_sendFrmLocustDel = -1; //Для отправки данных
private int rid_sendFrmLocustHealth = -1; //Для отправки данных
private int rid_frmlocust = -1; //Для запроса данных (не используется так как нет синхронизации)
//private int rid_frmlocust = -1; //Для запроса данных (не используется так как нет синхронизации)
private int rid_frmlocustdel = -1; //Для запроса данных
private int rid_frmlocustdel_locations = -1; //Для подгрузки координат формы
@ -105,7 +103,7 @@ public class MySynchronizationOld
private int rid_CountriesRegions = -1; //Для идентификации прихода данных списка регионов
private int rid__languages = -1;
private int rid__translations = -1;
private int rid_LocustsTypes = -1; //Виды саранчи
//private int rid_LocustsTypes = -1; //Виды саранчи
private int rid_list_density = -1;
private int rid_list_directions = -1; //Стороны света (направления)
private int rid_list_phase = -1;
@ -136,7 +134,7 @@ public class MySynchronizationOld
private int rid_list_diluted = -1;
private int rid_terminals = -1; //На кого зарегистрирован данныей планшет
private int rid_companies = -1;
*/
MySynchronizationOld(Context context)
{
_context = context;
@ -159,6 +157,17 @@ public class MySynchronizationOld
MySynchronizationOld.URL = URL;
}
public void renameImage(String name){
String path;
File pFile;
path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/Locust/" + name;
pFile = new File(path);
if (pFile.exists()) //Переименовываю файл чтобы заново не отправить при редактировании
{
pFile.renameTo(new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/Locust/_" + name));
}
}
/*public static HttpClient getTestHttpClient() {
try {
SSLContextBuilder builder = new SSLContextBuilder();
@ -206,15 +215,15 @@ public class MySynchronizationOld
String fname;
fname=cursor.getString(cursor.getColumnIndex("image_name1"));
if(fname!=null && !fname.equals(""))
myThread.addRequest("pic1",MySynchronizationOld.URL+"/get/?fn=6", null, Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/Locust/" + fname,null);
myThread.addRequest("pic1","xml",MySynchronizationOld.URL+"/get/?fn=6", null,null, Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/Locust/" + fname,null);
fname = cursor.getString(cursor.getColumnIndex("image_name2"));
if(fname!=null && !fname.equals(""))
myThread.addRequest("pic2",MySynchronizationOld.URL+"/get/?fn=6", null, Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/Locust/" + fname,null);
myThread.addRequest("pic2","xml",MySynchronizationOld.URL+"/get/?fn=6", null,null, Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/Locust/" + fname,null);
fname = cursor.getString(cursor.getColumnIndex("image_name3"));
if(fname!=null && !fname.equals(""))
myThread.addRequest("pic2",MySynchronizationOld.URL+"/get/?fn=6", null, Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/Locust/" + fname,null);
myThread.addRequest("pic2","xml",MySynchronizationOld.URL+"/get/?fn=6", null,null, Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/Locust/" + fname,null);
xml="<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
xml+="<metadata fn=\"4\">";
@ -245,7 +254,7 @@ public class MySynchronizationOld
cursor2.close();
xml+="</metadata>";
rid_sendFrmLocust = myThread.addRequest("sendFrmLocust",MySynchronizationOld.URL+"/get/", xml, null,null);
myThread.addRequest("sendFrmLocust","xml",MySynchronizationOld.URL+"/get/", xml, null,null,null);
}while (cursor.moveToNext());
}
@ -281,15 +290,15 @@ public class MySynchronizationOld
String fname;
fname=cursor.getString(cursor.getColumnIndex("image_name1"));
if(fname!=null && !fname.equals(""))
myThread.addRequest("pic1",MySynchronizationOld.URL+"/get/?fn=6", null, Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/Locust/" + fname,null);
myThread.addRequest("pic1","xml",MySynchronizationOld.URL+"/get/?fn=6", null, null,Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/Locust/" + fname,null);
fname = cursor.getString(cursor.getColumnIndex("image_name2"));
if(fname!=null && !fname.equals(""))
myThread.addRequest("pic2",MySynchronizationOld.URL+"/get/?fn=6", null, Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/Locust/" + fname,null);
myThread.addRequest("pic2","xml",MySynchronizationOld.URL+"/get/?fn=6", null, null,Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/Locust/" + fname,null);
fname = cursor.getString(cursor.getColumnIndex("image_name3"));
if(fname!=null && !fname.equals(""))
myThread.addRequest("pic3",MySynchronizationOld.URL+"/get/?fn=6", null, Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/Locust/" + fname,null);
myThread.addRequest("pic3","xml",MySynchronizationOld.URL+"/get/?fn=6", null, null,Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/Locust/" + fname,null);
xml="<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
@ -320,7 +329,7 @@ public class MySynchronizationOld
cursor2.close();
xml+="</metadata>";
rid_sendFrmLocust = myThread.addRequest("sendFrmLocust",MySynchronizationOld.URL+"/get/", xml, null,null);
myThread.addRequest("sendFrmLocust","xml",MySynchronizationOld.URL+"/get/", xml, null,null,null);
//Отправляю данные координат отдельно (без подтверждения доставки, потом нужно добавить поле send boolean и отправлять отдельно от frmlocustdel)
/* Cursor cursor3 = rdb.rawQuery("select uid,del,seq,frmlocustdel_uid,pos,lon,lat from frmlocustdel_locations where frmlocustdel_uid=? order by pos", new String[] { String.valueOf(uid) });
@ -354,7 +363,7 @@ public class MySynchronizationOld
}
cursor3.close();
//Отправляю пакет данных на сервер для вставки либо обновления
myThread.addRequest(tbl.name,MySynchronizationOld.URL+"/asdc/tctable/", null, null, outStream.toByteArray());
myThread.addRequest(tbl.name,"",MySynchronizationOld.URL+"/asdc/tctable/", null,null, null, outStream.toByteArray());
}while (cursor.moveToNext());
}
@ -390,19 +399,19 @@ public class MySynchronizationOld
String fname;
fname=cursor.getString(cursor.getColumnIndex("image_name1"));
if(fname!=null && !fname.equals(""))
myThread.addRequest("pic1",MySynchronizationOld.URL+"/get/?fn=6", null, Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/Locust/" + fname,null);
myThread.addRequest("pic1","xml",MySynchronizationOld.URL+"/get/?fn=6", null, null,Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/Locust/" + fname,null);
fname = cursor.getString(cursor.getColumnIndex("image_name2"));
if(fname!=null && !fname.equals(""))
myThread.addRequest("pic2",MySynchronizationOld.URL+"/get/?fn=6", null, Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/Locust/" + fname,null);
myThread.addRequest("pic2","xml",MySynchronizationOld.URL+"/get/?fn=6", null, null,Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/Locust/" + fname,null);
fname = cursor.getString(cursor.getColumnIndex("image_name3"));
if(fname!=null && !fname.equals(""))
myThread.addRequest("pic3",MySynchronizationOld.URL+"/get/?fn=6", null, Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/Locust/" + fname,null);
myThread.addRequest("pic3","xml",MySynchronizationOld.URL+"/get/?fn=6", null, null,Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/Locust/" + fname,null);
fname = cursor.getString(cursor.getColumnIndex("image_name4"));
if(fname!=null && !fname.equals(""))
myThread.addRequest("pic4",MySynchronizationOld.URL+"/get/?fn=6", null, Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/Locust/" + fname,null);
myThread.addRequest("pic4","xml",MySynchronizationOld.URL+"/get/?fn=6", null, null,Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/Locust/" + fname,null);
fname = cursor.getString(cursor.getColumnIndex("image_name5"));
if(fname!=null && !fname.equals(""))
myThread.addRequest("pic5",MySynchronizationOld.URL+"/get/?fn=6", null, Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/Locust/" + fname,null);
myThread.addRequest("pic5","xml",MySynchronizationOld.URL+"/get/?fn=6", null, null,Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/Locust/" + fname,null);
for(int i=0;i<cursor.getColumnCount();i++)
@ -415,7 +424,7 @@ public class MySynchronizationOld
throw new RuntimeException(e);
}
}
rid_sendFrmLocustHealth = myThread.addRequest("sendFrmLocustHealth",MySynchronizationOld.URL+"/asdc/FrmLocustHealth/", jsonObject.toString(), null,null);
myThread.addRequest("sendFrmLocustHealth","json",MySynchronizationOld.URL+"/asdc/frmlocusthealth/", null, jsonObject.toString(), null,null);
}while (cursor.moveToNext());
}
@ -449,9 +458,9 @@ public class MySynchronizationOld
}
dboh.close();
if(days!=null && !days.isEmpty() && country_id!=null && !country_id.isEmpty()){
return myThread.addRequest(tableName,MySynchronizationOld.URL+"/get/?fn=1&r=0&n="+tableName+"&s=" + seq + "&l=1000&days="+days+"&country_id="+country_id+"&android_id="+android_id,"", null,null);
return myThread.addRequest(tableName,"tbl",MySynchronizationOld.URL+"/get/?fn=1&r=0&n="+tableName+"&s=" + seq + "&l=1000&days="+days+"&country_id="+country_id+"&android_id="+android_id,"", null,null,null);
}else{
return myThread.addRequest(tableName,MySynchronizationOld.URL+"/get/?fn=1&r=0&n="+tableName+"&s=" + seq + "&l=1000","", null,null);
return myThread.addRequest(tableName,"tbl",MySynchronizationOld.URL+"/get/?fn=1&r=0&n="+tableName+"&s=" + seq + "&l=1000","", null,null,null);
}
}
@ -531,44 +540,41 @@ public class MySynchronizationOld
//Запрос в очередь на получение списка стран, направлений, итд.
rid_LocustsTypes = makeRequest("locuststypes",null,null);
rid_sprayers = makeRequest("sprayers",null,null);
rid_sprayers_types = makeRequest("sprayers_types",null,null);
rid_Fledgling = makeRequest("fledgling",null,null);
rid_list_density = makeRequest("list_density",null,null);
rid_list_phase = makeRequest("list_phase",null,null);
rid_list_directions = makeRequest("list_directions",null,null); //Стороны света (направления)
rid_list_damage = makeRequest("list_damage",null,null); //Справочник степень повреждения растительного покрова
rid_list_mortality = makeRequest("list_mortality",null,null); //Справочник степень повреждения растительного покрова
rid_list_greenery = makeRequest("list_greenery",null,null);
rid_list_biotope = makeRequest("list_biotope",null,null);
rid_list_cover = makeRequest("list_cover",null,null);
rid_list_age = makeRequest("list_age",null,null);
rid_list_actions = makeRequest("list_actions",null,null);
rid_list_paintings = makeRequest("list_paintings",null,null);
rid_list_behaviors = makeRequest("list_behaviors",null,null);
rid_list_breeding = makeRequest("list_breeding",null,null);
rid_list_capacities = makeRequest("list_capacities",null,null);
rid_list_markings = makeRequest("list_markings",null,null);
rid_list_containers = makeRequest("list_containers",null,null);
rid_list_containers_states = makeRequest("list_containers_states",null,null);
rid_list_vegetation = makeRequest("list_vegetation",null,null);
rid_list_formulation = makeRequest("list_formulation",null,null);
rid_list_height = makeRequest("list_height",null,null);
rid_list_enemies = makeRequest("list_enemies",null,null);
rid_list_purpose = makeRequest("list_purpose",null,null);
rid_list_impact = makeRequest("list_impact",null,null);
rid_list_diluted = makeRequest("list_diluted",null,null);
rid_terminals = makeRequest("terminals",null,null);
rid_companies = makeRequest("companies",null,null);
rid_countries = makeRequest("countries",null,null); //Если есть хоть 1 запись то считается что справочники хоть 1 раз загрузились
rid_CountriesRegions = makeRequest("countriesregions",null,null);
rid__languages = makeRequest("_languages",null,null);
rid__translations = makeRequest("_translations",null,null);
rid_Borns = makeRequest("borns",null,null); //Справочник отрождение "Начало", "Массовое".
makeRequest("locuststypes",null,null);
makeRequest("sprayers",null,null);
makeRequest("sprayers_types",null,null);
makeRequest("fledgling",null,null);
makeRequest("list_density",null,null);
makeRequest("list_phase",null,null);
makeRequest("list_directions",null,null); //Стороны света (направления)
makeRequest("list_damage",null,null); //Справочник степень повреждения растительного покрова
makeRequest("list_mortality",null,null); //Справочник степень повреждения растительного покрова
makeRequest("list_greenery",null,null);
makeRequest("list_biotope",null,null);
makeRequest("list_cover",null,null);
makeRequest("list_age",null,null);
makeRequest("list_actions",null,null);
makeRequest("list_paintings",null,null);
makeRequest("list_behaviors",null,null);
makeRequest("list_breeding",null,null);
makeRequest("list_capacities",null,null);
makeRequest("list_markings",null,null);
makeRequest("list_containers",null,null);
makeRequest("list_containers_states",null,null);
makeRequest("list_vegetation",null,null);
makeRequest("list_formulation",null,null);
makeRequest("list_height",null,null);
makeRequest("list_enemies",null,null);
makeRequest("list_purpose",null,null);
makeRequest("list_impact",null,null);
makeRequest("list_diluted",null,null);
makeRequest("terminals",null,null);
makeRequest("companies",null,null);
makeRequest("countries",null,null); //Если есть хоть 1 запись то считается что справочники хоть 1 раз загрузились
makeRequest("countriesregions",null,null);
makeRequest("_languages",null,null);
makeRequest("_translations",null,null);
makeRequest("borns",null,null); //Справочник отрождение "Начало", "Массовое".
//Загружаю формы саранчовых обработок за последние X дней для страны Y
dboh = new DbOpenHelper(_context);
@ -579,9 +585,8 @@ public class MySynchronizationOld
if(cursor.moveToFirst())
{
String country_id = cursor.getString(0);
rid_frmlocustdel = makeRequest("frmlocustdel",String.valueOf(MySynchronizationOld.SyncDays),country_id);
//Загружаю координаты для формы frmlocustdel
rid_frmlocustdel_locations = makeRequest("frmlocustdel_locations",String.valueOf(MySynchronizationOld.SyncDays),country_id);
makeRequest("frmlocustdel",String.valueOf(MySynchronizationOld.SyncDays),country_id);
makeRequest("frmlocustdel_locations",String.valueOf(MySynchronizationOld.SyncDays),country_id);
}
cursor.close();
}catch(Exception e){
@ -595,7 +600,14 @@ public class MySynchronizationOld
//Пришел ответ от HTTP сервера
//Если резутьтат true то сохранено (данные корректны)
//public boolean incomingData(int rid, byte[] data)
public boolean incomingData(int rid, String filePath)
/**
* Функция обрабатывает скаченные данные
* @param type Тип данных
* @param filePath файл с данными
* @return
*/
public boolean incomingData(String type, String filePath)
{
/*if (BuildConfig.DEBUG && ( 0 != ( getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE ) )) {
try {
@ -615,42 +627,14 @@ public class MySynchronizationOld
DbOpenHelper dbOpenHelper = new DbOpenHelper(_context);
//Пока не однообразно то по идентификаторам определяем что в двоичном формате
if((rid == rid_list_mortality && rid_list_mortality!=-1) || (rid == rid_list_damage && rid_list_damage!=-1) ||
(rid == rid_list_directions && rid_list_directions!=-1) || (rid == rid_Fledgling && rid_Fledgling!=-1) ||
(rid == rid_sprayers && rid_sprayers!=-1) || (rid == rid_sprayers_types && rid_sprayers_types!=-1) ||
(rid == rid_list_phase && rid_list_phase!=-1) || (rid == rid_list_density && rid_list_density!=-1) ||
(rid == rid_Borns && rid_Borns!=-1) || (rid == rid_LocustsTypes && rid_LocustsTypes!=-1) ||
(rid == rid_countries && rid_countries!=-1) || (rid==rid_CountriesRegions && rid_CountriesRegions!=-1) ||
(rid == rid__languages && rid__languages != -1) || (rid == rid__translations && rid__translations != -1) ||
(rid == rid_frmlocust && rid_frmlocust!=-1) || (rid == rid_frmlocustdel && rid_frmlocustdel!=-1) || (rid == rid_frmlocustdel_locations && rid_frmlocustdel_locations!=-1) ||
(rid == rid_list_greenery && rid_list_greenery!=-1) || (rid == rid_list_biotope && rid_list_biotope!=-1) ||
(rid == rid_list_cover && rid_list_cover!=-1) || (rid == rid_list_age && rid_list_age!=-1) ||
(rid == rid_list_actions && rid_list_actions!=-1) || (rid == rid_list_paintings && rid_list_paintings!=-1) ||
(rid == rid_list_behaviors && rid_list_behaviors!=-1) ||
(rid == rid_list_breeding && rid_list_breeding!=-1) ||
(rid == rid_list_capacities && rid_list_capacities!=-1) ||
(rid == rid_list_markings && rid_list_markings!=-1) ||
(rid == rid_list_containers && rid_list_containers!=-1) ||
(rid == rid_list_containers_states && rid_list_containers_states!=-1) ||
(rid == rid_list_vegetation && rid_list_vegetation!=-1) ||
(rid == rid_list_formulation && rid_list_formulation!=-1) ||
(rid == rid_list_height && rid_list_height!=-1) ||
(rid == rid_list_enemies && rid_list_enemies!=-1) ||
(rid == rid_list_purpose && rid_list_purpose!=-1) ||
(rid == rid_list_impact && rid_list_impact!=-1) ||
(rid == rid_list_diluted && rid_list_diluted!=-1) ||
(rid == rid_terminals && rid_terminals!=-1) ||
(rid == rid_companies && rid_companies!=-1)
)
if(type.equals("tbl"))
{
TCTable tbl=new TCTable("",0);
if(tbl.OpenTableH(is))
{
result = dbOpenHelper.updateTable(tbl);
}
}else //Данные в виде XML файла
}else if(type.equals("xml")) //Данные в виде XML файла
{
//Парсим файл
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
@ -692,7 +676,7 @@ public class MySynchronizationOld
wdb = dboh.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put("send", 1); //Отмечаем как отправленное
cv.put("send", 1); //Mark as sent
//cv.put("changed", 0); //Отмечаем как не измененное
wdb.beginTransaction(); //Вроде как защита от многопоточности (для сервиса)
@ -704,30 +688,12 @@ public class MySynchronizationOld
} finally {
wdb.endTransaction();
}
//Ищем имя файла по id и удаляем фотографии
//Rename photo files to avoid sending them again.
cursor = rdb.rawQuery("select image_name1, image_name2, image_name3 from frmlocust where uid=?;", new String[]{String.valueOf(uid)});
if (cursor.moveToFirst()) {
String path;
File pFile;
path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/Locust/" + cursor.getString(cursor.getColumnIndex("image_name1"));
pFile = new File(path);
if (pFile.exists()) //Переименовываю файл чтобы зановоне отправить при редактировании
{
pFile.renameTo(new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/Locust/_" + cursor.getString(cursor.getColumnIndex("image_name1"))));
}
path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/Locust/" + cursor.getString(cursor.getColumnIndex("image_name2"));
pFile = new File(path);
if (pFile.exists()) //Переименовываю файл чтобы зановоне отправить при редактировании
{
pFile.renameTo(new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/Locust/_" + cursor.getString(cursor.getColumnIndex("image_name2"))));
}
path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/Locust/" + cursor.getString(cursor.getColumnIndex("image_name3"));
pFile = new File(path);
if (pFile.exists()) //Переименовываю файл чтобы зановоне отправить при редактировании
{
pFile.renameTo(new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/Locust/_" + cursor.getString(cursor.getColumnIndex("image_name3"))));
}
renameImage(cursor.getString(cursor.getColumnIndex("image_name1")));
renameImage(cursor.getString(cursor.getColumnIndex("image_name2")));
renameImage(cursor.getString(cursor.getColumnIndex("image_name3")));
}
}catch(Exception e){
e.printStackTrace();
@ -751,7 +717,7 @@ public class MySynchronizationOld
wdb = dboh.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put("send", 1); //Отмечаем как отправленное
cv.put("send", 1); //Mark as sent
//cv.put("changed", 0); //Отмечаем как не измененное
wdb.beginTransaction(); //Вроде как защита от многопоточности (для сервиса)
@ -764,29 +730,12 @@ public class MySynchronizationOld
wdb.endTransaction();
}
//Ищем имя файла по id и удаляем фотографии
//Rename photo files to avoid sending them again.
cursor = rdb.rawQuery("select image_name1, image_name2, image_name3 from frmlocustdel where uid=?;", new String[]{String.valueOf(uid)});
if (cursor.moveToFirst()) {
String path;
File pFile;
path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/Locust/" + cursor.getString(cursor.getColumnIndex("image_name1"));
pFile = new File(path);
if (pFile.exists()) //Переименовываю файл чтобы заново не отправить при редактировании
{
pFile.renameTo(new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/Locust/_" + cursor.getString(cursor.getColumnIndex("image_name1"))));
}
path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/Locust/" + cursor.getString(cursor.getColumnIndex("image_name2"));
pFile = new File(path);
if (pFile.exists()) //Переименовываю файл чтобы заново не отправить при редактировании
{
pFile.renameTo(new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/Locust/_" + cursor.getString(cursor.getColumnIndex("image_name2"))));
}
path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/Locust/" + cursor.getString(cursor.getColumnIndex("image_name3"));
pFile = new File(path);
if (pFile.exists()) //Переименовываю файл чтобы заново не отправить при редактировании
{
pFile.renameTo(new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/Locust/_" + cursor.getString(cursor.getColumnIndex("image_name3"))));
}
renameImage(cursor.getString(cursor.getColumnIndex("image_name1")));
renameImage(cursor.getString(cursor.getColumnIndex("image_name2")));
renameImage(cursor.getString(cursor.getColumnIndex("image_name3")));
}
}catch(Exception e){
e.printStackTrace();
@ -795,18 +744,86 @@ public class MySynchronizationOld
if(wdb!=null){ wdb.close(); }
}
} else if (fn.equals("6")) //Фото отправлено
} else if (fn.equals("6")) //Photo sent to server
{
Log.i("CCALM", "Photo sent to server!");
}
} catch (Exception e) {
//throw new RuntimeException(e);
//MyAlert("ASDC: Synchronization error", e.toString());
//Toast.makeText(this, "MyAlarmService.onDestroy()", Toast.LENGTH_LONG).show();
Log.e("CCALM", "Error", e);
}
//if(_showAlert) dialog.dismiss();
}else if(type.equals("json"))
{
JSONObject jsonObject=null;
String jsonString = Tools.readInputStream(is);
if(jsonString!=null){
try {
jsonObject = new JSONObject(jsonString);
} catch (Exception e) {
e.printStackTrace();
}
}
if(jsonObject!=null){
if(jsonObject.has("error_code"))
{
if(jsonObject.getInt("error_code")!=0)
{
Log.e("CCALM", "Error: "+jsonObject.getString("error_message"));
}else{
String fn=jsonObject.getString("fn");
if(fn.equals("frmlocusthealth")){
String uid = jsonObject.getString("uid");
if (uid.isBlank() || uid == "null") uid = null;
Cursor cursor;
DbOpenHelper dboh = new DbOpenHelper(_context);
SQLiteDatabase rdb = null;
SQLiteDatabase wdb = null;
try {
rdb = dboh.getReadableDatabase();
wdb = dboh.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put("send", 1); //Mark as sent
//cv.put("changed", 0); //Отмечаем как не измененное
wdb.beginTransaction(); //Вроде как защита от многопоточности (для сервиса)
try {
wdb.update("frmlocusthealth", cv, "uid = ?", new String[]{String.valueOf(uid)});
wdb.setTransactionSuccessful();
}catch(Exception e){
e.printStackTrace();
} finally {
wdb.endTransaction();
}
//Rename photo files to avoid sending them again.
cursor = rdb.rawQuery("select image_name1, image_name2, image_name3, image_name4, image_name5 from frmlocusthealth where uid=?;", new String[]{String.valueOf(uid)});
if (cursor.moveToFirst()) {
renameImage(cursor.getString(cursor.getColumnIndex("image_name1")));
renameImage(cursor.getString(cursor.getColumnIndex("image_name2")));
renameImage(cursor.getString(cursor.getColumnIndex("image_name3")));
renameImage(cursor.getString(cursor.getColumnIndex("image_name4")));
renameImage(cursor.getString(cursor.getColumnIndex("image_name5")));
}
}catch(Exception e){
e.printStackTrace();
}finally{
if(rdb!=null){ rdb.close(); }
if(wdb!=null){ wdb.close(); }
}
}
}
}
}
Log.e("CCALM", "Unknown JSON data type");
}else{
Log.e("CCALM", "Unknown data type");
}
is.close();
file.delete();
@ -827,8 +844,12 @@ class MyThread extends Thread
class Tsk //Задание отправки данных
{
String name = ""; //Название запроса для дебага
String type = ""; //Тип ожидаемого результата, такие сейчас: "xml", "json", "tbl"
String url = ""; //URL куда отправлять данные
String str = ""; //Отправляемая строка
//String str = ""; //Отправляемая строка
String xml = ""; //Отправляемая XML строка
String json = ""; //Отправляемая JSON строка
String file = ""; //Отправляемый файл
byte[] data = null; //Отправляемые данные
Boolean s = false; //Integer s = 0; // false - не отправлялось true - в процессе отправки (если ошибка то ставиться статус не отправлено иначе удаляется из списка заданий)
@ -849,9 +870,8 @@ class MyThread extends Thread
@Override
public void handleMessage(Message msg) //Слушатель ответа после отправки данных на сервер
{
int rid = msg.getData().getInt("id");
//Boolean b = mListener.incomingData(rid, msg.getData().getByteArray("data")); //Слушатель должен вернуть true иниче запрос останется в очереди
Boolean b = mListener.incomingData(rid, msg.getData().getString("file")); //Слушатель должен вернуть true иниче запрос останется в очереди
String type = msg.getData().getString("type");
Boolean b = mListener.incomingData(type, msg.getData().getString("file")); //Слушатель должен вернуть true иниче запрос останется в очереди
try
{
@ -896,7 +916,7 @@ class MyThread extends Thread
// Добавление в задание на отправку до того как не получен ответ от предедущего запроса следующий не отсылается те. последовательно это делает (обработка результатов не в потоке загрузки а в основном потоке)
//return id запроса
public int addRequest(String name,String url, String str, String file,byte[] data)
public int addRequest(String name, String type,String url, String xml, String json, String file,byte[] data)
{
mId++; //Инкрементируем идентификатор запроса
try
@ -904,8 +924,10 @@ class MyThread extends Thread
mSemaphore.acquire();
Tsk t = new Tsk();
t.name = name;
t.type = type; //waiting result data type
t.url = url;
t.str = str;
t.xml = xml;
t.json = json;
t.file = file;
t.data = data;
t.s = false;
@ -965,9 +987,9 @@ class MyThread extends Thread
//Выполняем задание на отправку/приём данных
if(tsk != null)
{
Log.i("igor", "download task = "+tsk.name);
Log.i("CCALM", "download task = "+tsk.name);
//if(tsk.name.equals("frmlocustdel_locations")){
// Log.i("igor", "download task = "+tsk.name);
// Log.i("CCALM", "download task = "+tsk.name);
//}
boolean bError=false;
tsk.s = true; //Признак отправляемости запроса на сервер
@ -975,7 +997,7 @@ class MyThread extends Thread
try {
sleep(tsk.wait); //Если в задании задано сколько подождать перед запуском
} catch (InterruptedException ex) {
Log.i("igor", "Sleep error",ex);
Log.i("CCALM", "Sleep error",ex);
}
try
@ -1045,14 +1067,25 @@ class MyThread extends Thread
dos.writeBytes("--" + boundary + "--" + crlf);
dos.flush();
dos.close();
}else{
}else if(tsk.xml!=null) {
conn.setRequestProperty("Accept-Charset", "UTF-8");
conn.setRequestProperty("Content-Type", "application/xml; charset=utf-8");
conn.setRequestProperty("Accept", "application/xml");
OutputStream os = conn.getOutputStream();
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, "UTF-8"));
writer.write(tsk.str);
writer.write(tsk.xml);
writer.flush();
writer.close();
os.close();
}else if(tsk.json!=null) {
conn.setRequestProperty("Accept-Charset", "UTF-8");
conn.setRequestProperty("Content-Type", "application/json; charset=utf-8");
conn.setRequestProperty("Accept", "application/json");
OutputStream os = conn.getOutputStream();
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, "UTF-8"));
writer.write(tsk.json);
writer.flush();
writer.close();
os.close();
@ -1079,13 +1112,13 @@ class MyThread extends Thread
Message msg = myHandle.obtainMessage();
Bundle b = new Bundle();
b.putString("file", filePath);
b.putInt("id", tsk.id);
b.putString("type", tsk.type);
msg.setData(b);
myHandle.sendMessage(msg);
}
} catch (Exception ex) {
bError = true;
Log.i("igor", "URL = "+tsk.url,ex);
Log.i("CCALM", "URL = "+tsk.url,ex);
}
/*
HttpClient httpClient = new DefaultHttpClient();
@ -1140,15 +1173,15 @@ class MyThread extends Thread
} catch (UnsupportedEncodingException ex)
{
bError = true;
Log.i("igor", "Error 5 = " + ex.toString());
Log.i("CCALM", "Error 5 = " + ex.toString());
} catch (ClientProtocolException ex)
{
bError = true;
Log.i("igor", "Error 6 = " + ex.toString());
Log.i("CCALM", "Error 6 = " + ex.toString());
} catch (IOException ex)
{
bError = true;
Log.i("igor", "Error 7 = " + ex.toString());
Log.i("CCALM", "Error 7 = " + ex.toString());
}
*/

View File

@ -17,8 +17,10 @@ import android.widget.Spinner;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.text.ParseException;
@ -45,6 +47,21 @@ import android.widget.AdapterView.OnItemSelectedListener;
*/
public class Tools
{
// Чтение строки из InputStream
public static String readInputStream(InputStream is) {
try {
byte[] buffer = new byte[1024];
StringBuilder result = new StringBuilder();
int length;
while ((length = is.read(buffer)) != -1) {
result.append(new String(buffer, 0, length, StandardCharsets.UTF_8));
}
return result.toString();
} catch (IOException e) {
return null;
}
}
public static Date getDateFromStr(String str) {
if(str==null)
return null;