【问题标题】:Android Room Database app is crashing without showing any errorAndroid Room Database 应用程序崩溃但未显示任何错误
【发布时间】:2022-01-21 23:57:58
【问题描述】:

我正在尝试使用带有 android java 的 Room 数据库库执行非常基本的插入和选择 * 操作。但是当我按下按钮执行查询时,我的应用程序会崩溃,而不会在 logcat 中显示任何错误。

仅当我重新安装应用程序并再次按下插入或选择 * 按钮应用程序崩溃时才会插入数据库行。我是这个库的新手,请指导我正确的代码。

@Entity

public class Users {

    @PrimaryKey
    public int id;
    @ColumnInfo(name = "username")
    public String uname;
    @ColumnInfo(name = "lastname")
    public String lname;

    public Users(String uname, String lname) {
        this.uname = uname;
        this.lname = lname;
    }
}

@Dao

@Dao
public interface UsersDao{
    @Query("select * from Users")
    List<Users>getUsers();

    @Insert
    void insertUser(Users user);
}

@Database

@Database(entities = {Users.class},version = 1)
public abstract class UsersDatabase extends RoomDatabase {
    public abstract UsersDao usersDao();
}

调用方法 onCreate()

UsersDatabase db= Room.databaseBuilder(Practice.this,UsersDatabase.class,
                "Users").build();
        UsersDao dao=db.usersDao();

        insert.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        dao.insertUser(new Users("George","Pal"));
                    }
                }).start();
            }
        });
        ArrayList<String> data=new ArrayList<>();
        select.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        List<Users> users=dao.getUsers();
                        for(Users u: users)
                            data.add(u.uname+", "+u.lname);
                        ArrayAdapter<String > adapter=new ArrayAdapter<>(Practice.this, android.R.layout.simple_list_item_1,data);
                        listView.setAdapter(adapter);
                    }
                }).start();
            }
        });

依赖关系

def roomVersion = "2.4.0"
    implementation("androidx.room:room-runtime:$roomVersion")
    annotationProcessor("androidx.room:room-compiler:$roomVersion")

我的配置

  • 真机api 30
  • 北极狐

【问题讨论】:

    标签: sqlite android-room


    【解决方案1】:

    问题出在线程上。我已经用 AsyncTask 替换了 Threads。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多