使用游标加载器按下后退按钮时,应用程序崩溃

时间:2018-10-05 00:04:10

标签: java android mobile

因此,我使用游标加载器加载了所有图像,并将这些图像传输到适配器(gridview使用的适配器)中。我在gridview上实现了一个单击式侦听器,它将在新活动中显示图像。

所有这些都工作正常,但是,当我按下后退按钮时,我希望返回到我的主要活动(带有所有图像的gridview),但是我的应用程序崩溃了。

这是一些细节。

Oncreate方法。

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的地方,在网格上显示图像。

但是,如上所述,单击任何图像后,它将在新活动中全屏显示,但是当按下后退按钮时,应用程序将崩溃。

有帮助吗?

0 个答案:

没有答案