Activity Rückgabewert

J

joschika77

Fortgeschrittenes Mitglied
1
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
 
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
 
Na das ist ja erstmal das Hauptproblem. Diese Methode wird ja gar nicht aufgerufen. :confused:
 
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
 
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?
 
bekommst du irgendwelche debug ausgaben, die auf ein problem hinweisen?
 
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.
 
also er führt das finish() aus - geht zur activity zurück und alles funktioniert normal, nur das onActivityResult wird nicht aufgerufen?
 
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?
 
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.376: INFO/main(1865): onPause
07-02 13:18:23.396: INFO/NotificationService(570): enqueueToast pkg=com.logbook callback=android.app.ITransientNotification$Stub$Proxy@43736d90 duration=0
07-02 13:18:27.716: INFO/main(1865): onStop
07-02 13:18:27.757: INFO/NotificationService(570): enqueueToast pkg=com.logbook callback=android.app.ITransientNotification$Stub$Proxy@43780ee0 duration=0
07-02 13:18:28.397: INFO/ActivityManager(570): Displayed activity com.logbook/.ECategoryPostingTypeActivity: 8769 ms
07-02 13:18:50.186: WARN/InputManagerService(570): Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@43725c60
07-02 13:18:55.047: INFO/main(1865): onRestart
07-02 13:18:55.057: INFO/NotificationService(570): enqueueToast pkg=com.logbook callback=android.app.ITransientNotification$Stub$Proxy@43736350 duration=0
07-02 13:18:57.256: INFO/main(1865): onStart
07-02 13:18:57.268: INFO/NotificationService(570): enqueueToast pkg=com.logbook callback=android.app.ITransientNotification$Stub$Proxy@436ce760 duration=0
07-02 13:18:59.348: INFO/main(1865): onResume
07-02 13:18:59.357: INFO/NotificationService(570): enqueueToast pkg=com.logbook callback=android.app.ITransientNotification$Stub$Proxy@4373ace0 duration=0
07-02 13:19:00.017: WARN/ActivityManager(570): Launch timeout has expired, giving up wake lock!
07-02 13:19:00.326: WARN/ActivityManager(570): Activity idle timeout for HistoryRecord{4358b928 {com.logbook/com.logbook.main}}
07-02 13:19:48.656: WARN/jdwp(1865): Debugger is telling the VM to exit with code=1
07-02 13:19:48.656: INFO/dalvikvm(1865): GC lifetime allocation: 2315 bytes
07-02 13:19:48.768: INFO/ActivityManager(570): Process com.logbook (pid 1865) has died.
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)
07-02 13:19:49.638: WARN/InputManagerService(570): Got RemoteException sending setActive(false) notification to pid 1865 uid 10018
 
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
 
Wie? Deswegen wird auch die Restart aufgerufen was? Aber warum stirbt die Activity?
 
Ne ne hab das nochmal gemacht gerade.Ist alles richtig. Hatte wohl zuviel vorhin kopiert. :)

PHP:
07-02 13:37:34.037: INFO/main(1961): onStart
07-02 13:37:34.387: INFO/NotificationService(570): enqueueToast pkg=com.logbook callback=android.app.ITransientNotification$Stub$Proxy@43777340 duration=0
07-02 13:37:37.650: INFO/main(1961): onResume
07-02 13:37:37.727: INFO/NotificationService(570): enqueueToast pkg=com.logbook callback=android.app.ITransientNotification$Stub$Proxy@436b3428 duration=0
07-02 13:37:41.297: INFO/ActivityManager(570): Displayed activity com.logbook/.main: 39430 ms
07-02 13:37:48.747: INFO/ActivityManager(570): Starting activity: Intent { comp={com.logbook/com.logbook.ECategoryPostingTypeActivity} }
07-02 13:37:49.358: WARN/ActivityManager(570): Activity pause timeout for HistoryRecord{4375a460 {com.logbook/com.logbook.main}}
07-02 13:37:53.837: INFO/main(1961): onPause
07-02 13:37:53.847: INFO/NotificationService(570): enqueueToast pkg=com.logbook callback=android.app.ITransientNotification$Stub$Proxy@43719f10 duration=0
07-02 13:37:57.689: INFO/main(1961): onStop
07-02 13:37:57.736: INFO/NotificationService(570): enqueueToast pkg=com.logbook callback=android.app.ITransientNotification$Stub$Proxy@4376e6b8 duration=0
07-02 13:37:58.857: WARN/ActivityManager(570): Launch timeout has expired, giving up wake lock!
07-02 13:37:59.267: INFO/ActivityManager(570): Displayed activity com.logbook/.ECategoryPostingTypeActivity: 10509 ms
07-02 13:38:19.378: WARN/ActivityManager(570): Activity pause timeout for HistoryRecord{43795d00 {com.logbook/com.logbook.ECategoryPostingTypeActivity}}
07-02 13:38:21.868: WARN/InputManagerService(570): Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@43764720
07-02 13:38:28.961: WARN/ActivityManager(570): Launch timeout has expired, giving up wake lock!
07-02 13:38:29.207: INFO/main(1961): onRestart
07-02 13:38:29.227: INFO/NotificationService(570): enqueueToast pkg=com.logbook callback=android.app.ITransientNotification$Stub$Proxy@43711b30 duration=0
07-02 13:38:29.459: WARN/ActivityManager(570): Activity idle timeout for HistoryRecord{4375a460 {com.logbook/com.logbook.main}}
07-02 13:38:33.356: INFO/main(1961): onStart
07-02 13:38:33.376: INFO/NotificationService(570): enqueueToast pkg=com.logbook callback=android.app.ITransientNotification$Stub$Proxy@4372ac68 duration=0
07-02 13:38:34.531: WARN/ActivityManager(570): Activity destroy timeout for HistoryRecord{43795d00 {com.logbook/com.logbook.ECategoryPostingTypeActivity}}
07-02 13:38:37.277: INFO/main(1961): onResume
07-02 13:38:37.286: INFO/NotificationService(570): enqueueToast pkg=com.logbook callback=android.app.ITransientNotification$Stub$Proxy@436ea7c0 duration=0
 
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.
 
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:
 
deshalb hab ich auch immer setResult(1)

geschrieben ;)
 
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?
 
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?
 
joschika77 schrieb:
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?

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 ;)
 

Ähnliche Themen

M
  • maksimilian
Antworten
15
Aufrufe
1.699
maksimilian
M
M
Antworten
8
Aufrufe
954
deek
D
M
  • maksimilian
Antworten
5
Aufrufe
858
maksimilian
M
Zurück
Oben Unten