Back to project page vocabulary-list.
The source code is released under:
Apache License
If you think the Android project vocabulary-list listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.
package com.rulych.vocabularylist.model.persistence.impl; /* www .j av a2s . co m*/ import com.google.android.gms.common.api.GoogleApiClient; import com.google.android.gms.common.api.Status; import com.google.android.gms.drive.Contents; import com.google.android.gms.drive.DriveFile; import com.google.gson.Gson; import com.rulych.vocabularylist.model.Card; import com.rulych.vocabularylist.model.persistence.impl.exception.CouldNotWriteFileException; import java.io.OutputStreamWriter; import java.util.List; import rx.Observable; import rx.functions.Func0; import rx.schedulers.Schedulers; import rx.util.async.Async; import static com.google.android.gms.drive.DriveApi.ContentsResult; import static com.google.android.gms.drive.DriveFile.MODE_WRITE_ONLY; public class CardListWriterImpl implements CardListWriter { private Gson mGson; private GoogleApiClient mApiClient; private DriveFile mDriveFile; public CardListWriterImpl(Gson gson, GoogleApiClient apiClient, DriveFile driveFile) { mGson = gson; mApiClient = apiClient; mDriveFile = driveFile; } public Observable<Void> write(final List<Card> cards) { return Async.start(new WriteFileFunc(cards), Schedulers.io()); } private class WriteFileFunc implements Func0<Void> { private final List<Card> mCards; private Contents mContents; public WriteFileFunc(List<Card> cards) { mCards = cards; } @Override public Void call() { getFileContents(); writeFile(); commitFile(); return null; } private void getFileContents() { ContentsResult result = mDriveFile.openContents(mApiClient, MODE_WRITE_ONLY, null) .await(); if (!result.getStatus().isSuccess()) { throw new CouldNotWriteFileException("Error while trying to open file: (%d) %s", result.getStatus().getStatusCode(), result.getStatus().getStatusMessage()); } mContents = result.getContents(); } private void writeFile() { OutputStreamWriter outputStreamWriter = null; try { outputStreamWriter = new OutputStreamWriter(mContents.getOutputStream()); mGson.toJson(mCards, mCards.getClass(), outputStreamWriter); } finally { try { outputStreamWriter.close(); } catch (Exception e) { // Nothing! } } } private void commitFile() { Status status = mDriveFile.commitAndCloseContents(mApiClient, mContents).await(); if (!status.getStatus().isSuccess()) { throw new CouldNotWriteFileException("Error with file commit: (%d) %s", status.getStatus().getStatusCode(), status.getStatus().getStatusMessage()); } } } }