我试图将一个int数组从MainActivity传递给databaseadapter,以便从sqlite数据库运行一个计数。我得到的代码如下,没有任何来自eclipse的错误,但一旦运行,就会崩溃。
代码如下 对于主动性
int one = 1;
int five = 5;
int[] apple = {one, five};
int numr = (int) myDb.getCount(apple);
TextView textv = (TextView) findViewById(R.id.wds);
textv.setText("There are" + numr + "of entries");
对于Databaseadapter,Datab,
public int getCount(int[] apple) {
int fir = apple[1];
int sec = apple[2];
int fin = (int) DatabaseUtils.longForQuery(db, "SELECT COUNT(*)
FROM TABLE_NAME where length >= " +fir + "and width >="
+ sec, null);
return nfin;
logcat如下
06-10 15:44:05.817: E/AndroidRuntime(1737): FATAL EXCEPTION: main
06-10 15:44:05.817: E/AndroidRuntime(1737): java.lang.ArrayIndexOutOfBoundsException: length=2; index=2
06-10 15:44:05.817: E/AndroidRuntime(1737): at com.example.pro.Datab.getCount(Datab.java:110)
06-10 15:44:05.817: E/AndroidRuntime(1737): at com.example.pro.MainActivity.onItemSelected(Qus.java:237)
06-10 15:44:05.817: E/AndroidRuntime(1737): at android.widget.AdapterView.fireOnSelected(AdapterView.java:892)
06-10 15:44:05.817: E/AndroidRuntime(1737): at android.widget.AdapterView.access$200(AdapterView.java:49)
06-10 15:44:05.817: E/AndroidRuntime(1737): at android.widget.AdapterView$SelectionNotifier.run(AdapterView.java:860)
正如您可能猜到的那样,我对Android / Java非常陌生,所以我很感激我能得到的任何帮助。提前谢谢。
答案 0 :(得分:0)
除了数组从0开始,所以你的索引应该是:
int fir = apple[0];
int sec = apple[1];
假设您的表名是" TABLE_NAME",请在"and width...
之前添加一个空格,以便阅读" and width...
。
或者无法执行查询
它实际上会导致某些东西(不起作用),如:
SELECT COUNT(*)FROM TABLE_NAME where length >= 10and width >=20
虽然它应该像(工作)那样:
SELECT COUNT(*) FROM TABLE_NAME where length >= 10 and width >= 20
答案 1 :(得分:0)
数组索引从0开始,但您已使用apple
中的索引1和2。索引2超出范围,如错误日志中所述:
java.lang。 ArrayIndexOutOfBoundsException :length = 2; index = 2 06-10
您的错误与SQL无关。