首页 > 解决方案 > 如何从一个线程调用一个对象到另一个线程?

问题描述

我在这个类中调用了 Activity 在我打开到数据库的连接中FilmActivity.java有一个名为OpenDbConnectionextends的内部类AsyncTaskOpenDbConnection

 public AppDatabase db = Room.databaseBuilder(getApplicationContext(),
            AppDatabase.class, "FilmDatabase").fallbackToDestructiveMigration().build();

其中FilmActivity.java有一个名为 setFavButton 的方法

public void setFavButton(View view) {
    String pos = getStringFromIntent("position");
    Toast.makeText(this, pos, Toast.LENGTH_SHORT).show();
    ImageView favButton = findViewById(R.id.activity_film_fav_button);
    if (isPressedButton) {
        favButton.setImageResource(R.drawable.ic_like);
        isPressedButton = false;
        Toast.makeText(this, "Removed From Favourite Film", Toast.LENGTH_SHORT).show();
    } else {
        favButton.setImageResource(R.drawable.ic_like_activated);
        isPressedButton = true;
        Toast.makeText(this, "Added To Favourite Film", Toast.LENGTH_SHORT).show();
    }
    filmList.get(Integer.valueOf(pos)).setFavFilm(String.valueOf(isPressedButton));
}

使用 onClick 连接到布局

 <ImageView
                android:id="@+id/activity_film_fav_button"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_toRightOf="@id/ativity_film_text_header"
                android:onClick="setFavButton"
                android:paddingTop="4dp"
                android:src="@drawable/ic_like" />

我希望当用户单击此图像时(调用 setFavButton 时)他更改照片并且他应该更新数据库中的某些内容我在数据库中有更新的方法但是,我如何调用从内部类到 FilmActivity 调用 db 的数据库对象班级

我试图从 setFavButton 中的内部类创建对象但是应用程序崩溃了,它说我可以在主线程中调用数据库

setFavButton 方法应该是这样的

public void setFavButton(View view) {
    String pos = getStringFromIntent("position");
    Toast.makeText(this, pos, Toast.LENGTH_SHORT).show();
    ImageView favButton = findViewById(R.id.activity_film_fav_button);
    if (isPressedButton) {
        favButton.setImageResource(R.drawable.ic_like);
        isPressedButton = false;
        Toast.makeText(this, "Removed From Favourite Film", Toast.LENGTH_SHORT).show();
    } else {
        favButton.setImageResource(R.drawable.ic_like_activated);
        isPressedButton = true;
        Toast.makeText(this, "Added To Favourite Film", Toast.LENGTH_SHORT).show();
    }
    filmList.get(Integer.valueOf(pos)).setFavFilm(String.valueOf(isPressedButton));
    // here should update the list in Database
    db.userDao().updateFilmList(filmList);
}

但是崩溃了!!因为我不能在主线程中使用数据库

我应该怎么办 ???

标签: javaandroid

解决方案


推荐阅读