0

所以我希望我的应用程序能够让用户能够从数据库中导出值(在这种情况下是用户创建的条目)并将它们提供给具有相同应用程序的另一部手机,以便他们可以导入这些值并直接插入他们在他们的数据库中,所以两部手机都将拥有相同的数据。数据不是整个数据库,而只是其中的一部分,具体取决于用户想要共享的内容。我不想使用网络服务,因为我想要一个有形的文件来工作。所以说我将我的数据库值导出到一个文件中并通过电子邮件发送它们,但我希望用户能够选择导出文件的文件夹并亲自去标准文本消息应用程序并附加将文件添加到短信中,就像他们将图片一样。在这种情况下我有什么选择?谢谢!

4

1 回答 1

1

我认为最好的方法是生成某种形式的可解析文件来表示您希望共享的数据,然后您可以将其保存到文件中(我个人会使用 JSON,但也可以使用 XML 等)。

要生成所需的 JSON,您可以遵循与下面类似的方法(除了明显的“MyDataClass”之外,下面的所有类都包含在 Android SDK 或 Java 中)

    JSONArray export = new JSONArray();
    for(MyDataClass model : exportObjects)
    {
        JSONObject obj = new JSONObject();
        obj.put("attribute1", model.getAttribute1());
        obj.put("attribute2", model.getAttribute2());
        ...

        export.put(obj);
    }

    String jsonString = export.toString();

这将创建一个有效的 JSON 字符串,您将能够使用标准 Java 文件类和清单中的适当使用权限 (android.permission.WRITE_ETERNAL_STORAGE) 将其写入文件

    File outFile = new File("Absolute save path");
    outFile.getParentFile().mkdirs();               //Ensure the parent directory exists
    FileOutputStream outputStream = 
            new FileOutputStream(outFile);          //Create a stream to access the file
    outputStream.write(jsonString.getBytes());      //Write the data
    outputStream.flush();
    outputStream.close();                           //Cleanup

您如何确定“绝对保存路径”的值很大程度上取决于您的个人偏好,并且可以通过多种方式获得,例如

  • 在代码中指定/生成路径
  • 提示用户将文本保存位置或文件名与代码中提供的绝对目录组合(请注意,UX 不是我的强项:P)

我还假设您可以使用 Intent 启动文件浏览器活动以指定保存位置或外部库,例如此处

然后,接收应用程序将使用类似于以下内容的内容将此文件加载到字符串中

    String loadedJSON = "";
    File inFile = new File("Absolute path");
    FileInputStream fis = new FileInputStream(inFile);
    byte[] buffer = new byte[1024];
    int readBytes;
    while((readBytes = fis.read(buffer, 0, 1024))>=0)
    {
        loadedJSON.concat(new String(buffer, 0, readBytes));
    }
    fis.close();

然后简单的把第一步创建 JSONArray 的过程倒过来

    List<MyDataClass> objectModels = new ArrayList<MyDataClass>();
    JSONArray parsedData = new JSONArray(loadedJSON);
    for(int i = 0; i<parsedData.length(); ++i)
    {
        JSONObject jObj = parsedData.getJSONObject(i);
        MyDataClass newObjectModel = new MyDataClass();
        newObjectModel.setAttribute1(jObj.getString("attribute1"));
        newObjectModel.setAttribute2(jObj.getInt("attribute2"));
        ...

        objectModels.add(newObjectModel);
    }

然后将这些解析的对象模型中的每一个插入到您的数据库中,但最适合您的应用程序。

于 2013-01-23T22:29:32.493 回答