簡體   English   中英

如何存儲ArrayList <LatLng> 在Sqlite數據庫上?

[英]How to store ArrayList<LatLng> on Sqlite database?

我正在開發一個跟蹤用戶運動的應用程序。 在每個onLocationChanged()我將緯度和經度存儲在ArrayList<latLng>然后在路線上繪制一條折線。 現在,當activity停止時,我想保存所有用戶的活動信息,例如:

  • 距離
  • 平均速度
  • 持續時間
  • 活動的所有ArrayList點

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();
}

運行片段類:

    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的樣子: 在此處輸入圖片說明

那就是Location_points的樣子: 在此處輸入圖片說明

首先了解Sqlite

然后,您應該閱讀有關內容提供商的信息

了解了如何在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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM