Ergebnis einer Activity bekommen?

T

TobiTobsen

Neues Mitglied
0
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
 
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:
  • Danke
Reaktionen: TobiTobsen
Vielen Dank, das klappt super!

Top, besten Dank!
 
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 von einem Moderator:
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)
 
DieGoldeneMitte schrieb:
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)

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 von einem Moderator:
Bin ich doof!
Es muss natürlich TextView tv = (TextView)findViewById(pfeil_nr); statt TextView tv = (TextView)findViewById(id); heissen.
 

Ähnliche Themen

B
Antworten
3
Aufrufe
1.306
swa00
swa00
D
  • Data2006
Antworten
14
Aufrufe
484
jogimuc
J
M
Antworten
8
Aufrufe
952
deek
D
Zurück
Oben Unten