尝试将项目放入微调器时出错-Android
我目前正在尝试从SQLite数据库添加项目,并将它们放入微调器。下面显示了数据库和主要活动的代码,如果还有其他需要添加的内容,请说明。我还显示了发生的错误 错误:尝试将项目放入微调器时出错-Android,android,sqlite,error-handling,spinner,android-spinner,Android,Sqlite,Error Handling,Spinner,Android Spinner,我目前正在尝试从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_ac
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);
谢谢你的帮助强>
XML-(这是用于自定义警报对话框的XML)
试试这个
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, SpinnerArray);
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
Spinner accountSpinner = (Spinner) findViewById(R.id.spinner1);
accountSpinner.setAdapter(dataAdapter);
ArrayAdapter dataAdapter=新的ArrayAdapter(这是android.R.layout.simple\u spinner\u项,spinnerray);
dataAdapter.setDropDownViewResource(android.R.layout.simple\u微调器\u下拉项);
微调器accountSpinner=(微调器)findViewById(R.id.spinner1);
setAdapter(dataAdapter);
如您所说,id为spinner1
的微调器位于自定义警报对话框中。但是活动中的findViewById()
会尝试从活动视图层次结构中查找它。您的对话框不是活动层次结构的一部分。必须在对话框层次结构中搜索该对象
例如,改变
Spinner accountSpinner = (Spinner)findViewById(R.id.spinner1);
到
其中,对话框
是正在显示的对话框
(您并没有真正显示您是如何扩大对话框的,所以可能有更好的方法。)由于laalto的帮助,问题的答案如图所示
case R.id.action_delete_account:
{
final Dialog dialog = new Dialog(this);
dialog.setContentView(R.layout.delete_account);
dialog.setTitle("Delete Account");
dialog.setCancelable(true);
spn = (Spinner)dialog.findViewById(R.id.spinner1);
List<String> SpinnerArray = db.getAccountsNames();
/*for (int j = 0; j < SpinnerArray.size(); j++)
{
Log.d("Output", j + ": " + SpinnerArray.get(j).toString());
}*/
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, SpinnerArray);
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
//Log.d("Output", Integer.toString(dataAdapter.getCount()));
spn.setAdapter(dataAdapter);
//TextView title = (TextView) dialog.findViewById(R.id.titleTextView);
btnDelete = (Button) dialog.findViewById(R.id.btnDelete);
btnCancel = (Button) dialog.findViewById(R.id.btnCancel);
btnDelete.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View view)
{
displayListView();
}
});
btnCancel.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View view)
{
dialog.cancel();
}
});
dialog.show();
}
default:
{
return super.onOptionsItemSelected(item);
}
}
案例R.id.action\u delete\u账户:
{
最终对话框=新对话框(本);
setContentView(R.layout.delete_帐户);
对话框.setTitle(“删除帐户”);
对话框。可设置可取消(true);
spn=(微调器)dialog.findviewbyd(R.id.spinner1);
List spinnerray=db.getAccountsNames();
/*对于(int j=0;j
您的错误出现在活动的主菜单中。java:149
您能否在活动中共享您在onOptionsItemSelected()
回调中的代码?代码在第149行崩溃。选中它与微调器无关,而是与选项菜单相关。第149行是accountSpinner.setAdapter(spinnerAdapter);仍然无法工作,我在accountSpinner.setAdapter(dataAdapter)中遇到一个错误;代码的一部分。您确定微调器的id为“spinner1”吗?我这样问是因为我犯了这个错误,导致了一个NullPointerYes,当我将代码更改为您的代码时,上面的错误与我收到的错误相同。02-24 14:38:39.610 24953-24953/com.example.bank_app E/AndroidRuntime﹕ 致命异常:com.example.bank_app.main_menu_activity.onOptionsItemSelected(main_menu_activity.java:155)上的main java.lang.NullPointerException(activity.java:2640)上的com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java:1171)谢谢!解决了我的问题!
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, SpinnerArray);
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
Spinner accountSpinner = (Spinner) findViewById(R.id.spinner1);
accountSpinner.setAdapter(dataAdapter);
Spinner accountSpinner = (Spinner)findViewById(R.id.spinner1);
Spinner accountSpinner = (Spinner)dialog.findViewById(R.id.spinner1);
case R.id.action_delete_account:
{
final Dialog dialog = new Dialog(this);
dialog.setContentView(R.layout.delete_account);
dialog.setTitle("Delete Account");
dialog.setCancelable(true);
spn = (Spinner)dialog.findViewById(R.id.spinner1);
List<String> SpinnerArray = db.getAccountsNames();
/*for (int j = 0; j < SpinnerArray.size(); j++)
{
Log.d("Output", j + ": " + SpinnerArray.get(j).toString());
}*/
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, SpinnerArray);
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
//Log.d("Output", Integer.toString(dataAdapter.getCount()));
spn.setAdapter(dataAdapter);
//TextView title = (TextView) dialog.findViewById(R.id.titleTextView);
btnDelete = (Button) dialog.findViewById(R.id.btnDelete);
btnCancel = (Button) dialog.findViewById(R.id.btnCancel);
btnDelete.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View view)
{
displayListView();
}
});
btnCancel.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View view)
{
dialog.cancel();
}
});
dialog.show();
}
default:
{
return super.onOptionsItemSelected(item);
}
}