1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

int Array an intent übergeben

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von rufux, 26.11.2010.

  1. rufux, 26.11.2010 #1
    rufux

    rufux Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    84
    Erhaltene Danke:
    5
    Registriert seit:
    11.11.2010
    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
     
  2. Kranki, 26.11.2010 #2
    Kranki

    Kranki Ehrenmitglied

    Beiträge:
    3,831
    Erhaltene Danke:
    814
    Registriert seit:
    19.07.2009
    Tablet:
    Samsung Galaxy Tab 3 7.0 Lite
    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
     
    rufux bedankt sich.
  3. rufux, 26.11.2010 #3
    rufux

    rufux Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    84
    Erhaltene Danke:
    5
    Registriert seit:
    11.11.2010
    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: 26.11.2010
  4. Kranki, 26.11.2010 #4
    Kranki

    Kranki Ehrenmitglied

    Beiträge:
    3,831
    Erhaltene Danke:
    814
    Registriert seit:
    19.07.2009
    Tablet:
    Samsung Galaxy Tab 3 7.0 Lite
    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");
     
  5. rufux, 26.11.2010 #5
    rufux

    rufux Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    84
    Erhaltene Danke:
    5
    Registriert seit:
    11.11.2010
    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
     
  6. Lilithian, 26.11.2010 #6
    Lilithian

    Lilithian Android-Hilfe.de Mitglied

    Beiträge:
    69
    Erhaltene Danke:
    23
    Registriert seit:
    26.10.2010
    Code:
    Intent i = this.getIntent();
    So müsstest du den kriegen. ;)
     
  7. Kranki, 26.11.2010 #7
    Kranki

    Kranki Ehrenmitglied

    Beiträge:
    3,831
    Erhaltene Danke:
    814
    Registriert seit:
    19.07.2009
    Tablet:
    Samsung Galaxy Tab 3 7.0 Lite
    An was übergibst du denn? Activity oder Service?
     
  8. rufux, 26.11.2010 #8
    rufux

    rufux Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    84
    Erhaltene Danke:
    5
    Registriert seit:
    11.11.2010
    Activity
     
  9. Kranki, 26.11.2010 #9
    Kranki

    Kranki Ehrenmitglied

    Beiträge:
    3,831
    Erhaltene Danke:
    814
    Registriert seit:
    19.07.2009
    Tablet:
    Samsung Galaxy Tab 3 7.0 Lite
    Dann wie lilithian sagt.
    Dann weiß ich aber nicht, was du mit einem IBinder willst. ;)
     
  10. Fr4gg0r, 26.11.2010 #10
    Fr4gg0r

    Fr4gg0r App-Anbieter (Werbung)

    Beiträge:
    2,506
    Erhaltene Danke:
    447
    Registriert seit:
    21.12.2009
    Mh, hat bei mir bisher immer ohne geklappt. :huh:
     
  11. rufux, 30.11.2010 #11
    rufux

    rufux Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    84
    Erhaltene Danke:
    5
    Registriert seit:
    11.11.2010
    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
     
  12. FireDragon, 30.11.2010 #12
    FireDragon

    FireDragon Neuer Benutzer

    Beiträge:
    22
    Erhaltene Danke:
    7
    Registriert seit:
    07.10.2010
    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
     
    rufux bedankt sich.
  13. rufux, 30.11.2010 #13
    rufux

    rufux Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    84
    Erhaltene Danke:
    5
    Registriert seit:
    11.11.2010
    ja genau das habe ich auch gerade gelesen..

    Jez gehts danke
     
  14. rufux, 30.11.2010 #14
    rufux

    rufux Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    84
    Erhaltene Danke:
    5
    Registriert seit:
    11.11.2010
    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: 30.11.2010
  15. FireDragon, 30.11.2010 #15
    FireDragon

    FireDragon Neuer Benutzer

    Beiträge:
    22
    Erhaltene Danke:
    7
    Registriert seit:
    07.10.2010
    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
     
  16. rufux, 30.11.2010 #16
    rufux

    rufux Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    84
    Erhaltene Danke:
    5
    Registriert seit:
    11.11.2010
    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();
    
     
  17. FireDragon, 30.11.2010 #17
    FireDragon

    FireDragon Neuer Benutzer

    Beiträge:
    22
    Erhaltene Danke:
    7
    Registriert seit:
    07.10.2010
    das sieht mir etwas seltsam aus, schreib doch einfach:

    Code:
    chk1.setOnclickListener(this);
    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.

    ergibt nicht viel Sinn in meinen Augen, da du die Activity beendest bevor etwas passiert..

    Grüße
    FireDragon
     
    rufux bedankt sich.
  18. rufux, 30.11.2010 #18
    rufux

    rufux Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    84
    Erhaltene Danke:
    5
    Registriert seit:
    11.11.2010
    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: 30.11.2010

Diese Seite empfehlen