cursorLoader in androidstudio



我是一个超级初学者,所以我只是跟随一些项目,我知道startActivityforResult已被弃用,所以我通过使用ActivityResultLauncher更改了代码。但我不知道如何修复CursorLoader错误。你能告诉我怎么修吗?

原来的代码是这样的

protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);

if(requestCode == PICK_PROFILE_FROM_ALBUM && resultCode == RESULT_OK) {
String[] proj = {MediaStore.Images.Media.DATA};
CursorLoader cursorLoader = new CursorLoader(this, data.getData(), proj, null, null, null);


Cursor cursor = cursorLoader.loadInBackground();
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
//image path
String photoPath = cursor.getString(column_index);

}

当前代码

ActivityResultLauncher<Intent> startActivityResult = registerForActivityResult(
new ActivityResultContracts.StartActivityForResult(),
new ActivityResultCallback<ActivityResult>() {
@Override
public void onActivityResult(ActivityResult result) {

if(result.getResultCode() == Activity.RESULT_OK) {
Intent data = result.getData();
String[] proj = {MediaStore.Images.Media.DATA};
CursorLoader cursorLoader = new CursorLoader(this, data.getData(), proj, null, null, null);

Cursor cursor = cursorLoader.loadInBackground();
int column_index =cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();

String photoPath = cursor.getString(column_index);
}

所以CursorLoader中的上下文应该是固定的。它需要'Context',但它现在是ActivityResultCallback。

之所以会发生这种情况,是因为本例中的this关键字引用了当前上下文,而当前上下文是匿名类,即。ActivityResultCallback的实例,但CursorLoader需要引用ContextActivity的实例。在这种情况下,简单的修复方法是将.this附加到类或活动的名称

后。假设你的ActivityMainActivity,所以这个

CursorLoader cursorLoader = new CursorLoader(this, data.getData(), proj, null, null, null);

会变成这个

CursorLoader cursorLoader = new CursorLoader(MainActivity.this, data.getData(), proj, null, null, null);

不写this直接写youractivityname.this

假设您的活动名称为MainActivity,这就是您应该如何传递上下文:

CursorLoader cursorLoader = new CursorLoader(MainActivity.this, data.getData(), proj, null, null, null);

在长期运行的项目中,有时您需要将现有的代码库迁移到较新的API,这是典型的情况。

关于CursorLoader。如果startActivityResult启动程序是您的活动中的字段这条线

CursorLoader cursorLoader = new CursorLoader(this, data.getData(), proj, null, null, null);

可以用

代替
CursorLoader cursorLoader = new CursorLoader(YourActivityClass.this, data.getData(), proj, null, null, null);

我还看到游标被加载到UI线程上,它会对性能产生影响

相关内容

  • 没有找到相关文章

最新更新