Отправка значения Spinner для переменной String вне внутреннего класса

JMeter Dude спросил: 28 марта 2018 в 04:48 в: android

Я пытаюсь передать элемент значения, выбранный в массиве Spinner, в запрос вызова API.

Я не могу получить значение вне setOnItemSelectedListener (новый AdapterView.OnItemSelectedListener ().

Я попытался использовать большинство параметров, предоставленных в ответах переполнения стека, но когда я пытаюсь распечатать String, он отображается как null.

Каков правильный способ получить string, чтобы я мог отправить его как значение через запрос или даже распечатать его.

    public class Profile2 extends AppCompatActivity implements View.OnClickListener  {private String gender;@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);    //final String gender = (String) genderspinner.getSelectedItem().toString().trim();    // Spinner gender = (Spinner) findViewById(R.id.genderspinner);
    //final EditText etGender = (EditText) findViewById(R.id.etGender);
    final Spinner genderspinner = findViewById(R.id.genderspinner);
    //String gender;
    ArrayAdapter<CharSequence> arrayAdapter = ArrayAdapter.createFromResource(this,R.array.gender, R.layout.support_simple_spinner_dropdown_item);
    arrayAdapter.setDropDownViewResource(R.layout.support_simple_spinner_dropdown_item);
    genderspinner.setAdapter(arrayAdapter);
    genderspinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {            String gendervalue = parent.getItemAtPosition(position).toString();
    //       Object item = parent.getItemAtPosition(position);
        }        @Override
        public void onNothingSelected(AdapterView<?> parent) {        }
    });   final String gender = String.valueOf(genderspinner.getSelectedItem());    Log.i("TAG", "gender here : "+gender);    // when I run the log, it is always empty.     //final String gender = String.valueOf(genderspinner.getSelectedItem());
   // genderspinner.setOnItemSelectedListener(this);updateprofile(gender)    });
}private void updateprofile(gender) {   // API call which sends the gender data
}
}

2 ответа

Есть решение
Thunder ответил: 28 марта 2018 в 05:00

Объявите global variable для хранения spinner's selected value. Попробуйте приведенный ниже код.

String gendervalue="";
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);    //final String gender = (String) genderspinner.getSelectedItem().toString().trim();    // Spinner gender = (Spinner) findViewById(R.id.genderspinner);
    //final EditText etGender = (EditText) findViewById(R.id.etGender);
    final Spinner genderspinner = findViewById(R.id.genderspinner);
    //String gender;
    ArrayAdapter<CharSequence> arrayAdapter = ArrayAdapter.createFromResource(this,R.array.gender, R.layout.support_simple_spinner_dropdown_item);
    arrayAdapter.setDropDownViewResource(R.layout.support_simple_spinner_dropdown_item);
    genderspinner.setAdapter(arrayAdapter);
    genderspinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {            gendervalue = parent.getItemAtPosition(position).toString();
    //       Object item = parent.getItemAtPosition(position);
        }        @Override
        public void onNothingSelected(AdapterView<?> parent) {        }
    });    Log.i("TAG", "gender here : "+gendervalue);updateprofile(gendervalue)    });
}

Теперь вы можете проверить логи, они покажут вам выбранное значение.

Ansh Kareliya ответил: 28 марта 2018 в 05:04

Создайте глобальную переменную и установите значение в этой переменной и обращайтесь туда, куда хотите.