Java 数据库忽略列中具有相同值的行-Android

Java 数据库忽略列中具有相同值的行-Android,java,android,mysql,database,sqlite,Java,Android,Mysql,Database,Sqlite,我用一个包含两列的表填充RecyclerView,它基本上是一个字典,每当我调用该方法开始填充一些不寻常的事情时,代码会忽略第一列“col1”中具有相同值的行,只获取最后一列并移动到下一列,依此类推 爪哇 public void fetchData() { db=新的DataBaseHelper(getContext()); 试一试{ db.createDataBase(); openDataBase(); } 捕获(例外e) { e、 printStackTrace(); } 名称列表=新建L

我用一个包含两列的表填充RecyclerView,它基本上是一个字典,每当我调用该方法开始填充一些不寻常的事情时,代码会忽略第一列“col1”中具有相同值的行,只获取最后一列并移动到下一列,依此类推

爪哇

public void fetchData()
{
db=新的DataBaseHelper(getContext());
试一试{
db.createDataBase();
openDataBase();
}
捕获(例外e)
{
e、 printStackTrace();
}
名称列表=新建LinkedHashMap();
int ii;
SQLiteDatabase sd=db.getReadableDatabase();
Cursor Cursor=sd.query(“dictionary_lib”,null,null,null,null,null,null);
ii=cursor.getColumnIndex(“英语库”);
eng_list=new ArrayList();
nor_list=new ArrayList();
while(cursor.moveToNext()){
namelist.put(cursor.getString(ii),cursor.getString(cursor.getColumnIndex(“德语库”));
}
迭代器条目=namelist.entrySet().Iterator();
while(entries.hasNext()){
Map.Entry thisEntry=(Map.Entry)entries.next();
eng_list.add(String.valueOf(thisEntry.getKey());
german_list.add(String.valueOf(thisEntry.getValue());
}
对于(int i=0;i
数据库示例

在这里,recyclerview将忽略alpha的前两行,并打印第三行,然后移动到下一行


这实际上很可能是因为您将值放在实现映射接口的

将键映射到值的对象。地图不能包含重复的键;每个键最多可以映射到一个值

您正在此处检索重复的密钥:

while (cursor.moveToNext()){
    namelist.put(cursor.getString(ii), cursor.getString(cursor.getColumnIndex("German_lib")));
}
因此,前两个示例值在映射中被替换为重复的键
“alpha”

要验证这一点,您可以打印出或单步跳过上面循环中的值

解决此问题的一种方法是创建自己的java对象:

public class Example
{
    public String col1; // but appropriate names
    public String col2; 

    // Add constructors or getters and setting if you want private members
}
然后在循环中使用Arraylist和

List<Example> rows = new ArrayList<>;
while (cursor.moveToNext()){
    Example e = new Example();
    e.col1 = cursor.getString(ii);
    e.col2 = cursor.getString(cursor.getColumnIndex("German_lib"))
    rows.add(e)
}

是的,我确实注意到了这一点,但想不出解决的办法,如果你能指导我通过查看我的编辑来使用你自己的对象,只使用一个列表-这样做的好处是,如果你以后添加第三列,它更容易重构。我应该对
Iterator entries=namelist.entrySet().Iterator()应用哪些更改遵循您的解决方案后?没有看到,您甚至不需要该对象。您正在创建多个循环,只是为了得到相同的结果。您可以只在游标循环中放入
data.add(新的DictObjectModel(cursor.getString(ii),cursor.getColumnIndex(“German_lib”))Iterator entries=namelist.entrySet().Iterator();while(entries.hasNext()){Map.Entry thisnentry=(Map.Entry)entries.next();eng_list.add(String.valueOf(thisnentry.getKey());derman_list.add(String.valueOf(thisnentry.getValue());}for(int i=0;i
??
List<Example> rows = new ArrayList<>;
while (cursor.moveToNext()){
    Example e = new Example();
    e.col1 = cursor.getString(ii);
    e.col2 = cursor.getString(cursor.getColumnIndex("German_lib"))
    rows.add(e)
}
data.add(new DictObjectModel(cursor.getString(ii), cursor.getString(cursor.getColumnIndex("German_lib")));