【问题标题】:android retrieve one or few values from arraylist from databaseandroid从数据库的arraylist中检索一个或几个值
【发布时间】:2015-04-10 11:02:21
【问题描述】:

我已经创建了一个数据库和数组列表 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()));
                }

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

提前致谢。

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

【问题讨论】:

    标签: android


    【解决方案1】:

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

    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中获取它,无需遍历for循环。

    【讨论】:

    • 这是很好的代码,但他已经有了这个功能。您可以在他的另一个问题的链接中看到它。
    • @DanielNugent 我总是给出提示,从来没有用勺子喂过兄弟,是的,我检查过,那是我发布的解决方法。
    • 哈!我听到了...我刚进去喂勺子。 :)
    • 我只是注意到你的代码中的一件事,一定要关闭你的光标!否则你会有内存泄漏。
    • 非常感谢,即使我在 logcat 上也看到了同样的错误,但由于工作量大,我忽略了这一点。 +1
    【解决方案2】:

    只需创建一个带有参数的新函数,您可以将其传递给查询的 where 子句。

    这样做,您不必对从您的 DatabaseMaster 类返回的 ArrayList 进行任何过滤。

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

    例如,要过滤某个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());
                }
    

    【讨论】:

    • 能否也请您告诉我如何在活动类中调用此函数? (一个例子)
    • @JediFighter 我刚刚意识到最初我使用了错误的函数作为参考。我刚刚修好了。
    【解决方案3】:

    你可以使用...

    List.get(index);
    

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

    【讨论】:

      【解决方案4】:

      使用以下代码从 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()));
      

      【讨论】:

        【解决方案5】:

        //如下使用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())); 
        

        }


        //如果在那之后你不能得到适当的数据,那么你的方法有问题 //db.getAllEffectiveRates();

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-01-15
          • 1970-01-01
          • 1970-01-01
          • 2018-04-18
          • 1970-01-01
          • 2014-03-08
          相关资源
          最近更新 更多