Использую sdk oneDrive, пишу свою программу для взаимодействия с oneDrive.
У меня есть 3 папки вложенных. назовем их папка один, папка два и папка три. В папке один есть папка два, в папке два есть папка три. Вот в 3 папку я собираюсь загрузить файл. Загрузка происходит успешно. Потом я хочу вернуться назад по BackStack и происходит вот что: из папки 3 я перехожу в папку 2, из папки 2 я вновь перехожу в папку 3. И папка 3 становится рутовой. В чем причина этого явления?
Вот как происходит загрузкаpublic void upload(final int requestCode) {
final Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setType(ACCEPTED_UPLOAD_MIME_TYPES);
startActivityForResult(intent, requestCode);
}
@Override
public void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
final LoginActivity application = (LoginActivity) getActivity();
final IOneDriveClient oneDriveClient = application.getOneDriveClient();
mItemId = ((LoginActivity) getActivity()).pathOneDrive;
Log.e(TAG, "onActivityResult mITEMid: " + ((LoginActivity) getActivity()).pathOneDrive);
if (requestCode == REQUEST_CODE_SIMPLE_UPLOAD
&& data != null
&& data.getData() != null
&& data.getData().getScheme().equalsIgnoreCase(SCHEME_CONTENT)) {
final ProgressDialog dialog = new ProgressDialog(getActivity());
dialog.setTitle(R.string.upload_in_progress_title);
dialog.setMessage(getString(R.string.upload_in_progress_message));
dialog.setIndeterminate(false);
dialog.setCancelable(false);
dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
dialog.setProgressNumberFormat(getString(R.string.upload_in_progress_number_format));
dialog.show();
final AsyncTask<Void, Void, Void> uploadFile = new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(final Void... params) {
try {
final ContentResolver contentResolver = getActivity().getContentResolver();
final ContentProviderClient contentProvider = contentResolver
.acquireContentProviderClient(data.getData());
final byte[] fileInMemory = FileContent.getFileBytes(contentProvider, data.getData());
contentProvider.release();
// Fix up the file name (needed for camera roll photos, etc)
final String filename = FileContent.getValidFileName(contentResolver, data.getData());
final Option option = new QueryOption("@name.conflictBehavior", "fail");
oneDriveClient
.getDrive()
.getItems(((LoginActivity) getActivity()).pathOneDrive)
.getChildren()
.byId(filename)
.getContent()
.buildRequest(Collections.singletonList(option))
.put(fileInMemory,
new IProgressCallback<Item>() {
@Override
public void success(final Item item) {
dialog.dismiss();
Toast.makeText(getActivity(),
application
.getString(R.string.upload_complete,
item.name),
Toast.LENGTH_LONG).show();
refresh(((LoginActivity) getActivity()).pathOneDrive);
//getFragmentManager().popBackStack();
}
@Override
public void failure(final ClientException error) {
dialog.dismiss();
if (error.isError(OneDriveErrorCodes.NameAlreadyExists)) {
Toast.makeText(getActivity(),
R.string.upload_failed_name_conflict,
Toast.LENGTH_LONG).show();
} else {
Toast.makeText(getActivity(),
application
.getString(R.string.upload_failed,
filename),
Toast.LENGTH_LONG).show();
}
}
@Override
public void progress(final long current, final long max) {
dialog.setProgress((int) current);
dialog.setMax((int) max);
}
});
} catch (final Exception e) {
Log.e(getClass().getSimpleName(), e.getMessage());
Log.e(getClass().getSimpleName(), e.toString());
}
return null;
}
};
uploadFile.execute();
}
}