gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 10:46:24 25 4
gpt4 key购买 nike

我用一个有两列的表填充 RecyclerView,它基本上是一个字典,当我调用该方法开始填充发生异常的情况时,代码会忽略第一列“col1”中具有相同值的行,并且只需获取最后一个并移至下一个,依此类推

JAVA

public void fetchData()
{
db =new DataBaseHelper(getContext());
try {

db.createDataBase();
db.openDataBase();

}
catch (Exception e)
{
e.printStackTrace();
}

namelist=new LinkedHashMap<>();
int ii;
SQLiteDatabase sd = db.getReadableDatabase();
Cursor cursor = sd.query("dictionary_lib" ,null, null, null, null, null, null);
ii=cursor.getColumnIndex("English_lib");
eng_list=new ArrayList<String>();
nor_list= new ArrayList<String>();
while (cursor.moveToNext()){
namelist.put(cursor.getString(ii), cursor.getString(cursor.getColumnIndex("German_lib")));
}
Iterator entries = 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()));
}

for (int i = 0; i < eng_list.size(); i++) {
data.add(new DictObjectModel(eng_list.get(i), german_list.get(i)));
}
adapter = new CustomAdapter(data);
rv.setAdapter(adapter);
}

数据库示例

这里 recyclerview 将忽略前两行 alpha 并打印第三行并移至下一行

enter image description here

最佳答案

这实际上很可能是因为您将值放入 LinkedHashMap 中它实现了 map 接口(interface),其中指出

An object that maps keys to values. A map cannot contain duplicate keys; each key can map to at most one value.

您正在此处检索重复的 key :

while (cursor.moveToNext()){
namelist.put(cursor.getString(ii), cursor.getString(cursor.getColumnIndex("German_lib")));
}

因此,由于键 "alpha" 重复,前两个示例值在 map 中被替换。

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

解决此问题的一种方法是创建您自己的 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)
}

编辑

您创建多个循环只是为了获得相同的结果。所以你可以在光标循环中输入

data.add(new DictObjectModel(cursor.getString(ii), cursor.getString(cursor.getColumnIndex("German_lib")));

关于java - 数据库忽略列中具有相同值的行 - Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44490194/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com