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

Ergebnis einer Activity bekommen?

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von TobiTobsen, 09.08.2010.

  1. TobiTobsen, 09.08.2010 #1
    TobiTobsen

    TobiTobsen Threadstarter Neuer Benutzer

    Beiträge:
    7
    Erhaltene Danke:
    0
    Registriert seit:
    09.08.2010
    Hey Zusammen,
    ich hab eine recht einfache App.
    Über den Menu Button kann ich eine Art Settings Activity öffnen.
    Hier kann der Nutzer in zwei EditText Daten eingeben.
    Dann gibt es noch einen OK Button, wird dieser gedrückt, verschwindet gehts wieder zurück zu der Haupt Activity.
    Die Settings Activity starte ich auch mit:
    startActivityForResult(myIntent, RESULT);

    Ich bekomme halt auch einen Result, halt leider nur den einen Int.

    Jetzt frage ich mich wie kann meine Settings Activity auch meherere Parameter zurückgeben?
    Ich habe dies hier gefunden:
    Common Tasks and How to Do Them in Android | Android Developers
    komme damit aber leider nicht zu einem ergebnis...

    Hoffe Ihr könnt mir helfen!

    Viele Grüße,
    Tobi
     
  2. klausa2, 09.08.2010 #2
    klausa2

    klausa2 Fortgeschrittenes Mitglied

    Beiträge:
    298
    Erhaltene Danke:
    20
    Registriert seit:
    08.07.2009
    Die aufgerufene activity macht am Ende etwa folgendes:

    Intent responseIntent = new Intent();
    responseIntent.putExtra("text", text);
    responseIntent.putExtra("flag1", true);

    setResult(RESULT_OK, responseIntent);

    finish();


    Die rufende Activity macht folgendes;

    Code:
    [LEFT][SIZE=2][COLOR=#646464][SIZE=2][COLOR=#646464]@Override[/COLOR][/SIZE][/COLOR][/SIZE]
    [B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]public[/COLOR][/SIZE][/COLOR][/SIZE][/B][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]void[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] onActivityResult([/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]int[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] request, [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]int[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] result, Intent data) {[/SIZE][/LEFT]
     
    [LEFT][SIZE=2]Bundle dataBundle = data.getExtras();[/SIZE]
    [B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]boolean[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] createsub = dataBundle.getBoolean([/SIZE][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]"flag1"[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2], [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]false[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2]);[/SIZE]
    [SIZE=2]String Text = databundle.getString("text", null);[/SIZE][/LEFT]
    
    Hier werden also 2 Werte zurück gegeben, ein String und ein Boolean. Geht natürlich auch mit noch mehr Werten und anderen Typen.
     
    Zuletzt bearbeitet: 09.08.2010
    TobiTobsen bedankt sich.
  3. TobiTobsen, 11.08.2010 #3
    TobiTobsen

    TobiTobsen Threadstarter Neuer Benutzer

    Beiträge:
    7
    Erhaltene Danke:
    0
    Registriert seit:
    09.08.2010
    Vielen Dank, das klappt super!

    Top, besten Dank!
     
  4. Grossi, 09.08.2011 #4
    Grossi

    Grossi Neuer Benutzer

    Beiträge:
    18
    Erhaltene Danke:
    0
    Registriert seit:
    29.07.2010
    Hallo zusammen,

    ich mache diesen thread mal wieder auf, weil ich in meiner rufenden Activity eine NullPointerException beim Zurückkommen aus der gerufenen Activity bekomme. Vielleicht weiss ja jemand von Euch Rat.

    Hier ein Auszug aus der rufenden Activity:

    Code:
        public void anzeigenTastatur(View v) {
            int id = v.getId();
            TextView tv = (TextView) v;
            String wert = tv.getText().toString();
            Intent intent = new Intent(this, SchiesszettelTastatur.class);
            intent.putExtra("pfeil_nr", id);
            intent.putExtra("pfeil_wert", wert);
            startActivityForResult(intent, 300);
        }
        
        public void onActivityResult(int requestCode, int resultCode, Intent data) {
            
            if (requestCode == 200) {
                pfeil_nr = 0;
                String button = "";
                if (resultCode == Activity.RESULT_OK) {
                    button = data.getStringExtra("button");
                } else {
                    button = "";
                }
    
                if (button.equals(BUTTON_NEW)) {
                    anlegenSchiesszettel();
                    resume = RESUME_NO;
                }
                else if (button.equals(BUTTON_DELETE_RESULTS)) {
                    initPassen();
                    Spinner pfeile = (Spinner) findViewById(R.id.sp_pfeile);
                    String auswahl = pfeile.getSelectedItem().toString()
                            .substring(0, 2);
                    sichtbarkeitPassen(Integer.parseInt(auswahl));
                    resume = RESUME_PART;
                }
                else {
                    resume = RESUME_FULL;
                }
            }
            else if (requestCode == 100) {
                pfeil_nr = 0;
                if(resultCode==RESULT_OK) {
                    resume = RESUME_NO_DATE;
                    int year = data.getIntExtra("year", 0);   // get number of year
                    int month = data.getIntExtra("month", 0); // get number of month 0..11
                    int day = data.getIntExtra("day", 0);     // get number of day 0..31
    
                    // format date and display on screen
                    final Calendar dat = Calendar.getInstance();
                    dat.set(Calendar.YEAR, year);
                    dat.set(Calendar.MONTH, month);
                    dat.set(Calendar.DAY_OF_MONTH, day);
                    
                    SimpleDateFormat format = new SimpleDateFormat("dd.MM.yyyy");
                    EditText mDate = (EditText)findViewById(R.id.text_datum);
                    mDate.setText(format.format(dat.getTime()));       
                }
                else {
                    resume = RESUME_FULL;
                }
    
            }
            else if (requestCode == 300) {
                String pfeil_wert = "";
                resume = RESUME_FULL;
                if(resultCode==RESULT_OK) {
                    Bundle extras = data.getExtras();
                    if (extras == null) {
                        pfeil_wert = "";
                        pfeil_nr = 0;
                        Toast.makeText(this, "Hier stimmt was nicht!",
                                Toast.LENGTH_LONG).show();
                    }
                    else {
                       pfeil_wert = extras.getString("return_pfeil_wert");
                       pfeil_nr = extras.getInt("return_pfeil_nr", 0);
                       TextView tv = (TextView)findViewById(id);
                       tv.setText(pfeil_wert);
                       summenBerechnen(tv);
                    }   
                }
                else {
                    pfeil_wert = "";
                    pfeil_nr = 0;
                }
            }
        }
    
    Das ist die gerufene Activity:

    Code:
    package de.grossi.android.schiesszettel;
    
    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.KeyEvent;
    import android.view.View;
    import android.widget.TextView;
    
    public class SchiesszettelTastatur extends Activity {
    
        int id = 0;
        
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.tastatur);
            
            Bundle extras = getIntent().getExtras();
            if (extras == null) {
                return;
            }
            this.id = extras.getInt("pfeil_nr");
            String wert = extras.getString("pfeil_wert");
            String anzeige = "";
            if (id != 0 && wert != null) {
               TextView tv = (TextView)findViewById(R.id.pfeil_nr);
               switch (id) {
               case R.id.pfeil1: { anzeige = "Pfeil 1"; break; }
               case R.id.pfeil2: { anzeige = "Pfeil 2"; break; }
               case R.id.pfeil3: { anzeige = "Pfeil 3"; break; }
               case R.id.pfeil4: { anzeige = "Pfeil 4"; break; }
               case R.id.pfeil5: { anzeige = "Pfeil 5"; break; }
               case R.id.pfeil6: { anzeige = "Pfeil 6"; break; }
               case R.id.pfeil7: { anzeige = "Pfeil 7"; break; }
               case R.id.pfeil8: { anzeige = "Pfeil 8"; break; }
               case R.id.pfeil9: { anzeige = "Pfeil 9"; break; }
               case R.id.pfeil10: { anzeige = "Pfeil 10"; break; }
               case R.id.pfeil11: { anzeige = "Pfeil 11"; break; }
               case R.id.pfeil12: { anzeige = "Pfeil 12"; break; }
               case R.id.pfeil13: { anzeige = "Pfeil 13"; break; }
               case R.id.pfeil14: { anzeige = "Pfeil 14"; break; }
               case R.id.pfeil15: { anzeige = "Pfeil 15"; break; }
               case R.id.pfeil16: { anzeige = "Pfeil 16"; break; }
               case R.id.pfeil17: { anzeige = "Pfeil 17"; break; }
               case R.id.pfeil18: { anzeige = "Pfeil 18"; break; }
               case R.id.pfeil19: { anzeige = "Pfeil 19"; break; }
               case R.id.pfeil20: { anzeige = "Pfeil 20"; break; }
               case R.id.pfeil21: { anzeige = "Pfeil 21"; break; }
               case R.id.pfeil22: { anzeige = "Pfeil 22"; break; }
               case R.id.pfeil23: { anzeige = "Pfeil 23"; break; }
               case R.id.pfeil24: { anzeige = "Pfeil 24"; break; }
               case R.id.pfeil25: { anzeige = "Pfeil 25"; break; }
               case R.id.pfeil26: { anzeige = "Pfeil 26"; break; }
               case R.id.pfeil27: { anzeige = "Pfeil 27"; break; }
               case R.id.pfeil28: { anzeige = "Pfeil 28"; break; }
               case R.id.pfeil29: { anzeige = "Pfeil 29"; break; }
               case R.id.pfeil30: { anzeige = "Pfeil 30"; break; }
               case R.id.pfeil31: { anzeige = "Pfeil 31"; break; }
               case R.id.pfeil32: { anzeige = "Pfeil 32"; break; }
               case R.id.pfeil33: { anzeige = "Pfeil 33"; break; }
               case R.id.pfeil34: { anzeige = "Pfeil 34"; break; }
               case R.id.pfeil35: { anzeige = "Pfeil 35"; break; }
               case R.id.pfeil36: { anzeige = "Pfeil 36"; break; }
               }
               if (wert != null && !wert.equals("")) {
                   anzeige = anzeige + " = " + wert;
               }
               tv.setText(anzeige);
            }   
        }    
        
        public void onButtonClick(View v) {
            String wert = "";
            switch (v.getId()) {
            case R.id.reihe1_X: { wert = "X"; break; }
            case R.id.reihe1_10: { wert = "10"; break; }
            case R.id.reihe1_9: { wert = "9"; break; }
            case R.id.reihe2_8: { wert = "8"; break; }
            case R.id.reihe2_7: { wert = "7"; break; }
            case R.id.reihe2_6: { wert = "6"; break; }
            case R.id.reihe3_5: { wert = "5"; break; }
            case R.id.reihe3_4: { wert = "4"; break; }
            case R.id.reihe3_3: { wert = "3"; break; }
            case R.id.reihe4_2: { wert = "2"; break; }
            case R.id.reihe4_1: { wert = "1"; break; }
            case R.id.reihe4_M: { wert = "M"; break; }
            }
            Intent data = new Intent();
            data.putExtra("return_pfeil_nr", this.id);
            data.putExtra("return_pfeil_wert", wert);
            setResult(RESULT_OK, data);
            finish();
        }
        
        @Override
        public boolean onKeyDown(int keyCode, KeyEvent event) {
    
            if ((keyCode == KeyEvent.KEYCODE_BACK)) {
                Intent data = new Intent();
                data.putExtra("return_pfeil_nr", 0);
                data.putExtra("return_pfeil_wert", "");
                setResult(RESULT_CANCELED, data);
                finish();
                return true;
            }
            return false;
    
        }
    }
    
    Und so sieht der LogCat aus:

    Code:
    08-09 16:54:46.977: INFO/ActivityManager(59): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=de.grossi.android.schiesszettel/.SchiesszettelMain bnds=[5,242][115,360] }
    08-09 16:54:47.237: INFO/ActivityManager(59): Start proc de.grossi.android.schiesszettel for activity de.grossi.android.schiesszettel/.SchiesszettelMain: pid=545 uid=10036 gids={}
    08-09 16:54:48.596: INFO/ActivityManager(59): Displayed activity de.grossi.android.schiesszettel/.SchiesszettelMain: 1369 ms (total 1369 ms)
    08-09 16:54:50.067: INFO/ActivityManager(59): Starting activity: Intent { cmp=de.grossi.android.schiesszettel/.SchiesszettelErfassung }
    08-09 16:54:50.476: DEBUG/dalvikvm(545): GC_FOR_MALLOC freed 3728 objects / 242696 bytes in 71ms
    08-09 16:54:52.006: INFO/ActivityManager(59): Displayed activity de.grossi.android.schiesszettel/.SchiesszettelErfassung: 1910 ms (total 1910 ms)
    08-09 16:54:55.016: INFO/ActivityManager(59): Starting activity: Intent { cmp=de.grossi.android.schiesszettel/.SchiesszettelTastatur (has extras) }
    08-09 16:54:55.567: INFO/ActivityManager(59): Displayed activity de.grossi.android.schiesszettel/.SchiesszettelTastatur: 450 ms (total 450 ms)
    08-09 16:54:57.247: DEBUG/dalvikvm(545): GC_FOR_MALLOC freed 5719 objects / 295800 bytes in 73ms
    08-09 16:54:57.457: DEBUG/AndroidRuntime(545): Shutting down VM
    08-09 16:54:57.487: WARN/dalvikvm(545): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
    08-09 16:54:57.507: ERROR/AndroidRuntime(545): FATAL EXCEPTION: main
    08-09 16:54:57.507: ERROR/AndroidRuntime(545): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=300, result=-1, data=Intent { (has extras) }} to activity {de.grossi.android.schiesszettel/de.grossi.android.schiesszettel.SchiesszettelErfassung}: java.lang.NullPointerException
    08-09 16:54:57.507: ERROR/AndroidRuntime(545):     at android.app.ActivityThread.deliverResults(ActivityThread.java:3515)
    08-09 16:54:57.507: ERROR/AndroidRuntime(545):     at android.app.ActivityThread.handleSendResult(ActivityThread.java:3557)
    08-09 16:54:57.507: ERROR/AndroidRuntime(545):     at android.app.ActivityThread.access$2800(ActivityThread.java:125)
    08-09 16:54:57.507: ERROR/AndroidRuntime(545):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2063)
    08-09 16:54:57.507: ERROR/AndroidRuntime(545):     at android.os.Handler.dispatchMessage(Handler.java:99)
    08-09 16:54:57.507: ERROR/AndroidRuntime(545):     at android.os.Looper.loop(Looper.java:123)
    08-09 16:54:57.507: ERROR/AndroidRuntime(545):     at android.app.ActivityThread.main(ActivityThread.java:4627)
    08-09 16:54:57.507: ERROR/AndroidRuntime(545):     at java.lang.reflect.Method.invokeNative(Native Method)
    08-09 16:54:57.507: ERROR/AndroidRuntime(545):     at java.lang.reflect.Method.invoke(Method.java:521)
    08-09 16:54:57.507: ERROR/AndroidRuntime(545):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
    08-09 16:54:57.507: ERROR/AndroidRuntime(545):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
    08-09 16:54:57.507: ERROR/AndroidRuntime(545):     at dalvik.system.NativeStart.main(Native Method)
    08-09 16:54:57.507: ERROR/AndroidRuntime(545): Caused by: java.lang.NullPointerException
    08-09 16:54:57.507: ERROR/AndroidRuntime(545):     at de.grossi.android.schiesszettel.SchiesszettelErfassung.onActivityResult(SchiesszettelErfassung.java:598)
    08-09 16:54:57.507: ERROR/AndroidRuntime(545):     at android.app.Activity.dispatchActivityResult(Activity.java:3890)
    08-09 16:54:57.507: ERROR/AndroidRuntime(545):     at android.app.ActivityThread.deliverResults(ActivityThread.java:3511)
    08-09 16:54:57.507: ERROR/AndroidRuntime(545):     ... 11 more
    08-09 16:54:57.516: WARN/ActivityManager(59):   Force finishing activity de.grossi.android.schiesszettel/.SchiesszettelErfassung
    08-09 16:54:58.028: WARN/ActivityManager(59): Activity pause timeout for HistoryRecord{450d16c0 de.grossi.android.schiesszettel/.SchiesszettelErfassung}
    08-09 16:54:59.877: INFO/Process(545): Sending signal. PID: 545 SIG: 9
    08-09 16:54:59.898: INFO/ActivityManager(59): Process de.grossi.android.schiesszettel (pid 545) has died.
    08-09 16:54:59.898: INFO/WindowManager(59): WIN DEATH: Window{45116020 de.grossi.android.schiesszettel/de.grossi.android.schiesszettel.SchiesszettelErfassung paused=false}
    08-09 16:54:59.898: INFO/WindowManager(59): WIN DEATH: Window{450da3b8 de.grossi.android.schiesszettel/de.grossi.android.schiesszettel.SchiesszettelTastatur paused=false}
    08-09 16:54:59.976: WARN/InputManagerService(59): Got RemoteException sending setActive(false) notification to pid 545 uid 10036
    08-09 16:55:08.495: WARN/ActivityManager(59): Activity destroy timeout for HistoryRecord{450d16c0 de.grossi.android.schiesszettel/.SchiesszettelErfassung}
    08-09 16:55:08.839: WARN/ActivityManager(59): Activity destroy timeout for HistoryRecord{4509e988 de.grossi.android.schiesszettel/.SchiesszettelTastatur}
    
    Kann mir jemand helfen? Woher kommt die NullPointerException?

    Vielen Dank im Voraus!
    Grossi

    P.S.: Die Übertragung des Intents von der rufenden zur gerufenen Activity funktioniert übrigens hervorragend.
     
    Zuletzt bearbeitet: 09.08.2011
  5. DieGoldeneMitte, 09.08.2011 #5
    DieGoldeneMitte

    DieGoldeneMitte Android-Lexikon

    Beiträge:
    1,230
    Erhaltene Danke:
    256
    Registriert seit:
    05.02.2010
    Phone:
    Nexus 5X
    Tablet:
    Nexus 7 (2013)
    Welche Zeile im Code ist das denn?

    08-09 16:54:57.507: ERROR/AndroidRuntime(545): at de.grossi.android.schiesszettel.SchiesszettelErfassung.onActivityResult(SchiesszettelErfassung.java:598)
     
  6. Grossi, 09.08.2011 #6
    Grossi

    Grossi Neuer Benutzer

    Beiträge:
    18
    Erhaltene Danke:
    0
    Registriert seit:
    29.07.2010
    Hallo,

    Zeile 598 ist die schließende Klammer eines else-Zweiges (s.u.); daher kann ich mir das Ganze ja auch überhaupt nicht erklären.

    Code:
    581        else if (requestCode == 300) {
    582            String pfeil_wert = "";
    583            resume = RESUME_FULL;
    584            if(resultCode==RESULT_OK) {
    585                Bundle extras = data.getExtras();
    586                if (extras == null) {
    587                    pfeil_wert = "";
    588                    pfeil_nr = 0;
    589                    Toast.makeText(this, "Hier stimmt was nicht!",
    590                            Toast.LENGTH_LONG).show();
    591                }
    592                else {
    593                   pfeil_wert = extras.getString("return_pfeil_wert");
    594                   pfeil_nr = extras.getInt("return_pfeil_nr", 0);
    595                   TextView tv = (TextView)findViewById(id);
    596                   tv.setText(pfeil_wert);
    597                   summenBerechnen(tv);
    [I][B]598                }[/B][/I]   
    599            }
    600            else {
    601                pfeil_wert = "";
    602                pfeil_nr = 0;
    603            }
    604        }
    Gruss,
    Grossi

    P.S.: Hab die Activit gerade nochmal gestartet. Und jetzt wurde Zeile 596, also tv.setText(pfeil_wert); angemeckert.
     
    Zuletzt bearbeitet: 09.08.2011
  7. Grossi, 09.08.2011 #7
    Grossi

    Grossi Neuer Benutzer

    Beiträge:
    18
    Erhaltene Danke:
    0
    Registriert seit:
    29.07.2010
    Bin ich doof!
    Es muss natürlich TextView tv = (TextView)findViewById(pfeil_nr); statt TextView tv = (TextView)findViewById(id); heissen.
     

Diese Seite empfehlen