int Array an intent übergeben

R

rufux

Ambitioniertes Mitglied
5
Ich mal wieder... ;)

eine Frage:

ich habe x Buttons auf meinem Screen...
ich habe einen int array

nun habe ich einen onclicklistener, der schaut welcher button gedrückt wurde.

so wurde nun also button 1,3,5 und 6 gedrückt wird der array etwa so aussehen:

(1,0,1,0,1,1)

Diesen Wert will ich nun einem intent mitgeben um diesen dann in der anderen Klasse zu bearbeiten!

Nun meine Frage:

es gibt für den Intent eine Funktion: .putExtra()
genau mit der Versuche ich zu Arbeiten aber diese erwartet zwei Parameter (String,int[])

An dieser Stelle bin ich überfragt...

Vielleicht wisst Ihr weiter.

Vg
 
Du musst einen String angeben, der identifiziert, was du gerade reinsteckst.
Bei getIntArrayExtra(String name) musst du den dann wieder angeben, wenn du die Daten wieder aus dem Intent holst.
Den String kannst du beliebig wählen, er muss aber mit dem Namen eines Package beginnen. ("com.android.contacts.ShowAll" oder "com.rufux.superapp.KrassesIntArray" oder was auch immer.)

(Stell dir die Extras als eine Map vor, in der die Daten unter String-Schlüsseln abgelegt werden. Genau das sind sie nämlich.)

Siehe auch:
Intent | Android Developers
 
  • Danke
Reaktionen: rufux
ggut das hilft mir schonmal weiter!
also habe ich jetzt i.putExtra("com.test.buttonArray",checked[]);

nun habe ich das Problem, dass er eine größe des Arrays haben möchte.

Kann ich das umgehen oder muss ich mit sizeOf eintragen?

oder kann ich einfach nur checked ohne [] übergeben?

und vorallem wie ist der Aufruf in der anderen Klasse?
 
Zuletzt bearbeitet:
Code:
i.putExtra("com.test.buttonArray", checked);
Code:
checked // Array als Ganzes
checked[zahl] // Einzelnes Element
int checked[]; // Einzige Stelle, wo checked[] überhaupt geht - wenn du die Variable deklarierst.
int[] checked; // Find ich persönlich als Deklaration besser.
Code:
int[] checked = i.getIntArrayExtra("com.test.buttonArray");
 
ok das erste hatte ich schon rausgefunden ;)

Danke schonmal dafür.

Aber der Aufruf in der zweiten Klasse ist mir auch noch nen wenig unklar?

ich habe in meiner Funktion: onCreate kein Intent...

mache ich das dann in der automatisch generierten Funktion IBinder onBind?

VG
und Vielen Danke
 
Code:
Intent i = this.getIntent();

So müsstest du den kriegen. ;)
 
An was übergibst du denn? Activity oder Service?
 
Activity
 
Kranki schrieb:
Den String kannst du beliebig wählen, er muss aber mit dem Namen eines Package beginnen. ("com.android.contacts.ShowAll" oder "com.rufux.superapp.KrassesIntArray" oder was auch immer.)

Mh, hat bei mir bisher immer ohne geklappt. :huh:
 
Guten Morgen community,

also ich habe jetzt nen wenig probiert.

ich rufe nun die activity wie folgt auf:

Code:
Intent i = new Intent();
i.putExtra("com.test.intArray",checked);
i.setClass(main.this, sms_sending.class);
startActivity(i);

und mein array wird wie folgt initialisiert:
Code:
int[] checked;


so in meiner sms_sending versuche ich auf das array jetzt wie folgt aus der onCreate drauf zuzugreifen:

Code:
Intent i = this.getIntent();
temp = i.getIntArrayExtra("com.test.intArray");
 
if (temp[0]==1){ msg="works";}
sendSMS(number, msg);

wobei ich meinen Array vorher wieder wie folgt initialisiere:
Code:
int[] temp;

lautLog Cat bekomme ich an der Stelle eine NullPointerException

Code:
if(temp[0]==1)
was mir unklar ist, da ich ja nur ne Abfrage mache

vielleicht habt Ihr ne Idee?

VG
 
Guten Morgen,

du sagst das du dein IntArray checked mit:

Code:
int[] checked;

initialisierst.
Wenn du dies so stehen lässt, dann deklarierst du aber nur dein Array,
initialisieren bedeutet einer Variable einen Wert zu zuweisen, in dem Falle musst du also ein neues Int Array anlegen mit einer festen Größe z.B.

Code:
int[] checked = new int[5];

Wenn du das Array nämlich nicht initialisierst und es dann übergibst, übergibst du einen Null-Wert, dementsprechend kannst du wenn du die Extras abgreifst auch auf nix zugreifen.
Deswegen wird dir bei der Abfrage temp[0] auch eine NullPointer Exception geworden, weil die [0] noch nicht vorhanden ist!

Grüße
FireDragon
 
  • Danke
Reaktionen: rufux
ja genau das habe ich auch gerade gelesen..

Jez gehts danke
 
ich ändere einen WErt des Arrays auf Tastendruck... funktioniert auch. laut debugger

im selben screen, selber onClickListener übergebe ich den array zur nächsten Activity.

wenn ich dort den Array wiederhole mit

Code:
Intent i = this.getIntent();
 
temp=i.getIntArrayExtra("com.test.intArray");
ist mein Array leer.

Dies aber nur, wenn ich vorher den WErtändern Button klicke.

Ädnere ich ihn vorher von Hand im Code, dann übergibt er den richtigen

Ich denke, dass es irgendwie daran liegt, dass ich einen onclickListener nutze für den aufruf meiner activity und für die WErtänderung.

Falls dies so ist, muss ich dann 10 onClickListener benutzen um meine Flags auf true/false zu setzen?
 
Zuletzt bearbeitet:
Hiho,
könntest du bitte deine Wertänderung mal als Code Posten?
Hast du checked Global definiert, sodass du zu jederzeit auf das gleiche Array zugreifst, und auch später das richtige übergibst?

Code:
Button but;
Wenn du ein OnClickListener auf deinen Button setzt, und dann in der Methode onClick() sagst was beim klicken auf den Button passieren soll, z.B. die Wertänderung, kannst du das bei kleinen Abläufen direkt hinter die IF-Abfrage schreiben.

Code:
but = (Button) findViewById(id...)
but.setOnClickListener(this);
Code:
public void onClick(View v) {    
    if(v == but){
    
      //Wertänderung durchführen Bsp.:
      checked[0] = 5;
      checked[1] = 1;
   }
später dann einfach das aktuallisierte checked übergeben:

Code:
  Intent link = new Intent(this, send_sms.class);
  link.putExtra("übgergabe", checked);
  startActivity(link);
Grüße
FireDragon
 
also ich fang mal an meine main.java

Code:
int[] checked =new int[10];
so dann in der onCreate
Code:
sendButton = (Button) findViewByID(R.id.send);
chk1=(Button)findViewByID(R.id.flag1);
 
sendButton.setOnclickListener((android.view.View.OnClickListener) main.this);
chk1.setOnclickListener((android.view.View.OnClickListener) main.this);
 
public void onClick(View v){
if (v==sendButton){
Intent i = new Intent();
i.putExtra("com.test.flagArray",checked);
i.setClass(main.this, sms_sending.class);
startActivity(i);
}
if (v==chk1){
checked[0]=1;
}

und meine sms_sending sieht in etwa so aus:
Code:
int[] temp
.
.
.
Intent i =this.getIntent();
Intent link = new Intent();
temp=i.getIntArrayExtra("com.test.flagArray");
if(temp[0]==1){
msg="flag1-true";
}
link.setClass(this,main.class);
finish();
 
rufux schrieb:
so dann in der onCreate


sendButton.setOnclickListener((android.view.View.OnClickListener) main.this);
chk1.setOnclickListener((android.view.View.OnClickListener) main.this);

das sieht mir etwas seltsam aus, schreib doch einfach:

Code:
chk1.setOnclickListener(this);
public void onClick(View v){
if (v==sendButton){
Intent i = new Intent();
i.putExtra("com.test.flagArray",checked);
i.setClass(main.this, sms_sending.class);
startActivity(i);
}
if (v==chk1){
checked[0]=1;
}
Das sieht soweit in Ordnung aus.
Habe mal bei mir getestet mit:
Code:
        playButton.setOnClickListener(this);
        resumeButton.setOnClickListener(this);
...
...

 if(v == playButton){
            Intent link = new Intent(this, ....class);
            link.putExtra("test", checked);
            startActivity(link);    

        if(v == resumeButton){
            checked[0] = 1;
        }
wenn ich dann das Extra in der anderen Klasse aufrufe, wird mir auch die 1 ausgegeben.

Intent i =this.getIntent();
Intent link = new Intent();
temp=i.getIntArrayExtra("com.test.flagArray");
if(temp[0]==1){
msg="flag1-true";
}
link.setClass(this,main.class);
finish();
ergibt nicht viel Sinn in meinen Augen, da du die Activity beendest bevor etwas passiert..

Grüße
FireDragon
 
  • Danke
Reaktionen: rufux
ja da rufe ich dann zwischendrin noch ne Funktion auf...

weiß zwar nicht, warum es bei dir geht und bei mir nicht... aber gut ich versuchs weiter.

vg

jetzt gehts.
danke
 
Zuletzt bearbeitet:

Ähnliche Themen

R
Antworten
6
Aufrufe
994
swa00
swa00
FabianDev
Antworten
5
Aufrufe
547
swa00
swa00
M
Antworten
8
Aufrufe
952
deek
D
Zurück
Oben Unten