@gibsonen

Перезаписывается на «хвост» BackStack совсем не тот фрагмент, когда выполняю загрузку файла?

Использую 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();
        }
    }
  • Вопрос задан
  • 65 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы