Search code examples
androidandroid-studiospinnerandroid-spinner

Sending Spinner value to String variable outside the inner class


I am trying to pass the value item selected in the Spinner array to an API call request.

I am unable to get the value to outside of setOnItemSelectedListener(new AdapterView.OnItemSelectedListener().

I have tried to use most of the options provided in the Stack overflow answers, but when I try to print the String, it shows as null.

What is the correct way to get the string variable outside so that I can send it as a value via a request, or even print it.

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

Solution

  • Declare a global variable to store spinner's selected value . Try below code .

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

    You can check logs now , it will show you the selected value.