【问题标题】:passing data using Arraylist<Object>使用 Arraylist<Object> 传递数据
【发布时间】:2013-04-07 16:56:06
【问题描述】:

我在列表视图中显示数据库中的数据时遇到问题。以下是我的显示方法的代码。

显示

public ArrayList<Object> display(String rows) {

    ArrayList<Object> rowArray = new ArrayList<Object>();

    String[] columns = new String[] { KEY_ROWID, KEY_PACKNAME,
            KEY_PACKRENT, KEY_SIMRATE, KEY_NATMINSBUN, KEY_INTMINSBUN,
            KEY_INTMINSRATE, KEY_NATSMSBUN,
                            KEY_NATSMSRATE, KEY_INTSMSBUN, KEY_INTSMSRATE, 
                            KEY_MMSBUN, KEY_MMSRATE, KEY_DATALBUN,
            KEY_DATALRATE };
    Cursor cursor = ourDatabase.query(DATABASE_TABLE, columns, null, null,
            null, null, null);

    cursor.moveToFirst();


    if (!cursor.isAfterLast())
    {
        do
        {   
            rowArray.add(cursor.getLong(0));
            rowArray.add(cursor.getString(1));
            rowArray.add(cursor.getString(2));
            rowArray.add(cursor.getString(3));
            rowArray.add(cursor.getString(4));
            rowArray.add(cursor.getString(5));
            rowArray.add(cursor.getString(6));
            rowArray.add(cursor.getString(7));
            rowArray.add(cursor.getString(8));
            rowArray.add(cursor.getString(9));
            rowArray.add(cursor.getString(10));
            rowArray.add(cursor.getString(11));
            rowArray.add(cursor.getString(12));
            rowArray.add(cursor.getString(13));
            rowArray.add(cursor.getString(14));

    }         while (cursor.moveToNext());

    cursor.close();
    }

    return rowArray;


}

这是数组列表

            EtiTariffDatabase test = new EtiTariffDatabase(this);

    TextView TV = (TextView) findViewById(R.id.s_etipackname);
    TextView TV1 = (TextView) findViewById(R.id.s_etipackrent);
    TextView TV2 = (TextView) findViewById(R.id.srentalrate);
    TextView TV3 = (TextView) findViewById(R.id.snationalbun);
    TextView TV4 = (TextView) findViewById(R.id.seintbun);
    TextView TV5 = (TextView) findViewById(R.id.senatsmsbun);
    TextView TV6 = (TextView) findViewById(R.id.seintsmsbun);
    TextView TV7 = (TextView) findViewById(R.id.sedatalocalbun);


    test.open();

    try
    {
    ArrayList<Object> row = test.display(null);



    TV.setText((String)row.get(1));
    TV1.setText((String)row.get(2));
    TV2.setText((String)row.get(3));
    TV3.setText((String)row.get(4));
    TV4.setText((String)row.get(6));
    TV5.setText((String)row.get(8));
    TV6.setText((String)row.get(10));
    TV7.setText((String)row.get(12));


    }
    catch (Exception e)
    {
        Log.e("Retrieve Error", e.toString());
        e.printStackTrace();
    }
    test.close();


}

我发现的异常是:

04-07 16:48:23.759:E/Retrieve 错误(4134):java.lang.IndexOutOfBoundsException:索引 1 无效,大小为 0 04-07 16:48:23.829: W/System.err(4134): java.lang.IndexOutOfBoundsException: 无效索引 1,大小为 0 04-07 16:48:23.829: W/System.err(4134): 在 java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251)

我已经尝试了很长时间。它最初有效,但我删除了数据库并重新创建了它。从那时起,没有数据显示我有上述错误。任何帮助将不胜感激。

【问题讨论】:

    标签: android sqlite arraylist


    【解决方案1】:

    您的数据库中有任何数据行吗?根据异常所说,您尝试访问数组中的字段,但数组本身为空。

    一切看起来应该可以工作,但是当数据库中没有数据时,函数display 将返回一个空的 ArrayList(那么row.size 应该为 0)。

    所以测试是否为空:

    try
    {
        ArrayList<Object> row = test.display(null);
    
        if(row.size != 0) {
            TV.setText((String)row.get(1));
            TV1.setText((String)row.get(2));
            TV2.setText((String)row.get(3));
            TV3.setText((String)row.get(4));
            TV4.setText((String)row.get(6));
            TV5.setText((String)row.get(8));
            TV6.setText((String)row.get(10));
            TV7.setText((String)row.get(12));
        }   
    } catch (Exception e) {
        Log.e("Retrieve Error", e.toString());
        e.printStackTrace();
    }
    test.close();
    

    【讨论】:

    • 它显示我的数组没有对象。我的数据库中有数据,因为我提取了我的数据库文件来检查这一点。我认为这与创建我所做的对象数组有关。
    • 数组创建和填充应该不是问题,你已经正确地做到了。我认为查询有问题,因此游标返回一组空数据。您可以使用Log.d("cursor",cursor.getCount()+""); 进行检查
    • 发现了问题。没有创建数据库。解决了这个问题并繁荣,一切正常!谢谢!
    【解决方案2】:

    04-07 16:48:23.759: E/Retrieve Error(4134): java.lang.IndexOutOfBoundsException: Invalid index 1, size is 0

    这清楚地表明您的方法返回一个空的ArrayList。索引从 0 而不是 1 开始(这与您的错误无关,但您也应该更正它)。如果您的表中没有数据,则 ArrayList 将不包含任何元素。

    您最好返回value object,而不是单独将每一列添加到ArrayList(同样,与您的错误无关,但这是一个好习惯)。

    【讨论】:

      猜你喜欢
      • 2018-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-24
      • 2012-04-22
      • 2017-08-07
      • 2020-10-02
      • 1970-01-01
      相关资源
      最近更新 更多