Android Can';不要将数组用于开关盒
我在字符串文件(在values文件夹中)中创建了一个数组。 现在我想用它来选择微调器,使用开关盒。 诸如此类:Android Can';不要将数组用于开关盒,android,arrays,spinner,android-arrayadapter,android-spinner,Android,Arrays,Spinner,Android Arrayadapter,Android Spinner,我在字符串文件(在values文件夹中)中创建了一个数组。 现在我想用它来选择微调器,使用开关盒。 诸如此类: ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_dropdown_item_1line,workers); spinner.setAdapter(adapter); spinner.setOnItemSelectedListener(this); public void addUser(View
ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_dropdown_item_1line,workers);
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(this);
public void addUser(View view) {
switch (Arrays.toString(workers)){
case workers[0]: //this option isn't compiling
Waiter waiter = new Waiter();
waiter.setName(editName.getText().toString());
waiter.setLast(editLast.getText().toString());
waiter.setPass(editPass.getText().toString());
name = editName.getText().toString();
last = editLast.getText().toString();
passId = Integer.parseInt(editPass.getText().toString());
break;
case workers[1]:
break;
}
等等
编辑:
现在尝试使用if语句,此方法应在按钮按下时为我添加新的工作人员,但之后当我按下按钮时,什么也不会发生:
public void addUser(View view) {
if(Arrays.toString(workers).equals(workers[0])) {
Waiter waiter = new Waiter();
SQLiteDatabase usersDB = openOrCreateDatabase("USERES_DATABSE.sqlite", MODE_PRIVATE, null);
usersDB.execSQL("CREATE TABLE IF NOT EXISTS users_table (name TEXT, last TEXT, pass INTEGER)");
waiter.setName(editName.getText().toString());
waiter.setLast(editLast.getText().toString());
waiter.setPass(editPass.getText().toString());
name = editName.getText().toString();
last = editLast.getText().toString();
passId = Integer.parseInt(editPass.getText().toString());
if (editName.getText().toString().isEmpty() ||
editLast.getText().toString().isEmpty() ||
editPass.getText().toString().isEmpty()) {
AlertDialog alertDialog = new AlertDialog.Builder(UserCreatingActivity.this).create();
alertDialog.setTitle("Oops,");
alertDialog.setMessage("You forgot to fill something");
alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
alertDialog.show();
} else {
usersDB.execSQL("INSERT INTO users_table VALUES('" + name + "','" + last + "','" + passId + "')");
AlertDialog alertSucsess = new AlertDialog.Builder(UserCreatingActivity.this).create();
alertSucsess.setTitle("Congrats,");
alertSucsess.setMessage(name + " " + last + " Has been created");
alertSucsess.setButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
startActivity(new Intent(getApplicationContext(), MainActivity.class));
}
});
alertSucsess.show();
}
usersDB.close();
// ADDING SHIFT MANAGER
} else if (Arrays.toString(workers).equals(workers[1])){
不能在开关中使用变量。换成if
或者您可以更改为案例0:、案例1:、案例2:因为它始终是workers[]您不能在开关中使用变量。换成if
或者您可以更改为案例0:、案例1:、案例2:因为它始终是workers[]您不能在开关中使用变量。换成if
或者您可以更改为案例0:、案例1:、案例2:因为它始终是workers[]您不能在开关中使用变量。换成if
或者您可以更改为案例0:、案例1:、案例2:因为它始终是workers[]
case
表达式必须是常量值
如果预定义了
worker
的可能值,请将这些预定义值和常量值用作case
表达式 大小写
表达式必须是常量
如果预定义了
worker
的可能值,请将这些预定义值和常量值用作case
表达式 大小写
表达式必须是常量
如果预定义了
worker
的可能值,请将这些预定义值和常量值用作case
表达式 大小写
表达式必须是常量
如果预定义了worker
的可能值,请将这些预定义值和常量值用作case
表达式
开关使用byte、short、char和int基元数据类型。它还适用于枚举类型(在枚举类型中讨论)、字符串类和一些包装某些基本类型的特殊类:Character、Byte、Short和Integer(在数字和字符串中讨论)
您不能使案例
s变量。开关
正常。只需将大小写
s更改为常量即可
如果这是不可行的,那么您必须按照Alex的建议去做,并求助于If
语句,这在许多情况下会导致代码行数减少
比如说
我认为您的逻辑中存在错误,但是如果没有更多的代码,就不能更具体
开关使用byte、short、char和int基元数据类型。它还适用于枚举类型(在枚举类型中讨论)、字符串类和一些包装某些基本类型的特殊类:Character、Byte、Short和Integer(在数字和字符串中讨论)
您不能使案例
s变量。开关
正常。只需将大小写
s更改为常量即可
如果这是不可行的,那么您必须按照Alex的建议去做,并求助于If
语句,这在许多情况下会导致代码行数减少
比如说
我认为您的逻辑中存在错误,但是如果没有更多的代码,就不能更具体
开关使用byte、short、char和int基元数据类型。它还适用于枚举类型(在枚举类型中讨论)、字符串类和一些包装某些基本类型的特殊类:Character、Byte、Short和Integer(在数字和字符串中讨论)
您不能使案例
s变量。开关
正常。只需将大小写
s更改为常量即可
如果这是不可行的,那么您必须按照Alex的建议去做,并求助于If
语句,这在许多情况下会导致代码行数减少
比如说
我认为您的逻辑中存在错误,但是如果没有更多的代码,就不能更具体
开关使用byte、short、char和int基元数据类型。它还适用于枚举类型(在枚举类型中讨论)、字符串类和一些包装某些基本类型的特殊类:Character、Byte、Short和Integer(在数字和字符串中讨论)
您不能使案例
s变量。开关
正常。只需将大小写
s更改为常量即可
如果这是不可行的,那么您必须按照Alex的建议去做,并求助于If
语句,这在许多情况下会导致代码行数减少
比如说
我认为您的逻辑中存在错误,但如果没有更多的代码,就无法更具体。正如大家提到的,您无法将数组与交换机一起使用,因此您将使用if。您编写条件的方式似乎不正确
if(Arrays.toString(workers).equals(workers[0])
。在完成问题之后,根据微调器中的选择,您必须添加用户…如果我错了,请更正我。因此,首先需要找到微调器的值。解决方案1
创建一个实例字符串变量,并实现如下所示的onItemSelected
String workerSelected;
//your code
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1,
int position, long arg3) {
workerSelected=worker[position]
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
});
然后在addUser方法中,您可以将if条件作为
if(workerSelected.equals(worker[0])){
//your code
}else if(workerSelected.equals(worker[1])){
//your code
}
解决方案2直接在addUser方法内部
正如大家提到的那样,无法将数组与交换机一起使用,因此您将使用if。您编写条件的方式似乎不正确
if(Arrays.toString(workers).equals(workers[0])
。在完成问题之后,根据微调器中的选择,您必须添加用户…如果我错了,请更正我。因此,首先需要找到微调器的值。解决方案1
创建一个实例字符串变量,并实现如下所示的onItemSelected
String workerSelected;
//your code
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1,
int position, long arg3) {
workerSelected=worker[position]
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
});
然后在addUser方法中,您可以将if条件作为
if(workerSelected.equals(worker[0])){
//your code
}else if(workerSelected.equals(worker[1])){
//your code
}
解决方案2直接在addUser方法内部
正如大家提到的,不能将数组用于
String workerSelected = spinner.getSelectedItem().toString();
if(workerSelected.equals(worker[0])){
//your code
}else if(workerSelected.equals(worker[1])){
//your code
}