【问题标题】:How do i make room to insert a single record into the database?如何腾出空间将单个记录插入数据库?
【发布时间】:2019-08-11 11:03:08
【问题描述】:

我有以下 POJO、Dao 和数据库。我正在插入房间数据库,但房间每次都会保存两次记录。我已经附加了一个观察者,它显示了重复的值。

Contact.java Contact 表的实体

@Entity
    public class Contact {
    @PrimaryKey(autoGenerate = true)
    @NonNull
    private int Id;

    public int getId() {
        return Id;
    }

    public void setId(int id) {
        Id = id;
    }

    public String getUsername() {
        return Username;
    }

    public void setUsername(String username) {
        Username = username;
    }

    public String getEmailAddress() {
        return EmailAddress;
    }

    public void setEmailAddress(String emailAddress) {
        EmailAddress = emailAddress;
    }

    public String getPhoneNumber() {
        return PhoneNumber;
    }

    public void setPhoneNumber(String phoneNumber) {
        PhoneNumber = phoneNumber;
    }

    private String Username;
    private String EmailAddress;
    private String PhoneNumber;
}

ContactDao.java

@Dao
    public interface ContactDao {
    @Query("SELECT * FROM Contact")
    LiveData<List<Contact>> getContactThatMatchTypedFilled();

    @Query("SELECT * FROM Contact")
    LiveData<List<Contact>> getAllContacts();

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    void insertNewContact(Contact contact);

    @Query("DELETE FROM Contact")
    void deleteAll();

}

AppDatabase.java

@Database(entities = {Contact.class}, version = 1)
    public abstract class AppDatabase extends RoomDatabase {
    private static AppDatabase instance;

    public static AppDatabase getInstance(Context context) {
        if (instance == null) {
            instance = Room.databaseBuilder(context.getApplicationContext(), 
    AppDatabase.class, "FirefyDB")
                    .fallbackToDestructiveMigration()
                    .allowMainThreadQueries()
                    .build();
        }
        return instance;
    }

    public abstract ContactDao ContactDao();
}

我真的不明白为什么房间会这样做。从昨天开始,我已经尝试了一切。什么都没有发生。

我到底哪里错了?

【问题讨论】:

    标签: android-sqlite android-room


    【解决方案1】:

    我想通了。我在存储库内的主线程上直接调用插入,同时在存储库中调用已创建的 asynctask 类。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-15
      • 1970-01-01
      相关资源
      最近更新 更多