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 应用程序崩溃但未显示任何错误的主要内容,如果未能解决你的问题,请参考以下文章