无法将对象添加到ArrayList。始终复制相同

时间:2012-10-18 08:40:59

标签: android sqlite arraylist

要将数据库中的不同对象添加到ArrayList,这是我使用的代码:

try {
    Statement stat = con.createStatement();
    ResultSet rs = stat.executeQuery("SELECT DISTINCT Id, Username, FirstName, LastName FROM USER WHERE Username LIKE '%"+name+"%' or FirstName LIKE '%"+name+"%' or LastName LIKE '%"+name+"%'");
    while (rs.next()){
        finded.setUsername(rs.getString("Username"));
        finded.setFirstName(rs.getString("FirstName"));
        finded.setLastName(rs.getString("LastName"));
        finded.setId(rs.getInt("Id"));
        findList.add(finded);
        Log.d("this is the content of the List:",((Integer) findList.get(j).getId()).toString());
        Log.d("this is the content of the List 0:",((Integer) findList.get(0).getId()).toString());

    }
    con.close();

这就是Log.d每次给我的东西。

10-18 08:31:39.407: D/this is the content of the List:(427): 3
10-18 08:31:39.407: D/this is the content of the List 0:(427): 3
10-18 08:31:39.427: D/this is the content of the List:(427): 15
10-18 08:31:39.427: D/this is the content of the List 0:(427): 15
10-18 08:31:39.437: D/this is the content of the List:(427): 13
10-18 08:31:39.437: D/this is the content of the List 0:(427): 13
10-18 08:31:39.447: D/this is the content of the List:(427): 50
10-18 08:31:39.447: D/this is the content of the List 0:(427): 50
10-18 08:31:39.460: D/this is the content of the List:(427): 34
10-18 08:31:39.460: D/this is the content of the List 0:(427): 34
10-18 08:31:39.467: D/this is the content of the List:(427): 49
10-18 08:31:39.467: D/this is the content of the List 0:(427): 49
10-18 08:31:39.479: D/this is the content of the List:(427): 53
10-18 08:31:39.479: D/this is the content of the List 0:(427): 53

如您所见,它会在ArrayList的所有位置复制相同的对象。我也尝试使用findList.add(index, finded)indexint正在递增)但是我得到了相同的结果。

4 个答案:

答案 0 :(得分:4)

您需要在循环

中为finded创建一个新对象
while (rs.next()){
    finded = new Finded();   // <<-- here
    finded.setUsername(rs.getString("Username"));

否则你只需反复添加同一个对象

答案 1 :(得分:2)

更改为以下内容:

 int j=0;
 try {
                Statement stat = con.createStatement();
                ResultSet rs = stat.executeQuery("SELECT DISTINCT Id, Username, FirstName, LastName FROM USER WHERE Username LIKE '%"+name+"%' or FirstName LIKE '%"+name+"%' or LastName LIKE '%"+name+"%'");
                while (rs.next()){
                    Finded finded=new Finded();
                    finded.setUsername(rs.getString("Username"));
                    finded.setFirstName(rs.getString("FirstName"));
                    finded.setLastName(rs.getString("LastName"));
                    finded.setId(rs.getInt("Id"));
                    findList.add(finded);
                    Log.d("this is the content of the List:",((Integer) findList.get(j).getId()).toString());
                    Log.d("this is the content of the List 0:",((Integer) findList.get(0).getId()).toString());
j++;
                }
                con.close();

答案 2 :(得分:1)

您的查询返回多条记录但是,您将覆盖finded对象,而不是在循环内创建新对象。 在循环中创建一个新对象

Finded finded =null;
while (rs.next()){
                    finded = new Finded();
                    finded.setUsername(rs.getString("Username"));
                    finded.setFirstName(rs.getString("FirstName"));
                    finded.setLastName(rs.getString("LastName"));
                    finded.setId(rs.getInt("Id"));
                    findList.add(finded);


                }

答案 3 :(得分:0)

也许你可以使用“group by”而不是“distinct”。

从....分组中选择....

试试这个怎么样?