将Sql数据放入数字数组

时间:2014-06-27 18:01:31

标签: java android sql arrays eclipse

我有问题。如何将数据从SQL数据库放入Number数组。我想把它们放在Graph

我为这些命令获得了NullPointerException

Number[] series2Numbers={s1nInt[1]};

这是我的完整代码

openDB();
Cursor c = myDb.getSpalte();        

while (c.moveToPrevious())
{        
    s1nInt[i] = c.getInt(1);
    i++;
    c.moveToPrevious();

}
c.close();
closeDB();    

Number[] series2Numbers={s1nInt[1]};

这是我的例外:

Graph.onStart() line: 85    
Graph(Fragment).performStart() line: 1801   
FragmentManagerImpl.moveToState(Fragment, int, int, int, boolean) line: 937 
 FragmentManagerImpl.moveToState(int, int, int, boolean) line: 1106 
 BackStackRecord.run() line: 690    
 FragmentManagerImpl.execPendingActions() line: 1571    
FragmentManagerImpl$1.run() line: 447   
Handler.handleCallback(Message) line: 733   
Handler.dispatchMessage(Message) line: 95   

我的getSpalte()

public Cursor getSpalte(){
    String where= null;
    String Order = "_id DESC";
    Cursor c =  db.query(true, DATABASE_TABLE, KEY_KALOA, 
            where, null, null, null, Order, null);
  if (c != null) {
  c.moveToFirst();
}
  return c;
}

我需要这个数组:

 XYSeries series1 = new SimpleXYSeries(
                     Arrays.asList(series1Numbers),          // SimpleXYSeries takes a List so turn our array into a List
                     SimpleXYSeries.ArrayFormat.Y_VALS_ONLY, // Y_VALS_ONLY means use the element index as the x value
                     "Series1");                             // Set the display title of the series

1 个答案:

答案 0 :(得分:0)

s1nInt

行中为null
Number[] series2Numbers={s1nInt[1]};

也许您永远不会初始化s1nInt或将其设置为某个地方null。这是该行中唯一可以生成NullPointerException

的部分

这也意味着c.moveToPrevious()失败了。

来自Cursor.moveToPrevious()的api doc:

  

如果光标已经在结果集中的第一个条目之前,则此方法将返回false。

也许您必须将moveToPrevious()更改为moveToNext()。 (光标位于查询后第一个条目之前的位置。)

此外,您在每次循环迭代中移动光标两次。这样你只会 奇数偶数行。


更新

在对问题进行最新编辑后,您似乎需要List<? extends Number>而不是数组。由于列表的所有元素都是Integer s,因此您应该使用ArrayList<Integer>。这样可以减少null元素和列表的危险。您的代码可能如下所示:

public Cursor getSpalte(){
    String where= null;
    String Order = "_id DESC";
    Cursor c =  db.query(true, DATABASE_TABLE, KEY_KALOA, // hope KEY_KALOA is guarantied to be correct here
            where, null, null, null, Order, null);
    return c;
}


openDB();
Cursor c = myDb.getSpalte();
List<Integer> valueList = new ArrayList<Integer>(c.getCount());

while (c.moveToNext()) {        
    valueList.add(c.getInt(0)); // assuming the first column is of type INT
}
c.close();
closeDB();

XYSeries series1 = new SimpleXYSeries(
                 valueList,
                 SimpleXYSeries.ArrayFormat.Y_VALS_ONLY,
                 "Series1");

根据您的需要,有几种方法可以直接使用ArrayList

  • 如果您担心可以修改List,则可以使用Collections.unmodifiableList(List)创建不支持修改的列表。
  • 如果您确实只需要列表中的1个元素,则可以使用Cursor.moveToPosition(int)Collections.singletonList(Integer)