【发布时间】:2014-03-26 15:28:15
【问题描述】:
我目前正在尝试从 SQLite 数据库添加项目并将它们放入微调器中。下面是数据库和主要活动的代码,如果还有什么需要补充的,请说出来。我还显示了发生的错误。
错误:
02-24 14:01:59.222 23660-23660/com.example.bank_app E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.NullPointerException
at com.example.bank_app.main_menu_activity.onOptionsItemSelected(main_menu_activity.java:149)
at android.app.Activity.onMenuItemSelected(Activity.java:2640)
at com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java:1171)
at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:735)
at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:152)
at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:874)
at com.android.internal.view.menu.ActionMenuView.invokeItem(ActionMenuView.java:630)
at com.android.internal.view.menu.ActionMenuItemView.onClick(ActionMenuItemView.java:200)
at android.view.View.performClick(View.java:4489)
at android.view.View$PerformClick.run(View.java:18803)
at android.os.Handler.handleCallback(Handler.java:730)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5455)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1187)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
at dalvik.system.NativeStart.main(Native Method)
主要活动代码:
List<String> SpinnerArray = db.getAccountsNames();
// Outputs items in SpinnerArray to logcat
/*for (int j = 0; j < SpinnerArray.size(); j++)
{
Log.d("Output", j + ": " + SpinnerArray.get(j).toString());
}*/
ArrayAdapter spinnerAdapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item, SpinnerArray);
spinnerAdapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
Spinner accountSpinner = (Spinner)findViewById(R.id.spinner1);
accountSpinner.setAdapter(spinnerAdapter);
数据库处理程序:
// Getting All Account Names return ArrayList<Account)
public ArrayList<String> getAccountsNames()
{
ArrayList<String> accountNameList = new ArrayList<String>();
String selectQry = "SELECT * FROM " + Table_Account;
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(selectQry, null);
// looping through all rows and adding to list
if (cursor.moveToFirst())
{
do
{
//Account account = new Account();
//account.setAccountName(cursor.getString(cursor.getColumnIndex(KEY_NAME)));
// Add to account list
accountNameList.add(cursor.getString(cursor.getColumnIndex(KEY_NAME)));
}while(cursor.moveToNext());
}
db.close();
return accountNameList;
}
我知道 SpinnerArray 中有信息,因为这些项目会打印到 logcat,但是我的错误发生在以下代码中的某处:
ArrayAdapter spinnerAdapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item, SpinnerArray);
spinnerAdapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
Spinner accountSpinner = (Spinner)findViewById(R.id.spinner1);
accountSpinner.setAdapter(spinnerAdapter);
感谢您的帮助!
XML -(这是自定义警报对话框的 xml)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layout_root"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:padding="10dp" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/titleTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp"
android:text="Select account to delete: "
android:textAppearance="?android:attr/textAppearanceMedium" />
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<Spinner
android:id="@+id/spinner1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp"
android:layout_weight="1" />
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="10dp" >
<Button
android:id="@+id/btnDelete"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Delete" />
<Button
android:id="@+id/btnCancel"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Cancel" />
</LinearLayout>
</LinearLayout>
【问题讨论】:
-
你的错误在
main_menu_activity.java:149一行 -
你能分享你在
onOptionsItemSelected()回调你的活动中的代码吗?代码在第 149 行崩溃。检查它与您的微调器无关,而是与选项菜单相关。 -
第 149 行是 accountSpinner.setAdapter(spinnerAdapter);
标签: android sqlite error-handling spinner android-spinner