1. Wir haben diesmal 2 Gewinnspiele zeitgleich für euch - Gewinne einmal ein UMI Plus E - Beim 2ten könnt ihr ein Nomu S30 gewinnen!
  1. rufux, 26.11.2010 #1
    rufux

    rufux Threadstarter Android-Hilfe.de Mitglied

    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

    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

    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

    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

    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

    Code:
    Intent i = this.getIntent();
    So müsstest du den kriegen. ;)
     
  7. Kranki, 26.11.2010 #7
    Kranki

    Kranki Ehrenmitglied

    An was übergibst du denn? Activity oder Service?
     
  8. rufux, 26.11.2010 #8
    rufux

    rufux Threadstarter Android-Hilfe.de Mitglied

    Activity
     
  9. Kranki, 26.11.2010 #9
    Kranki

    Kranki Ehrenmitglied

    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)

    Mh, hat bei mir bisher immer ohne geklappt. :huh:
     
  11. rufux, 30.11.2010 #11
    rufux

    rufux Threadstarter Android-Hilfe.de Mitglied

    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

    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

    ja genau das habe ich auch gerade gelesen..

    Jez gehts danke
     
  14. rufux, 30.11.2010 #14
    rufux

    rufux Threadstarter Android-Hilfe.de Mitglied

    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

    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

    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

    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

    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