android从数据库中的arraylist中检索一个或几个值

时间:2015-04-09 05:45:51

标签: android

我已经创建了一个数据库和arraylist android passing variables from inside database class,现在我正在尝试使用List<EntryEffectiveRate> allEffectiveRate = db.getAllEffectiveRates();从数组列表中获取一个或一些值,以获取数据库中的所有数据列表,但是我只能使用循环来获取所有这些:

 // getting all ER
                Log.d("Get ER", "GEtting All ER");

                List<EntryEffectiveRate> allEffectiveRate = db.getAllEffectiveRates();
                for (EntryEffectiveRate ER : allEffectiveRate) {
                    Log.d("ER_ids", String.valueOf(ER.getERId()));
                    Log.d("ER_rates", ER.getERKondisi());
                    Log.d("ER_tenors", String.valueOf(ER.getERTenor()));
                    Log.d("ER_rates", String.valueOf(ER.getERrate()));
                }

如何从数组列表中只获取一个或几个值?

提前感谢。

解决方案在上面的链接上,检查答案。

5 个答案:

答案 0 :(得分:4)

我发布了一个我刚在项目中编写的示例方法,肯定会根据您的要求。

public ArrayList<SomeModelClass> GetCatagoriesName() {
    close();
    database = this.dbOpenHelper.getReadableDatabase();
    ArrayList<SomeModelClass> catagory_List = new ArrayList<SomeModelClass>();
    String selectQuery = " SELECT " + KEY_CATAGORIES + " FROM "
            + TABLE_CATAGORIES;
    Cursor cursor = database.rawQuery(selectQuery, null);
    if (cursor != null) {
        if (cursor.moveToFirst()) {
            do {
                catagory_List.add(cursor.getString(0));
            } while (cursor.moveToNext());
        }
    }
    return catagory_List;
}

另一方面,只需从位置为0的arraylist中获取它,无需迭代循环。

答案 1 :(得分:3)

只需创建一个新函数,该函数接受一个可以传递给查询的where子句的参数。

执行此操作后,您不必对ArrayList课程中返回的DatabaseMaster进行任何过滤。

您可以创建一个不同的函数来过滤您需要的每个数据库条目。

例如,要过滤某个KEY_ER_USEDORNEW值,新函数将是这样的:

public List<EntryEffectiveRate> getSomeERates(String USEDORNEW) {
        List<EntryEffectiveRate> EffectiveRates = new ArrayList<EntryEffectiveRate>();
        String selectQuery = "SELECT  * FROM " + TABLE_EFFECTIVE_RATE + " where " + KEY_ER_USEDORNEW + " = ?";

        Log.e(LOG, selectQuery);

        SQLiteDatabase db = this.getReadableDatabase();
        Cursor c = db.rawQuery(selectQuery, new String[] {USEDORNEW});

        // looping through all rows and adding to list
        if (c.moveToFirst()) {
            do {
                EntryEffectiveRate ergt = new EntryEffectiveRate();

                ergt.setERKondisi(c.getString(c
                        .getColumnIndex(KEY_ER_USEDORNEW)));              
                // add
                EffectiveRates.add(ergt);
            } while (c.moveToNext());
        }
        // db.close();
        c.close();
        return EffectiveRates;
    }

要从您的Activity调用此方法,您可以将过滤器值作为参数传递:

           String USEDORNEW = "Baru";
           List<EntryEffectiveRate> someEffectiveRates = db.getSomeERates(USEDORNEW);
            for (EntryEffectiveRate ER : someEffectiveRates) {           
                Log.d("ER_rates", ER.getERKondisi());
            }

答案 2 :(得分:1)

你可以使用......

List.get(index);

从列表中获取特定值或一个值而不循环它的方法。但是如果你想要多于一个值,那么你必须循环它。

答案 3 :(得分:1)

使用以下代码从arraylist中获取一个值

   List<EntryEffectiveRate> allEffectiveRate =  db.getAllEffectiveRates();
   EntryEffectiveRate ER =allEffectiveRate.get(position);
   Log.d("ER_ids", String.valueOf(ER.getERId()));
   Log.d("ER_rates", ER.getERKondisi());
   Log.d("ER_tenors", String.valueOf(ER.getERTenor()));
   Log.d("ER_rates", String.valueOf(ER.getERrate()));

答案 4 :(得分:0)

//使用for循环,如下所示

for(int i=0;i<allEffectiveRate.size();i++)
  { 
     EntryEffectiveRate ER =allEffectiveRate.get(i);  
     Log.d("ER_ids"String.valueOf(ER.getERId()) ;
     Log.d("ER_rates", ER.getERKondisi());
     Log.d("ER_tenors", String.valueOf(ER.getERTenor()));
      Log.d("ER_rates", String.valueOf(ER.getERrate())); 

}


//如果在那之后你不能获得propar数据那么你的ur方法问题//db.getAllEffectiveRates();