Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 正在拆分sqlite文件以进行同步_Android_Sqlite_Split_Http Post_Android Syncadapter - Fatal编程技术网

Android 正在拆分sqlite文件以进行同步

Android 正在拆分sqlite文件以进行同步,android,sqlite,split,http-post,android-syncadapter,Android,Sqlite,Split,Http Post,Android Syncadapter,我正在编写一个Android应用程序,它从传感器收集数据并将其存储在本地SQLite数据库中 我想做的是将这些数据(读:上传)与后端应用程序同步(我正在使用Android的同步适配器) 由于数据可以在同步过程中获取,我认为将sqlite文件的最大大小设置为700 Kb是合理的(这并不重要),因此同步适配器将同步那些700 Kb的文件(通过POST请求),而不包括活动文件。一旦sqlite文件达到极限,我将创建一个新的活动sqlite db并写入它 如何实现这一点?也许有更好的解决方案? 最后,我

我正在编写一个Android应用程序,它从传感器收集数据并将其存储在本地SQLite数据库中

我想做的是将这些数据(读:上传)与后端应用程序同步(我正在使用Android的同步适配器)

由于数据可以在同步过程中获取,我认为将sqlite文件的最大大小设置为700 Kb是合理的(这并不重要),因此同步适配器将同步那些700 Kb的文件(通过POST请求),而不包括活动文件。一旦sqlite文件达到极限,我将创建一个新的活动sqlite db并写入它

如何实现这一点?也许有更好的解决方案?

  • 最后,我决定只使用一个带有“synced_at”字段的数据库文件
  • 我还用于在将新数据写入数据库时读取数据(要同步)
  • MySQLiteHelper类是使用单例模式实现的,因此在我的例子中,您可以从主活动和同步适配器并发访问数据库
  • 在将数据发送到服务器之前,我还压缩了数据(对于文本,我使用gzip实现了5倍的压缩)
数据pojo:

@AllArgsConstructor
@NoArgsConstructor
@Builder
@Getter
@Setter
public class Data {
    private long id;
    private float a;
    private float b;
    private float c;
    private long timestamp;
    private long synced_at;
}
MySQLiteHelper:

public class MySQLiteHelper extends SQLiteOpenHelper {

    private static MySQLiteHelper sInstance;

    public static final String DB_NAME = "db.sqlite";
    public static final int DB_VERSION = 1;
    public static final String TABLE_NAME = "data";

    public static synchronized MySQLiteHelper getInstance(Context context) {
        if (sInstance == null) {
            sInstance = new MySQLiteHelper(context.getApplicationContext());
        }
        return sInstance;
    }

    private MySQLiteHelper(Context context) {
        super(context, context.getExternalFilesDir(null).getAbsolutePath() + "/" + DB_NAME,
                null, DB_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        String createDbSql = "...";
        sqLiteDatabase.execSQL(createDbSql);
        Log.d("log", "db created");
    }

    @Override
    public void onOpen(SQLiteDatabase db) {
        super.onOpen(db);
        Log.d("log", "db opened");
    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion) {
        Log.d("log", "db upgraded");
    }
}