Приложение вылетает при нажатии кнопки назад, используя загрузчик курсора - PullRequest
0 голосов
/ 05 октября 2018

Итак, я загрузил все свои изображения с помощью загрузчика курсора и перенес эти изображения в адаптер (адаптер, используемый в gridview).Я реализовал прослушиватель по щелчку в виде сетки, который будет отображать изображение в новом действии.

Все это работает нормально, однако, когда я нажимаю кнопку «Назад», я ожидаю вернуться к своей основной деятельности (просмотр сетки со всеми изображениями), но мое приложение вылетает.

Вот некоторые подробности.

Метод создания.

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // The gridview, and the image adapter is set up here.
    setupViews();

    // Once runtime permission is given, image paths are
    // 1. pulled into a cursor,
    // 2. added onto the imageAdapter
    // 3. and the imageAdapter is set to be used by the gridview.
    askForRuntimePermission();
}

askForRuntimePermission и onRequestPermissionsResult (метод обратного вызова).

private void askForRuntimePermission() {

    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, STORAGE_PERMISSION_CODE);
    }
    else
    {
        getSupportLoaderManager().initLoader(MEDIASTORE_LOADER_ID,null,this);


    }

}

/**
 * Callback method for request permmissions method.
 * @param requestCode
 * @param permissions
 * @param grantResults
 */
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    switch(requestCode)
    {
        case STORAGE_PERMISSION_CODE:
            if(grantResults[0]==PackageManager.PERMISSION_GRANTED){

                getSupportLoaderManager().initLoader(MEDIASTORE_LOADER_ID,null,this);

            }
            else
            {
                Toast.makeText(this,"Permission Denied",Toast.LENGTH_SHORT).show();
                finish();
            }
            break;
    }
}

Реализация загрузчика курсора.

@NonNull
@Override
public Loader<Cursor> onCreateLoader(int i, @Nullable Bundle bundle) {
   String[] projection = {MediaStore.Images.Media.DATA};
   return new CursorLoader(this,
           MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
           projection,
           null,
           null,
           MediaStore.Images.Media.DATE_ADDED + " DESC");
}

@Override
public void onLoadFinished(@NonNull Loader<Cursor> loader, Cursor cursor) {
    *transferImagesToAdapter(cursor);*
}

@Override
public void onLoaderReset(@NonNull Loader<Cursor> loader) {

}

В методе TransferImagesToAdapter я перенес и настроил gridView с его адаптером, отображая изображения в сетке.

Однако, как уже упоминалось, после щелчка по любому изображению оно будет отображаться в полноэкранном режиме при новом действии, но при нажатии кнопки «Назад» происходит сбой приложения.

Любая помощь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...