2013-04-07 104 views
0

传递数据我有一个列表视图从我的数据库显示数据的问题。下面是我的显示方法的代码。使用ArrayList的<Object>

显示

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; 


} 

这是该ArrayList

  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 /检索错误(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)

我一直试图玩很久。它起初工作,但我删除了数据库,并重新创建它。从那时起没有任何数据显示出来,并伴随着上述错误。任何援助将不胜感激。

回答

0

你有你的数据库里面的任何数据行?从异常说你尝试访问数组中的字段,但数组本身是空的。

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

因此,测试用于emptyness:

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(); 
+0

它显示我的数组没有对象。有我的数据库中的数据因为我拉我的数据库文件来检查这一点。我认为这与创建我已经完成的对象数组有关。 – 2013-04-07 17:56:03

+0

数组的创建和填充不应该是一个问题,你已经做了正确的。 我认为查询有问题,以便游标返回一组空白的数据。你可以用'Log.d(“cursor”,cursor.getCount()+“”);' – chuky 2013-04-07 18:07:47

+0

发现这个问题。数据库没有被创建。固定和繁荣,它一切正常!谢谢! – 2013-04-07 21:00:19

0

04-07 16:48:23.759:E /检索错误(4134):java.lang.IndexOutOfBoundsException:无效索引1,大小为0

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

你是最好返回value object而不是单独添加每列的ArrayList(再次,不相关的错误,但是这是一个很好的做法)。

相关问题