0

したがって、ユーザーがデータベースから値をエクスポートできる機能 (この場合はユーザーが作成したエントリ) をアプリに持たせ、同じアプリを使用して別の電話にそれらの値をインポートして直接挿入できるようにする必要があります。それらをデータベースに保存して、両方の電話に同じデータが含まれるようにします。データはデータベース全体ではなく、ユーザーが共有したいものに応じてその一部にすぎません。有形のファイルが必要なため、Webサービスを使用したくありません。たとえば、データベースの値をファイルにエクスポートして、たとえば電子メールで送信するとしますが、ユーザーはファイルをエクスポートするフォルダーを選択し、個人的に標準のテキスト メッセージング アプリに移動して添付できるようにしたいと考えています。写真のように、ファイルをテキスト メッセージに送信します。この場合、どのような選択肢がありますか? ありがとう!

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

これにより、標準の Java ファイル クラスとマニフェストの適切な Uses Permission (android.permission.WRITE_ETERNAL_STORAGE) を使用して、ファイルに書き込むことができる有効な JSON 文字列が作成されます。

    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 に答える