gpt4 book ai didi

java - 如何在 Sqlite 数据库中存储 ArrayList

转载 作者:行者123 更新时间:2023-11-30 02:09:41 25 4
gpt4 key购买 nike

我正在开发一款跟踪用户移动的应用。在每个 onLocationChanged()我将纬度和经度存储在 ArrayList<latLng> 中然后在路线上画一条折线。现在,当activity停止我想保存所有用户 Activity 信息,如:

  • 距离
  • 平均速度
  • 持续时间
  • 所有 ArrayList latlng Activity 点

关于 Sqlite数据库稍后恢复它并用这些点绘制折线。我不知道如何存储 ArrayList 的问题经纬度到数据库。任何人都可以帮忙吗?

我的解决方案编辑,也许会对某人有所帮助!

public class SQLUtils extends SQLiteOpenHelper {

private static final String DB_NAME = "data.db";
private static final int DB_VERSION = 1;
private static final String run_table = "Run_table";
private static final String locationPoints = "Location_points";

public SQLUtils(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {
Log.d("DB", "onCreate");

String runTable = "create table " + run_table + "(ID VARCHAR(10), PACE VARCHAR(10), DURATION VARCHAR(10), DISTANCE VARCHAR(10), DATE VARCHAR(10), TIME VARCHAR(10));";
String LocationTable = "create table " + locationPoints + "(ID INTEGER, POSITION INTEGER, Latitude REAL, Longitude REAL);";

db.execSQL(runTable);
db.execSQL(LocationTable);
}

public void insertRunData(String id, String pace,String duration, String distance, String date, String time) {
Log.d("DB", "onInsertRunData");

SQLiteDatabase db = this.getWritableDatabase();

String sql = "INSERT into " + run_table +
" (ID, PACE, DURATION, DISTANCE, DATE, TIME) VALUES ('" + id + "','" + pace + "','" + duration + "','" + distance +
"','" + date + "','" + time + "')";

db.execSQL(sql);

db.close();
}

public void insertLatLng(String id, int position, double latitude, double longitude){
SQLiteDatabase db = this.getWritableDatabase();

String sql = "INSERT into " + locationPoints +
" (ID, POSITION, LATITUDE, LONGITUDE) VALUES ('" + UUID.fromString(id) + "','" + Integer.toString(position) + "','"
+ String.valueOf(latitude) + "','" + String.valueOf(longitude) + "')";

db.execSQL(sql);
db.close();
}

运行 fragment 类:

    private void saveSqlRun() {
SQLUtils sqlUtils = new SQLUtils(getActivity());
sqlUtils.insertRunData(currentRun.getId(), currentRun.getAveragePace(), currentRun.getRunDuration(),
currentRun.getRunDistance(), currentRun.getRunDate(),currentRun.getRunTime());

/* Save user Location points */
for (int index = 0; index < currentRun.getLocationPoints().size(); ++index) {
sqlUtils.insertLatLng(currentRun.getId(), index, currentRun.getLocationPoints().get(index).latitude, currentRun.getLocationPoints().get(index).longitude);
}
}

这就是 run_rable 的样子: enter image description here

这就是 Location_points 的样子: enter image description here

最佳答案

首先阅读关于 Sqlite

那么你应该阅读 Content Providers

了解如何在 android 中使用 sqlite 后,设计您的表格。我猜你会有一个包含列的表:

 id, userId, lat, lng, timeStamp.

现在您可以轻松获取每个用户的位置和时间,并计算所有其余部分。

给你一个关于如何存储 ArrayList 的小提示然后使用类似的东西:

ArrayList<ContentProviderOperation> ops
for (LatLng latLng : list) {
ops.add(ContentProviderOperation.insert(Uri).withValue("userId", userId).withValue("lat", 32.3232)...build()
}

getActivity().getContentResolver().applyBatch("AUTHORITY", ops)

关于java - 如何在 Sqlite 数据库中存储 ArrayList<LatLng>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30285951/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com