Я разрабатываю приложение для отслеживания транспортных средств и расчета расстояния, пройденного ими. У меня есть устройство, установленное на транспортных средствах, которые отправляют LatLngs
на мой мобильный телефон с помощью SMS. В моем приложении хранится SMS-сообщение, содержащее LatLng
в SQLiteDatabase
. Моя таблица имеет одну широту и долготу в строке. С каждым днем количество строк в моем столе растет. Когда я извлекаю эти данные из таблицы, чтобы нарисовать карту и вычислять расстояние, мое приложение замерзает за одну секунду между каждым попыткой доступа к данным из таблицы. Как сделать это быстрее? Любые предложения, пожалуйста.Выполняет ли выполнение операций с базой данных в MainActivity зависает пользовательский интерфейс?
public void calculateDistance(String date) {
googleMap.clear();
double cumulativeDistance = 0;
String selectLog1="select rowid _id,* from logTable where date='"+date+"' and deviceNo='"+deviceNo+"'";
Cursor cursor4=db.rawQuery(selectLog1,null);
if(cursor4.getCount()>2) {
while (cursor4.moveToNext()) {
String strLatLng = cursor4.getString(cursor4.getColumnIndex("log"));
strDate11=cursor4.getString(cursor4.getColumnIndex("date"));
String[] strArray = strLatLng.split(",");
latitude2 = Double.parseDouble(strArray[0]);
longitude2 = Double.parseDouble(strArray[1]);
time11=strArray[2];
coordList1.add(new LatLng(latitude2, longitude2));
timeList.add(strLatLng+","+time11);
}
BitmapDescriptor bitmapDescriptor = BitmapDescriptorFactory.fromResource(R.drawable.ledorange);
for (String strData:timeList){
String[] strDatas=strData.split(",");
double latData=Double.parseDouble(strDatas[0]);
double lngData=Double.parseDouble(strDatas[1]);
String timeAt=strDatas[2];
googleMap.addMarker(new MarkerOptions().position(new LatLng(latData,lngData)).title(vehicleName).icon(bitmapDescriptor).snippet("Known @ " + timeAt + "," + strDate11));
}
timeList.removeAll(timeList);
CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngZoom(new LatLng(latitude2, longitude2), 12.5f);
googleMap.animateCamera(cameraUpdate);
googleMap.addPolyline(new PolylineOptions().addAll(coordList1).width(10).color(getResources().getColor(R.color.myBlue)));
DecimalFormat format = null;
for (int i = 0; i < (coordList1.size() - 1); i++) {
LatLng l1 = coordList1.get(i);
double lat1 = l1.latitude;
double lng1 = l1.longitude;
Location location1 = new Location("");
location1.setLatitude(lat1);
location1.setLongitude(lng1);
LatLng l2 = coordList1.get(i + 1);
double lat2 = l2.latitude;
double lng2 = l2.longitude;
Location location2 = new Location("");
location2.setLatitude(lat2);
location2.setLongitude(lng2);
format = new DecimalFormat("#.##");
double distance = location1.distanceTo(location2)/1000;
cumulativeDistance = cumulativeDistance + distance;
}
if (preferences.contains("errorRatio")) {
cumulativeDistance =cumulativeDistance + (cumulativeDistance/100) * preferences.getInt("errorRatio", 0);
}
tvDistance.setText(format.format(cumulativeDistance) + " Km's");
coordList1.removeAll(coordList1);
}else {
tvDistance.setText("No Data");
}
}
'Индексирование' ваш поиск и объединение столбцов - ваш друг. И «AsyncTask». –