Java 使用对象和字符串加载微调器

Java 使用对象和字符串加载微调器,java,android,Java,Android,这是我的微调器代码,它将员工姓名作为对象从我的SQL db加载并显示在屏幕上: private void loadNames() { //database handler LysandrosDatabaseAdapter db = new LysandrosDatabaseAdapter(getApplicationContext()); List<DataBean> list = db.getAllDat(); //list for storin

这是我的
微调器
代码,它将员工姓名作为对象从我的SQL db加载并显示在屏幕上:

private void loadNames() {
    //database handler
    LysandrosDatabaseAdapter db = new LysandrosDatabaseAdapter(getApplicationContext());

    List<DataBean> list = db.getAllDat();

    //list for storing the names
    String[] nameList = new String[list.size()];
    //list for storing the ID and keeping it hidden
    employeeList = new int[list.size()];
    //loop to fill the list

    nameList[0] = "All Employees";
    employeeList[0] = 0;
    for (int i=0; i<list.size(); i++) {
        nameList[i+1] = list.get(i).getName() + " " + list.get(i).getSurname();
        employeeList[i+1] = list.get(i).getID();
    }
    //creating adapter for spinner
    ArrayAdapter<String > dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, nameList);
    //drop down layout style - list view with radio button
    dataAdapter.setDropDownViewResource(android.R.layout.select_dialog_multichoice);
    //attaching data adapter to spinner
    selectName.setAdapter(dataAdapter);
}
第147行是
nameList[i+1]=list.get(i).getName()+“”+list.get(i).getName()

我尝试过许多其他方法,但都不管用。从my db加载保存为“All Employees”的值也不是可行的解决方案

我在寻找两件事:

A)为什么我会出现这个错误,尤其是在我的情况下?(我读过这个例外,但不明白为什么会发生在这里)

还有B)我的问题有解决办法吗

注意:如果删除了
nameList[0]=“所有员工”
employeeList[0]=“0”
,则代码段工作正常

编辑:我的新堆栈跟踪:

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference
        at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:394)
        at android.widget.ArrayAdapter.getDropDownView(ArrayAdapter.java:415)
        at android.support.v7.widget.AppCompatSpinner$DropDownAdapter.getDropDownView(AppCompatSpinner.java:624)
        at android.support.v7.widget.AppCompatSpinner$DropDownAdapter.getView(AppCompatSpinner.java:620)
        at android.support.v7.widget.AppCompatSpinner.compatMeasureContentWidth(AppCompatSpinner.java:547)
        at android.support.v7.widget.AppCompatSpinner.access$500(AppCompatSpinner.java:65)
        at android.support.v7.widget.AppCompatSpinner$DropdownPopup.computeContentWidth(AppCompatSpinner.java:738)
        at android.support.v7.widget.AppCompatSpinner$DropdownPopup.show(AppCompatSpinner.java:763)
        at android.support.v7.widget.AppCompatSpinner.performClick(AppCompatSpinner.java:424)
        at android.view.View$PerformClick.run(View.java:19749)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5221)
        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:899)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
编辑2:这是我选择的
方法:

@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
    //On selecting a spinner item
    String list = parent.getItemAtPosition(position).toString();
    //employeeId = employeeList[position];
    //showing selected spinner item
    Toast.makeText(parent.getContext(), "You selected: " + list, Toast.LENGTH_SHORT).show();
}
@覆盖
已选择公共视图(AdapterView父视图、视图视图、整型位置、长id){
//关于选择微调器项
String list=parent.getItemAtPosition(position.toString();
//employeeId=员工列表[职位];
//显示所选微调器项
Toast.makeText(parent.getContext(),“您选择的:”+列表,Toast.LENGTH\u SHORT.show();
}
您需要更改

//list for storing the names
String[] nameList = new String[list.size()];
//list for storing the ID and keeping it hidden
employeeList = new int[list.size()];

因为您需要为第一个“所有员工”元素再分配一个项目

当尝试访问
namesList[i+1]
元素时,当
i==list.size()-1
时,您会得到一个例外,因此
i+1==list.size()
。例如,当您只分配了
0..4
String[]namesList=新字符串[list.size()];

我评论了一些行,因为我没有you db。但是下面的代码对我来说很好:

private void loadSpinner(Spinner spinner, ArrayList<Integer> items) {
    //list for storing the names
    String[] nameList = new String[items.size() + 1];
    //list for storing the ID and keeping it hidden
    //employeeList = new int[list.size()];
    //loop to fill the list

    nameList[0] = "All Employees";
    //employeeList[0] = 0;
    for (int i = 0; i < items.size(); i++) {
        nameList[i + 1] = String.valueOf(i);
    }
    //creating adapter for spinner
    ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(getContext(), android.R.layout.simple_spinner_item, nameList);
    //drop down layout style - list view with radio button
    dataAdapter.setDropDownViewResource(android.R.layout.select_dialog_multichoice);
    //attaching data adapter to spinner
    spinner.setAdapter(dataAdapter);
}
private void加载微调器(微调器微调器,ArrayList项){
//用于存储名称的列表
字符串[]名称列表=新字符串[items.size()+1];
//用于存储ID并将其隐藏的列表
//employeeList=newint[list.size()];
//循环以填充列表
姓名列表[0]=“所有员工”;
//员工列表[0]=0;
对于(int i=0;i
非常感谢,但现在我得到了一个
java.lang.NullPointerException:尝试调用虚拟方法'java.lang.String java.lang.Object.toString()'在空对象引用上
当我单击微调器时!这段代码对我来说很好,因此另一个部分会导致NullPointerException。你能发布更多代码和新的stacktrace吗?当然,我添加了新的stacktrace,但你还想要什么代码?我包含了更多代码,请告诉我这对你有用吗,或者你是否需要我在找别的东西。嗯……我也试过了onItemSelected,对我来说一切都很好。对我来说唯一的区别是我更改了
list.get(I).getName()+“”+list.get(I).getName();
String.valueOf(I);
。你能试着替换它并运行吗?
//list for storing the names
String[] nameList = new String[list.size() + 1];
//list for storing the ID and keeping it hidden
employeeList = new int[list.size() + 1];
private void loadSpinner(Spinner spinner, ArrayList<Integer> items) {
    //list for storing the names
    String[] nameList = new String[items.size() + 1];
    //list for storing the ID and keeping it hidden
    //employeeList = new int[list.size()];
    //loop to fill the list

    nameList[0] = "All Employees";
    //employeeList[0] = 0;
    for (int i = 0; i < items.size(); i++) {
        nameList[i + 1] = String.valueOf(i);
    }
    //creating adapter for spinner
    ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(getContext(), android.R.layout.simple_spinner_item, nameList);
    //drop down layout style - list view with radio button
    dataAdapter.setDropDownViewResource(android.R.layout.select_dialog_multichoice);
    //attaching data adapter to spinner
    spinner.setAdapter(dataAdapter);
}