我有问题。如何将数据从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
答案 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)
创建不支持修改的列表。Cursor.moveToPosition(int)
和Collections.singletonList(Integer)