我有一个应用程序,该应用程序需要实现“共享”选项才能将设备本地数据库中包含的数据传输到另一台设备,该设备可以在其中获取这些数据并将其插入到设备数据库中的相应表中。
我正在通过蓝牙进行通讯,我只是在寻找一种传输数据的好方法。是否有一种简单的方法可以在设备A上执行sqlite转储,使用蓝牙将其传输到设备B,并让设备B重新插入此数据?
最佳答案
实现ContentProvider是如何利用Android框架对数据库进行CRUD操作。
一个好方法是将一行转换为Json并在接收方解包该字符串以插入它。这种方法更具可测试性,更易于从发送期间的错误中恢复,但是根据数据的大小,它可能会非常缓慢。为了加快速度,我将分批发送多行并进行测试,以查看哪种批次大小最适合速度和可靠性。
一种快速的方法可能是将数据转储到平面文件,然后使用FileProvider作为URI提供对该文件的访问,然后尝试从here中进行以下操作
public void sendFile(Uri uri, BluetoothSocket bs) throws IOException {
BufferedInputStream bis = new BufferedInputStream(getContentResolver().openInputStream(uri));
OutputStream os = bs.getOutputStream();
try {
int bufferSize = 1024;
byte[] buffer = new byte[bufferSize];
// we need to know how may bytes were read to write them to the byteBuffer
int len = 0;
while ((len = bis.read(buffer)) != -1) {
os.write(buffer, 0, len);
}
} finally {
bis.close();
os.flush();
os.close();
bs.close();
}
}