我有一个应用程序,需要实现'share'选项,将设备本地数据库中包含的数据传输到另一个设备,该设备可以获取此数据并将其插入设备数据库中的相应表中。
我通过蓝牙进行通信,我只是在寻找一种传输这些数据的好方法。是否有一种简单的方法可以在设备A上执行sqlite转储,使用蓝牙将其传输到设备B,并让设备B重新插入此数据?
答案 0 :(得分:1)
实现ContentProvider是利用Android框架对数据库进行CRUD操作的方法。
一种好方法可能是将一行转换为Json并在接收端解包该字符串以插入它。这种方式更易测试,在发送过程中更容易从错误中恢复,但可能会非常慢,具体取决于数据的大小。为了加快速度,我会分批发送多行,并测试哪种批量大小最适合速度和可靠性。
快速的方法可能是将数据转储到平面文件,然后使用FileProvider提供对该文件的访问权限,并尝试使用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();
}
}