Ich versuche, einen vom Spinner ausgewählten Wert an eine andere Klasse zu übergeben, aber er übergibt null.

protected int secondsToUse;

final String titles[] = {
  "1 Second","2 Seconds", "3 Seconds","4 Seconds",
  "5 Seconds","6 Seconds","7 Seconds","8 Seconds","9 Seconds","10 Seconds"
};

mSeconds = (Spinner) view.findViewById(R.id.secondsSpinner);

 ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item, titles);
        arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    mSeconds.setAdapter(arrayAdapter);
mSeconds.setOnItemSelectedListener(
    new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
            // secondsToUse is declared a as int variable above
            secondsToUse = position + 1;
        }



// passing the value to another class.// PASSES AS NULL
Intent recipientsIntent = new Intent(getActivity(), RecipientsActivity.class);
                    recipientsIntent.putExtra("key1", secondsToUse);
                    startActivity(recipientsIntent);

// retrieving the value //retrieves as null
String Seconds = getIntent().getStringExtra("key1");
byte[] secs = Seconds.getBytes();

Ich versuche, die Position zu ermitteln, die der Benutzer auf dem Spinner auswählt, damit ich sie an einen Timer übergeben kann, damit sich die Bilder selbst zerstören. im moment bekomme ich null

0
smithyy 22 Aug. 2015 im 14:43

5 Antworten

Beste Antwort

Bearbeiten: Ich habe vergessen zu berücksichtigen, dass getIntExtra() in meiner ersten Antwort zwei Argumente berücksichtigt. Es erfordert einen identifizierenden "Schlüssel" und einen Standardwert.

Lassen Sie Ihren Code unverändert, um die Position der ausgewählten Zeile in RecipientsActivity abzurufen. Dann in onCreate() von RecipientsActivity:

int seconds = getIntent().getIntExtra("key1", -1);

1
PPartisan 22 Aug. 2015 im 13:07

Ersetzen Sie getStringExtra() durch getIntExtra()

int default = -1;
String val = getIntent().getIntExtra("key1",default);
if(val == default){
  //Log, exception, no value etc.
}
String Seconds = String.valueOf(val);
byte[] secs = Seconds.getBytes();

Rufen Sie start Activity auf, wenn das Element aus ListView ausgewählt wurde.

mSeconds.setOnItemSelectedListener(
    new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
            // secondsToUse is declared a as int variable above
            secondsToUse = position + 1;
            // passing the value to another class.// PASSES AS NULL
            Intent recipientsIntent = new Intent(getActivity(),     RecipientsActivity.class);
            recipientsIntent.putExtra("key1", secondsToUse);
            startActivity(recipientsIntent);
        }
0
dieter_h 22 Aug. 2015 im 12:33

Ersetzen Sie einfach getStringExtra() durch getIntExtra()

int defaultSecond = -1;
int seconds = getIntent().getIntExtra("key1",defaultSecond);

Grund: Weil Sie ein int und kein String in putExtra("key1", secondsToUse); einfügen

Verwenden Sie auch den Fall eines Kamels, um eine Variable zu benennen. Verwenden Sie Sekunden anstelle von Sekunden. Ich hoffe das hilft!

0
Malwinder Singh 22 Aug. 2015 im 13:17

Warum verwenden Sie getStringExtra()?

Sie übergeben eine Ganzzahl, erhalten also eine Ganzzahl

// retrieving the value
int seconds = getIntent().getIntExtra("key1");

Wenn Sie es als String benötigen, verwenden Sie

String secondsAsString = String.valueOf(seconds);
0
Pelocho 22 Aug. 2015 im 11:56

Rufen Sie Ihre nächste Aktivität mit expliziter Absicht in OnItemSelectListner auf. Versuchen Sie dies

MSeconds.setOnItemSelectedListener (neuer AdapterView.OnItemSelectedListener () {

@Override

Public void onItemSelected (AdapterView parentView, View selectedItemView, int

Position, lange ID) {

               secondToUse = String.valueOf(position + 1);
               Intent intent = new Intent(CurrentClass.this,NewClass.Class);
               putInentExtra("Key1","secondTouse");
               startActivity(intent);

        }

Und in Ihrer nächsten Aktivität erhalten Sie Intent By-

Absicht i = getIntent ();

String getPosition = i.getStringExtra ("Key1");

Genießen :)

0
Amit Bhati 22 Aug. 2015 im 12:00