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