【问题标题】:Success/Failed callback room operations成功/失败回拨房间操作
【发布时间】:2019-11-12 15:01:00
【问题描述】:

我来自 iOS 世界,是 Android 开发的新手。 我的问题是这样的:

我正在开发 Android 应用程序,我必须将数据保存在本地数据库中。 出于这个原因,我为此选择了 Room 课程。 在 iOS 中,Room 等价物是 CoreData,当我通过它执行某些操作(例如插入或删除操作)时,我有两个回调:一个用于成功,另一个用于失败。

我在 Room 系统中看不到这个,但我可以进行插入操作和 我不知道这个操作什么时候结束,最重要的是它是顺利还是失败。

现在我只创建 Dao 和 Database 类(和一个实体)

public abstract class LuxuryAppDatabase extends RoomDatabase
{
   public abstract DatabaseLocale dbDao();
}

@Dao
public interface DatabaseLocale
{
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    public void insertChat(ArrayList<Lobby> chats);

    @Query("SELECT * FROM Lobby")
    List<Lobby> getAllUserChat();

    @Query("DELETE FROM Lobby")
    public void deleteAllLoobies();
}

例如,我想做类似于 onClickListener 的操作。

我调用了插入查询,我有一个监听器,它有两种方法:成功和失败。

你能帮我找出我错在哪里,是否可以做类似的事情?

【问题讨论】:

  • 如果需要报告,可以使用 Android Cursor
  • 你能解释得更好吗?
  • 其实 Room 是一个新的 API。 Room 架构的支柱是数据库和游标。在此 API 之前,我们使用游标进行数据库操作。您也可以使用它以获得更好的灵活性。因为您使用的是预先填充的数据库,而 Room 架构不允许这样做。

标签: java android database sqlite android-room


【解决方案1】:

您始终可以让您的插入返回一个 Long,它表示条目的自动生成 id:

@Insert(onConflict = OnConflictStrategy.REPLACE)
public long insertChat(ArrayList<Lobby> chats);

此外,Room 通常会因任何错误而快速失败 - 这意味着它会引发异常。您调用 Room 的方法应根据需要处理任何错误异常。

【讨论】:

  • 对不起,我不明白。你说insertChat这个方法我得放到try/catch块里?
  • 我没有自动生成的主键,但是是字符串字段
  • 不,它已经在 try-catch 块中。插入操作的主要问题是它在后台线程中执行。
  • 用我不明白的话来说。如果我使用插入方法,我如何捕获一些错误(内存、一般错误 ecc..)?
  • 我想知道插入调用何时结束。例如我想在插入调用结束时做一些操作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多