【Android开发 Room+RecycleView】

Android开发 Room+RecycleView

踩坑内容整理

一、Room操作数据库要在子线程中进行

开发测试时可以允许此操作但不建议
控制台报错信息:
Room:Cannot access database on the main thread since it may potentially lock the UI for a long perio
在自定义拓展
public abstract class XDatabase extends RoomDatabase {

    private static XDatabase INSTANCE;
    public static synchronized XDatabase getInstance(Context context){
        if(INSTANCE == null){
            INSTANCE = Room.databaseBuilder
                    (context.getApplicationContext(),
                    XDatabase.class, "X_database")
//                    .allowMainThreadQueries()   允许此项即可
                    .build();
        }
        return INSTANCE;
    }
}

二、Recycleview的使用需要添加布局管理器

解决E/RecyclerView: No layout manager attached; skipping layout

控制台输出:
No adapter attached;skipping
可能是recyclerview设置adapter的方式不妥当

Android RecyclerView 提示No adapter attached;skipping的问题分析

三、用例demo和相关博客

Android移动应用开发之使用room实现数据库的增删改查
Android开发使用Room(SQLite封装)操作数据库

四、安卓开发其他相关内容

Android Fragment跳转到Activity的方法
PS:以下demo代码并未给全,仅做参考
Android小实例----TodoList
Android——待办事项(ToDoList)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在另一个activity中访问另一个activity中的Room数据库,你需要做以下几步: 1. 创建一个repository类,该类将是访问数据库的中介。在该类中,你可以编写一些方法来访问数据库并返回数据。 2. 在第二个activity中创建一个实例化repository类的对象。 3. 使用异步任务从数据库中检索数据。在这里,你可以使用recyclerview来显示数据。 以下是示例代码: 首先,你需要创建一个repository类。假设你的数据库名为"MyDatabase",包含一个名为"myTable"的表,其中包含一个名为"title"的字段: ``` public class MyRepository { private MyDao myDao; private LiveData<List<MyEntity>> allMyEntities; public MyRepository(Application application) { MyDatabase db = MyDatabase.getInstance(application); myDao = db.myDao(); allMyEntities = myDao.getAllMyEntities(); } public LiveData<List<MyEntity>> getAllMyEntities() { return allMyEntities; } public void insert(MyEntity myEntity) { new InsertAsyncTask(myDao).execute(myEntity); } private static class InsertAsyncTask extends AsyncTask<MyEntity, Void, Void> { private MyDao asyncTaskDao; InsertAsyncTask(MyDao dao) { asyncTaskDao = dao; } @Override protected Void doInBackground(MyEntity... myEntities) { asyncTaskDao.insert(myEntities[0]); return null; } } } ``` 在这里,你创建了一个MyRepository类,它使用MyDao对象访问数据库。所有的MyEntity对象都存储在LiveData<List<MyEntity>>中。你还编写了一个异步任务,用于在后台线程中插入数据到数据库中。 接下来,在第二个activity中,你需要实例化该类的对象,并使用RecyclerView来显示数据: ``` public class SecondActivity extends AppCompatActivity { private MyRepository myRepository; private RecyclerView recyclerView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); // 实例化repository类 myRepository = new MyRepository(getApplication()); // 获取RecyclerView对象 recyclerView = findViewById(R.id.recyclerView); recyclerView.setLayoutManager(new LinearLayoutManager(this)); // 创建适配器并设置给RecyclerView final MyAdapter adapter = new MyAdapter(); recyclerView.setAdapter(adapter); // 异步任务从数据库中检索数据 myRepository.getAllMyEntities().observe(this, new Observer<List<MyEntity>>() { @Override public void onChanged(List<MyEntity> myEntities) { // 更新RecyclerView中的数据 adapter.setMyEntities(myEntities); } }); } } ``` 在这里,你获取了RecyclerView对象,并创建一个适配器来显示数据。你还使用异步任务从数据库中获取数据,并将其设置给适配器。当数据发生更改时,适配器将自动更新RecyclerView

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值