不能将数组用于开关盒

Can't use an array for switch case

我在我的字符串文件中(在值文件夹中)创建了一个数组。 现在我想用它来选择微调器,使用开关盒。 类似的东西:

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.

或者您可以更改为 case 0:, case 1:, case 2: 因为它总是 workers[]

case 表达式必须是常数值。

如果 workers 的可能值是预定义的,请将这些预定义和常量值用作 case 表达式。

A switch works with the byte, short, char, and int primitive data types. It also works with enumerated types (discussed in Enum Types), the String class, and a few special classes that wrap certain primitive types: Character, Byte, Short, and Integer (discussed in Numbers and Strings)

https://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html

您不能创建 cases 变量。 switch 没问题。只需将 cases 更改为常量即可。

如果这是行不通的,那么您必须按照 Alex 的建议去做,并求助于 if 语句,这在许多 情况下 会导致代码行数减少。

例如

        if (Arrays.toString(workers).equals(workers[0])) {
                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());
           }

我认为您的逻辑有误,但如果没有更多代码就无法更具体。

正如大家提到的,您不能将数组与开关一起使用,因此您将使用 if。而且你写条件的方式似乎不正确if(Arrays.toString(workers).equals(workers[0]))。在完成问题后,根据微调器中的选择,您必须添加用户……如果我错了,请纠正我。所以首先你需要找到spinner的值。
解决方案1
创建一个实例 String 变量并实现 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

        }
    });

由于您已经添加了 spinner.setOnItemSelectedListener(this); 然后直接覆盖方法即下面的代码就足够了

 @Override
 public void onItemSelected(AdapterView<?> arg0, View arg1,
                    int position, long arg3) {
   workerSelected=worker[position]

  }

然后在 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
    }