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

Activity Rückgabewert

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von joschika77, 02.07.2009.

  1. joschika77, 02.07.2009 #1
    joschika77

    joschika77 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    129
    Erhaltene Danke:
    1
    Registriert seit:
    26.05.2009
    Hallo habe folgendes Problem. Ich habe eine Main-Activity die nach Buttonclick eine zweite Activity aufruft, was auch gut klappt.Nun geht es darum erstmal irgend einen Rückgabewert zu erhalten. Leider wird die überschriebene Methode aus der main-Activity nicht aufgerufen. Wüsste gern warum?

    Aufruf vom Button aus der der 1. Activity:
    Code:
    Intent intentCatPos = new Intent(main.this,ECategoryPostingTypeActivity.class);
    main.this.startActivityForResult(intentCatPos,Activity.RESULT_OK);
    
    Überschriebene Methode in der 1. Activity:
    Code:
        @Override
        protected void onActivityResult(int requestCode,int resultCode,Intent data) 
        {
            // See which child activity is calling us back.
            switch (resultCode) 
            {
               case Activity.RESULT_OK: Log.d(TAG, "Wieder zurück");         
               default:break;
            }
        } 
    
    onCreate der 2. Activity:
    Code:
        public void onCreate(Bundle savedInstanceState) 
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.cat_pos_320x480_portrait);    
    
            s = (Spinner) findViewById(R.id.spinner);      
            ArrayAdapter<?> adapter = ArrayAdapter.createFromResource(
                   this, R.array.planets, android.R.layout.simple_spinner_item);
            adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            s.setAdapter(adapter);
            s.setOnItemSelectedListener(new OnItemSelectedListener()
            {
    
                public void onItemSelected(AdapterView<?> parent,View v,int position,long id) 
                {               ECategoryPostingTypeActivity.this.setResult(Activity.RESULT_OK,
                            ECategoryPostingTypeActivity.this.getIntent());
                        ECategoryPostingTypeActivity.this.finish();
                }
    
                public void onNothingSelected(AdapterView<?> arg0) 
                {
                    //
                }
                
            });
        }
    
    und zum schluss noch der activityteil aus der xml

    Code:
            <activity android:name=".ECategoryPostingTypeActivity"
                      android:label="@string/sub_app_name_catpos">
                <intent-filter>
                    <action android:name="android.intent.action.ECATEGORYPOSTINGTYPEACTIVITY" />
                    <category android:name="android.intent.category.DEFAULT" />
                </intent-filter>
            </activity>
    
    Was genau muß ich beim
    Code:
    setResult()
    als 2. Parameter übergeben? Aber dazu muß er ja erstmal überhaupt in der Methode ankommen. Ich hoffe hier kann jemand helfen.

    MfG
     
  2. swordi, 02.07.2009 #2
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    ich hatte damit auch mal probleme,

    schau dir da mal an, was du in der onActivityResult
    überhaupt für werte bekommst. evtl passt da etwas
    nicht zusammen
     
  3. joschika77, 02.07.2009 #3
    joschika77

    joschika77 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    129
    Erhaltene Danke:
    1
    Registriert seit:
    26.05.2009
    Na das ist ja erstmal das Hauptproblem. Diese Methode wird ja gar nicht aufgerufen. :confused:
     
  4. swordi, 02.07.2009 #4
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    aha sehr komisch

    ich mach es so

    Activity 1
    startActivityForResult(x, 1);

    onResult()
    system.out.println(resultwerte);

    Activity 2
    setResult(1);
    finish();

    das funktioniert

    warum nimmst du da immer
    ECategoryPostingTypeActivity.this.xxx??? was hatn das für einen sinn
     
  5. joschika77, 02.07.2009 #5
    joschika77

    joschika77 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    129
    Erhaltene Danke:
    1
    Registriert seit:
    26.05.2009
    Code:
    ECategoryPostingTypeActivity.this.setResult(...)
    ist das gleiche wie
    Code:
    setResult(...)
    . In meinem Beispiel würde this.setResult nicht klappen weil sich im Listener das this auf den Listener halt bezieht. Also man kann es davor schreiben, muss man aber nicht. Also wie du es beschrieben hast hab ich es auch. Das gibt es doch nicht. :eek: Stimmt denn was mit der xml nicht?
     
  6. swordi, 02.07.2009 #6
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    bekommst du irgendwelche debug ausgaben, die auf ein problem hinweisen?
     
  7. joschika77, 02.07.2009 #7
    joschika77

    joschika77 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    129
    Erhaltene Danke:
    1
    Registriert seit:
    26.05.2009
    leider nicht...ich debugge ja durch und in diese Methode geht er 100% nicht wieder rein...Im Log.Cat steht ja meine Ausgabe die ich da habe auch nicht. Am Spinner und dem clickitemselected liegt das ja hoffentlich auch nicht.
     
  8. swordi, 02.07.2009 #8
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    also er führt das finish() aus - geht zur activity zurück und alles funktioniert normal, nur das onActivityResult wird nicht aufgerufen?
     
  9. joschika77, 02.07.2009 #9
    joschika77

    joschika77 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    129
    Erhaltene Danke:
    1
    Registriert seit:
    26.05.2009
    Ja genau so. Ich hab noch ein Verständnisproblem mit dieser Zeile
    Code:
    ECategoryPostingTypeActivity.this.setResult(Activity.RESULT_OK,
                            ECategoryPostingTypeActivity.this.getIntent());
    Also vor dem finish(). Was übergebe ich als 2. Parameter?
     
  10. swordi, 02.07.2009 #10
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
  11. joschika77, 02.07.2009 #11
    joschika77

    joschika77 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    129
    Erhaltene Danke:
    1
    Registriert seit:
    26.05.2009
    So hab das Intent mal weggelassen. Geht trotzdem nicht. Mist!

    Code:
                        ECategoryPostingTypeActivity.this.setResult(Activity.RESULT_OK);
                        ECategoryPostingTypeActivity.this.finish();
    
    Ich denke das Intent brauch ich um im 1. Activity auf Daten vom 2. Activity zuzugreifen.


    Hier mal meine LogCat:
    PHP:
    07-02 13:18:23.376INFO/main(1865): onPause
    07
    -02 13:18:23.396INFO/NotificationService(570): enqueueToast pkg=com.logbook callback=android.app.ITransientNotification$Stub$Proxy@43736d90 duration=0
    07
    -02 13:18:27.716INFO/main(1865): onStop
    07
    -02 13:18:27.757INFO/NotificationService(570): enqueueToast pkg=com.logbook callback=android.app.ITransientNotification$Stub$Proxy@43780ee0 duration=0
    07
    -02 13:18:28.397INFO/ActivityManager(570): Displayed activity com.logbook/.ECategoryPostingTypeActivity8769 ms
    07
    -02 13:18:50.186WARN/InputManagerService(570): Window already focusedignoring focus gain ofcom.android.internal.view.IInputMethodClient$Stub$Proxy@43725c60
    07
    -02 13:18:55.047INFO/main(1865): onRestart
    07
    -02 13:18:55.057INFO/NotificationService(570): enqueueToast pkg=com.logbook callback=android.app.ITransientNotification$Stub$Proxy@43736350 duration=0
    07
    -02 13:18:57.256INFO/main(1865): onStart
    07
    -02 13:18:57.268INFO/NotificationService(570): enqueueToast pkg=com.logbook callback=android.app.ITransientNotification$Stub$Proxy@436ce760 duration=0
    07
    -02 13:18:59.348INFO/main(1865): onResume
    07
    -02 13:18:59.357INFO/NotificationService(570): enqueueToast pkg=com.logbook callback=android.app.ITransientNotification$Stub$Proxy@4373ace0 duration=0
    07
    -02 13:19:00.017WARN/ActivityManager(570): Launch timeout has expiredgiving up wake lock!
    07-02 13:19:00.326WARN/ActivityManager(570): Activity idle timeout for HistoryRecord{4358b928 {com.logbook/com.logbook.main}}
    07-02 13:19:48.656WARN/jdwp(1865): Debugger is telling the VM to exit with code=1
    07
    -02 13:19:48.656INFO/dalvikvm(1865): GC lifetime allocation2315 bytes
    07
    -02 13:19:48.768INFO/ActivityManager(570): Process com.logbook (pid 1865has died.
    07-02 13:19:48.776INFO/WindowManager(570): WIN DEATHWindow{436ba290 com.logbook/com.logbook.main paused=false}
    07-02 13:19:48.956DEBUG/Zygote(541): Process 1865 exited cleanly (1)
    07-02 13:19:49.638WARN/InputManagerService(570): Got RemoteException sending setActive(falsenotification to pid 1865 uid 10018

     
  12. swordi, 02.07.2009 #12
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    naja
    ganz klar dass da nichts mehr passiert

    dein programm stirbt einfach

    07-02 13:19:48.776: INFO/WindowManager(570): WIN DEATH: Window{436ba290 com.logbook/com.logbook.main paused=false}
    07-02 13:19:48.956: DEBUG/Zygote(541): Process 1865 exited cleanly (1)

    DEATH - TOT
     
  13. joschika77, 02.07.2009 #13
    joschika77

    joschika77 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    129
    Erhaltene Danke:
    1
    Registriert seit:
    26.05.2009
    Wie? Deswegen wird auch die Restart aufgerufen was? Aber warum stirbt die Activity?
     
  14. joschika77, 02.07.2009 #14
    joschika77

    joschika77 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    129
    Erhaltene Danke:
    1
    Registriert seit:
    26.05.2009
    Ne ne hab das nochmal gemacht gerade.Ist alles richtig. Hatte wohl zuviel vorhin kopiert. :)

    PHP:
    07-02 13:37:34.037INFO/main(1961): onStart
    07
    -02 13:37:34.387INFO/NotificationService(570): enqueueToast pkg=com.logbook callback=android.app.ITransientNotification$Stub$Proxy@43777340 duration=0
    07
    -02 13:37:37.650INFO/main(1961): onResume
    07
    -02 13:37:37.727INFO/NotificationService(570): enqueueToast pkg=com.logbook callback=android.app.ITransientNotification$Stub$Proxy@436b3428 duration=0
    07
    -02 13:37:41.297INFO/ActivityManager(570): Displayed activity com.logbook/.main39430 ms
    07
    -02 13:37:48.747INFO/ActivityManager(570): Starting activityIntent comp={com.logbook/com.logbook.ECategoryPostingTypeActivity} }
    07-02 13:37:49.358WARN/ActivityManager(570): Activity pause timeout for HistoryRecord{4375a460 {com.logbook/com.logbook.main}}
    07-02 13:37:53.837INFO/main(1961): onPause
    07
    -02 13:37:53.847INFO/NotificationService(570): enqueueToast pkg=com.logbook callback=android.app.ITransientNotification$Stub$Proxy@43719f10 duration=0
    07
    -02 13:37:57.689INFO/main(1961): onStop
    07
    -02 13:37:57.736INFO/NotificationService(570): enqueueToast pkg=com.logbook callback=android.app.ITransientNotification$Stub$Proxy@4376e6b8 duration=0
    07
    -02 13:37:58.857WARN/ActivityManager(570): Launch timeout has expiredgiving up wake lock!
    07-02 13:37:59.267INFO/ActivityManager(570): Displayed activity com.logbook/.ECategoryPostingTypeActivity10509 ms
    07
    -02 13:38:19.378WARN/ActivityManager(570): Activity pause timeout for HistoryRecord{43795d00 {com.logbook/com.logbook.ECategoryPostingTypeActivity}}
    07-02 13:38:21.868WARN/InputManagerService(570): Window already focusedignoring focus gain ofcom.android.internal.view.IInputMethodClient$Stub$Proxy@43764720
    07
    -02 13:38:28.961WARN/ActivityManager(570): Launch timeout has expiredgiving up wake lock!
    07-02 13:38:29.207INFO/main(1961): onRestart
    07
    -02 13:38:29.227INFO/NotificationService(570): enqueueToast pkg=com.logbook callback=android.app.ITransientNotification$Stub$Proxy@43711b30 duration=0
    07
    -02 13:38:29.459WARN/ActivityManager(570): Activity idle timeout for HistoryRecord{4375a460 {com.logbook/com.logbook.main}}
    07-02 13:38:33.356INFO/main(1961): onStart
    07
    -02 13:38:33.376INFO/NotificationService(570): enqueueToast pkg=com.logbook callback=android.app.ITransientNotification$Stub$Proxy@4372ac68 duration=0
    07
    -02 13:38:34.531WARN/ActivityManager(570): Activity destroy timeout for HistoryRecord{43795d00 {com.logbook/com.logbook.ECategoryPostingTypeActivity}}
    07-02 13:38:37.277INFO/main(1961): onResume
    07
    -02 13:38:37.286INFO/NotificationService(570): enqueueToast pkg=com.logbook callback=android.app.ITransientNotification$Stub$Proxy@436ea7c0 duration=0

     
  15. swordi, 02.07.2009 #15
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    also wenn deine app stirbt, dann wird sie neu gestartet - passiert glaub ich immer automatisch.

    das ist auf jedenfall ein guter hinweis, dass da etwas tot ist.
     
  16. joschika77, 02.07.2009 #16
    joschika77

    joschika77 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    129
    Erhaltene Danke:
    1
    Registriert seit:
    26.05.2009
    So jetzt hab ich Skynet bei den Eiern.:D Das Problem war der RequestCode. Da hatte ich
    Code:
    Activity.RESULT_OK
    und das scheint nicht zu klappen. Hab mir einen eigenen gebaut und siehe da....ES GEHT!!! :cool:
     
  17. swordi, 02.07.2009 #17
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    deshalb hab ich auch immer setResult(1)

    geschrieben ;)
     
  18. zx128, 02.07.2009 #18
    zx128

    zx128 Android-Lexikon

    Beiträge:
    1,179
    Erhaltene Danke:
    143
    Registriert seit:
    23.01.2009
    Da ist vom Anfang an ein Denkfehler drin:

    Code:
    Intent intentCatPos = new Intent(main.this,ECategoryPostingTypeActivity.class);
    main.this.startActivityForResult(intentCatPos,[B]Activity.RESULT_OK[/B]);
    da gehört nicht der RESULT_CODE sondern REQUEST_CODE hin.
    Es muss einfach eine Konstante sein (1, 23, was auch immer).

    Der Sinn ist der, dass wenn du aus der ersten Activity mehrere Activities startest - muss du ja in onActivityResult unterscheiden können, welche gerade beendet wurde.

    Daher macht man ein switch in onActivityResult auf requestCode, weiß somit welche Activity beendet wurde und erst dann guckt man sich das resultCode an.

    Activity | Android Developers)


    onActivityResult wird nicht angerufen, weil requestCode >= 0 sein muss
    Activity | Android Developers)

    und RESULT_OK = -1.

    Soweit klar?
     
  19. joschika77, 02.07.2009 #19
    joschika77

    joschika77 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    129
    Erhaltene Danke:
    1
    Registriert seit:
    26.05.2009
    Jap soweit so gut. Schön was vertauscht. Aber wie übertrage ich jetzt z.B. vom Spinner den ausgewählten String? Mit dem 2. Parameter, dem Intent?
     
  20. zx128, 02.07.2009 #20
    zx128

    zx128 Android-Lexikon

    Beiträge:
    1,179
    Erhaltene Danke:
    143
    Registriert seit:
    23.01.2009
    Hast da paar Möglichkeiten.

    Wenn es nur ein String ist - kannst du tricksen und Intent(String action) nehmen.

    Oder du kannst dir putExtra angucken und damit Sachen übergeben.
    Intent | Android Developers)

    Und vor allem Doku lesen, das spart sehr viel Zeit und Nerven ;)
     

Diese Seite empfehlen