gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 01:20:02 25 4
gpt4 key购买 nike

这是我的 Spinner 代码,它从我的 SQL 数据库中将员工姓名作为对象加载并显示在屏幕上:

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);
}

我试图将“All Employees”文本作为第一个选项,因为我想实现一个 If 语句,当用户选择“All Employees”选项时,应用程序将获取一些特定数据以及用户何时选择特定员工,例如“John Smith”应用程序将仅为该记录获取数据。

上面的代码 fragment 是我到目前为止所遇到的,我遇到了一个 ArrayIndexOutOfBoundsException 错误。

我的 LogCat 显示了这个:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.lysandroslysandrou.marstest4/com.example.lysandroslysandrou.marstest4.Reports}: java.lang.ArrayIndexOutOfBoundsException: length=5; index=5
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
at android.app.ActivityThread.access$800(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
at android.os.Handler.dispatchMessage(Handler.java:102)
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)
Caused by: java.lang.ArrayIndexOutOfBoundsException: length=5; index=5
at com.example.lysandroslysandrou.marstest4.Reports.loadNames(Reports.java:147)
at com.example.lysandroslysandrou.marstest4.Reports.onCreate(Reports.java:78)

第 147 行是 nameList[i+1] = list.get(i).getName() + ""+ list.get(i).getSurname();

我试过很多其他方法,但都没有用。从我的数据库中加载一个保存为“所有员工”的值也不是一个可行的解决方案。

我在寻找两件事:

A) 为什么我会收到此错误,尤其是在我的情况下? (我读过这个异常 herehere 但不明白为什么会发生在这里)

B) 我的问题有解决方案吗?

注意:如果行 nameList[0] = "All EmployeesemployeeList[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: 这是我的 onItemSelected 方法:

@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();
}

最佳答案

你需要改变

//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()];

//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];

因为您需要为第一个“All employees”元素再分配一个项目。

当您尝试访问 namesList[i + 1] 元素时出现异常,当 i == list.size() - 1 时,所以 i + 1 == list.size()。例如,访问 namesList[5],当您只分配了 0..4 元素时 String[] nameList = new String[list.size( )];

我评论了一些行,因为我没有你 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);
}

关于java - 使用对象和字符串加载微调器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37254301/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com