Android Room Database 应用程序崩溃但未显示任何错误

Posted

技术标签:

【中文标题】Android Room Database 应用程序崩溃但未显示任何错误【英文标题】:Android Room Database app is crashing without showing any error 【发布时间】: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 北极狐

【问题讨论】:

【参考方案1】:

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

【讨论】:

以上是关于Android Room Database 应用程序崩溃但未显示任何错误的主要内容,如果未能解决你的问题,请参考以下文章

Android - ViewModel、LiveData、Room 和 Retrofit 以及协程放在 kotlin 中

Android Room Database 学习

Android Room Database:如何处理实体中的 Arraylist?

获取 android 房间数据库 java.lang.IllegalArgumentException 的以下异常:@androidx.room.Database 未定义元素视图()

添加1到多关系android Room Database?

Android Room Database:如何嵌入多个实体