过去几天来,我一直对此表示怀疑。我有一个非常简单的Android Room设置。这是我的实体:
Entity(tableName = "some_table")
public class SomeClass {
@PrimaryKey(autoGenerate = true)
@NonNull
int id;
// Other member variables
public SomeClass() {
}
public int getId(){
return id;
}
public void setId(int id){
this.id = id;
}
}
我的道歉也很简单:
@Dao
public interface SomeClassDao {
@Query("SELECT * FROM some_table")
List<SomeClass> getAll();
@Insert(onConflict = OnConflictStrategy.REPLACE)
void insertAll(List<SomeClass> someClass);
@Update
void update(SomeClass someClass);
@Delete
void delete(SomeClass someClass);
}
我的数据库也没有发生任何疯狂的事情:
@Database(entities = {SomeClass.class}, version = 1)
public abstract class SomeClassDatabase extends RoomDatabase {
public static final String DATABASE_NAME = "someApp";
public abstract SomeClassDao getDao();
}
我在应用程序类的onCreate()
中创建数据库:
public class SomeApp extends Application {
private static SomeClassDatabase sDatabase;
@Override public void onCreate() {
super.onCreate();
Stetho.initializeWithDefaults(this);
sDatabase = Room.databaseBuilder(this, SomeClassDatabase.class, SomeClassDatabase.DATABASE_NAME).build();
}
public static ForecastDatabase getDatabase(){
return sDatabase;
}
}
然后在主要活动中使用RxJava将数据插入到数据库中。我认为那部分不是问题的根源。如果是这样,请告诉我,我将更新我的帖子。
我面临的问题是,当我使用Stetho检查数据库时,我的主键不是一个,而是两列。除了id
的{{1}}成员变量以外,没有其他重复的列-其他一切都按顺序进行。有谁知道为什么会这样吗?任何对此的见识将不胜感激。
答案 0 :(得分:1)
实际上,我大部分时间都能弄清楚这一点。问题归结于使用Stetho来查看我的数据库。我所做的所有研究都无法解释为什么我的数据库中有重复的列,尤其是对于我的主键。因此,我使用a SQLite browser分析了数据库,并验证了我的主键列只显示了一次。然后,我到处搜索,发现其他与Stetho相似的问题:
Stetho showing two columns with same name
https://github.com/Raizlabs/DBFlow/issues/1436
考虑到所有这些,我将得出结论,我的数据库是正确创建的,并且这只是使用Stetho时的一个问题。