Murayama blog.

プログラミングと、その次の話

AndroidでParse入門 - Files -

元ネタ

こちらを参考にFilesについてまとめます。
https://parse.com/docs/android_guide#files

前回の記事はこちら。
AndroidでParse入門 - Subclasses - - Murayama blog.

The ParseFile

ParseFileを使えば、PerseObjectには収まり切らないファイルであってもクラウド上に保存することができます。画像ファイルはその代表的なものですが、ドキュメント、ビデオ、ミュージックファイル、その他のバイナリデータも該当します(最大10MBまで)。

ParseFileを取得するのは簡単です。byte[]でデータを用意して、それからParseFileを作成します。例えばStringデータを格納する場合は次のようになります。

byte[] data = "Working at Parse is great!".getBytes();
ParseFile file = new ParseFile("resume.txt", data);

ここではファイル名をresume.txtとしています。気をつけることが2つあります。

  • ファイル名は衝突しません。個々のファイルには、アップロード時にユニークな識別子が割り振られます。そのため、resume.txtを複数回アップロードしても問題は発生しません。
  • ファイル名に含まれる拡張子は重要です。Parseは、拡張子をもとにファイルをどう扱うべきか決定します。たとえば、PNGイメージを保存するのであれば拡張しは.pngとするようにしてください。


次に、クラウド上に保存する方法を見てみましょう。ParseObjcectの場合と同様に、いくつかの種類のsaveメソッドが提供されています。また、コールバックやエラーハンドリングを組み合わせて使うことができます。

file.saveInBackground();


保存が完了すると、他のデータと同じようにParseFileをPerseObjectに関連付けることができます。

ParseObject jobApplication = new ParseObject("JobApplication");
jobApplication.put("applicantName", "Joe Smith");
jobApplication.put("applicantResumeFile", file);
jobApplication.saveInBackground();


getData関連のメソッドを呼び出せば、データを取り出すことができます。次の例では、他のJobApplicationオブジェクトからファイルを取り出します。

ParseFile applicantResume = (ParseFile)anotherApplication.get("applicantResumeFile");
applicantResume.getDataInBackground(new GetDataCallback() {
  public void done(byte[] data, ParseException e) {
    if (e == null) {
      // data has the bytes for the resume
    } else {
      // something went wrong
    }
  }
});

ParseObjectの場合と同様、バックグラウンドで取得するgetDataメソッドを使うことが多いでしょう。

Progress

ParseFileは、ファイルのアップロード、ダウンロードの進捗を簡単に表示できます。これには、saveInBackgroundメソッドやgetDataInBackgroundメソッドの引数にProgressCallbackを渡します。例を観てみましょう。

byte[] data = "Working at Parse is great!".getBytes();
ParseFile file = new ParseFile("resume.txt", data);
 
file.saveInBackground(new SaveCallback() {
  public void done(ParseException e) {
    // Handle success or failure here ...
  }
}, new ProgressCallback() {
  public void done(Integer percentDone) {
    // Update your progress spinner here. percentDone will be between 0 and 100.
  }
});

REST APIを使えば、オブジェクトによって参照されているファイルを削除することができます。ファイルの削除を許可するためにはマスターキーが必要になります。

ファイルがアプリ内のどのオブジェクトからも参照されていない場合は、REST APIを使って削除することはできません。ただし、アプリの設定ページ(Setting page)で、未使用のファイルを削除することができます。URLプロパティを介した場合、参照されていないファイルへのアクセスができないことに気をつけてください。設定ページでの削除は、オブジェクトに関連付けられているファイルに影響はありません。