【发布时间】:2019-01-20 18:25:06
【问题描述】:
我正在为我的 A2 级别计算机科学课程作业开发应用程序,并且在尝试将数据库表中的数据加载到微调器时遇到了错误。我希望在微调器中包含所有领导者的身份证、名字和姓氏,但是我遇到了一个错误。这是我为数据库处理程序编写的代码:
private static final String CREATE_TABLE_EVENTS=("CREATE TABLE " + TABLE_EVENTS + "("
+ COLUMN_SEID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COLUMN_SNAME + " TEXT,"
+ COLUMN_STYPE + " TEXT,"+ COLUMN_SDATE + " TEXT," + COLUMN_EDATE + " TEXT,"
+ COLUMN_STIME + " TEXT," + COLUMN_ETIME + " TEXT," + COLUMN_VENUE + " TEXT,"
+ COLUMN_DESC + " TEXT," + COLUMN_SCID + " INTEGER," + COLUMN_EMAIL + " TEXT,"
+ COLUMN_ACOST + " REAL," + COLUMN_INV + " INTEGER," + COLUMN_PCOST + " REAL,"
+ COLUMN_FOOD + " TEXT," + COLUMN_TINC + " TEXT," + COLUMN_DIST + " INTEGER,"
+ COLUMN_TCOST + " REAL )"); //The columns had been defined earlier
...
//Search for leaders for spinner for purpose of creating an event
public String[][] eventLeadersSearch() {
int CursorPosition;
String[][] leadersList =new String[3][];
String ScoutSection = "Leaders";
String query = "SELECT " + COLUMN_SCID + ", " + COLUMN_FNAME + ", " + COLUMN_LNAME +" FROM " + TABLE_SCOUTS + " WHERE " + COLUMN_SECTION + " LIKE '" + ScoutSection + "'";
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(query, null);
int rowsFound=cursor.getCount();
int x=0;
if (rowsFound>0) {
cursor.moveToFirst();
do {
CursorPosition = cursor.getPosition();
leadersList[0][x] = Integer.toString((cursor.getInt(0)));//DEFINITELY SOMETHING WRONG HERE
leadersList[1][x] = cursor.getString(1);
leadersList[2][x] = cursor.getString(2);
x = x + 1;
cursor.moveToNext();
}
while (!cursor.isAfterLast());
}
else {
Log.e("Database Error", "No Leaders Found");
}
cursor.close();
db.close();
return leadersList;
}
我使用二维数组的原因是稍后,我希望能够返回并检索有关该领导者的更多详细信息 - 但是这将在不同的屏幕上,因此在不同的类中。因此,我也希望能够单独保留所有细节。
这是我编写的将所有值放入微调器的代码:
private void loadSpinnerData(){
databaseHandler db=new databaseHandler(getApplicationContext());
String[][] Leaders=db.eventLeadersSearch(); //Error here
List<String> LeadersInOne=new ArrayList<>();
for (int i=0; i<Leaders.length; i++)
{
for (int j=0; j<Leaders[i].length; j++)
{
LeadersInOne.add(Leaders[i][j]);
}
}
ArrayAdapter<String> dataAdapter=new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, LeadersInOne);
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
leadersSpinner.setAdapter(dataAdapter);
}
这些是出现在 LogCat 中的错误详细信息:
01-20 18:41:02.712 16113-16113/com.example.atomi.scoutmanagerprototype E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.atomi.scoutmanagerprototype, PID: 16113
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.atomi.scoutmanagerprototype/com.example.atomi.scoutmanagerprototype.frmCreateEvent1}: java.lang.NullPointerException: Attempt to get length of null array
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2314)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2386)
at android.app.ActivityThread.access$800(ActivityThread.java:148)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1292)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5310)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:901)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696)
Caused by: java.lang.NullPointerException: Attempt to get length of null array
at com.example.atomi.scoutmanagerprototype.frmCreateEvent1.loadSpinnerData(frmCreateEvent1.java:44)
at com.example.atomi.scoutmanagerprototype.frmCreateEvent1.onCreate(frmCreateEvent1.java:33)
at android.app.Activity.performCreate(Activity.java:5953)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1128)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2267)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2386)
at android.app.ActivityThread.access$800(ActivityThread.java:148)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1292)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5310)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:901)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696)
有谁知道可能出了什么问题?这是我第一次在 Android Studio、Java 或 XML 中工作,我必须自学所有这些,所以非常感谢任何帮助。谢谢。
【问题讨论】:
-
如错误信息中明确指出的,您的数据库中有
SessionName列吗? -
我确实有,虽然我没有注意到 - 我会环顾四周看看是否有任何错误。谢谢!
-
编辑了问题,因为其中一个错误只是一个错字 - 但是,我仍然不太清楚其他两个错误是什么。
标签: java android sqlite android-studio