it-swarm.com.de

Wie kann ich mit Intents ein Objekt von einer Android-Aktivität zu einer anderen senden?

Wie kann ich ein Objekt eines benutzerdefinierten Typs von einer Aktivität an eine andere mit der putExtra()-Methode der Klasse Intent übergeben?

787
UMAR

die einfachste Lösung, die ich gefunden habe, ist .. eine Klasse mit statischen Datenmitgliedern mit Get-Setters zu erstellen.

von einer Aktivität setzen und von einer anderen Aktivität das Objekt erhalten.

tätigkeit A

mytestclass.staticfunctionSet("","",""..etc.);

aktivität b

mytestclass obj= mytestclass.staticfunctionGet();
5
UMAR

Wenn Sie nur Objekte herumreichen, wurde Parcelable für diesen Zweck entwickelt. Es erfordert etwas mehr Aufwand als die native Serialisierung von Java, aber es ist viel schneller (und ich meine übrigens WAY schneller).

Ein einfaches Beispiel für die Implementierung der Dokumente ist:

// simple class that just has one member property as an example
public class MyParcelable implements Parcelable {
    private int mData;

    /* everything below here is for implementing Parcelable */

    // 99.9% of the time you can just ignore this
    @Override
    public int describeContents() {
        return 0;
    }

    // write your object's data to the passed-in Parcel
    @Override
    public void writeToParcel(Parcel out, int flags) {
        out.writeInt(mData);
    }

    // this is used to regenerate your object. All Parcelables must have a CREATOR that implements these two methods
    public static final Parcelable.Creator<MyParcelable> CREATOR = new Parcelable.Creator<MyParcelable>() {
        public MyParcelable createFromParcel(Parcel in) {
            return new MyParcelable(in);
        }

        public MyParcelable[] newArray(int size) {
            return new MyParcelable[size];
        }
    };

    // example constructor that takes a Parcel and gives you an object populated with it's values
    private MyParcelable(Parcel in) {
        mData = in.readInt();
    }
}

Beachten Sie, dass Sie für den Fall, dass Sie mehr als ein Feld aus einem bestimmten Paket abrufen möchten, dies in derselben Reihenfolge tun müssen, in der Sie sie eingeben (d. H. In einem FIFO Ansatz).

Sobald Ihre Objekte Parcelable implementiert haben, müssen Sie sie nur in Ihre Intents mit putExtra () einfügen:

Intent i = new Intent();
i.putExtra("name_of_extra", myParcelableObject);

Dann können Sie sie mit getParcelableExtra () wieder herausziehen:

Intent i = getIntent();
MyParcelable myParcelableObject = (MyParcelable) i.getParcelableExtra("name_of_extra");

Wenn Ihre Objektklasse Parcelable und Serializable implementiert, stellen Sie sicher, dass Sie eine der folgenden Aktionen ausführen:

i.putExtra("parcelable_extra", (Parcelable) myParcelableObject);
i.putExtra("serializable_extra", (Serializable) myParcelableObject);
711
Jeremy Logan

Sie müssen Ihr Objekt in eine Art Zeichenfolgendarstellung serialisieren. Eine mögliche Zeichenfolgendarstellung ist JSON, und eine der einfachsten Methoden zum Serialisieren von/zu JSON in Android ist, wenn Sie mich fragen, über Google GSON .

In diesem Fall setzen Sie einfach den String-Rückgabewert von (new Gson()).toJson(myObject); und rufen den String-Wert ab. Verwenden Sie fromJson, um ihn wieder in Ihr Objekt umzuwandeln.

Wenn Ihr Objekt jedoch nicht sehr komplex ist, ist dies möglicherweise nicht den Aufwand wert, und Sie können auch die separaten Werte des Objekts übergeben.

174
David Hedlund

Sie können durch Absicht serialisierbare Objekte senden

// send where details is object
ClassName details = new ClassName();
Intent i = new Intent(context, EditActivity.class);
i.putExtra("Editing", details);
startActivity(i);


//receive
ClassName model = (ClassName) getIntent().getSerializableExtra("Editing");

And 

Class ClassName implements Serializable {
} 
146
Sridhar

Verwenden Sie in Situationen, in denen Sie wissen, dass Sie Daten innerhalb einer Anwendung übergeben, "Globals" (wie statische Klassen).

Hier ist was Dianne Hackborn (hackbod - ein Google Android Software Engineer) zu der Angelegenheit gesagt hat:

Für Situationen, in denen Sie wissen, dass die Aktivitäten auf dieselbe Weise ausgeführt werden Prozess können Sie Daten einfach über Globals freigeben. Zum Beispiel Sie könnte einen globalen HashMap<String, WeakReference<MyInterpreterState>>.__ haben. und wenn Sie einen neuen MyInterpreterState erstellen, erhalten Sie einen eindeutigen Namen dafür und füge es in die Hash-Karte ein; um diesen Zustand an einen anderen zu senden Geben Sie einfach den eindeutigen Namen in die Hash-Map ein und wenn. Die zweite Aktivität wird gestartet. Sie kann den MyInterpreterState von .__ abrufen. die Hash-Map mit dem Namen, den sie erhält.

64
Peter Ajtai

Ihre Klasse sollte Serializable oder Parcelable implementieren.

public class MY_CLASS implements Serializable

Wenn Sie fertig sind, können Sie ein Objekt auf putExtra senden

intent.putExtra("KEY", MY_CLASS_instance);

startActivity(intent);

Um Extras zu bekommen, müssen Sie nur noch etwas tun

Intent intent = getIntent();
MY_CLASS class = (MY_CLASS) intent.getExtras().getSerializable("KEY");

Wenn Ihre Klasse Parcelable implementiert, verwenden Sie als Nächstes

MY_CLASS class = (MY_CLASS) intent.getExtras().getParcelable("KEY");

Ich hoffe es hilft: D

45
Pedro Romão

Kurze Antwort für schnelles Bedürfnis 

1. Implementieren Sie Ihre Klasse in serialisierbar.  

Wenn Sie irgendwelche inneren Klassen haben, vergessen Sie nicht, sie auch in Serializable zu implementieren !!

public class SportsData implements  Serializable
public class Sport implements  Serializable

List<Sport> clickedObj;

2. Setze dein Objekt in Absicht  

 Intent intent = new Intent(SportsAct.this, SportSubAct.class);
            intent.putExtra("sport", clickedObj);
            startActivity(intent);

3. Und erhalte dein Objekt in der anderen Aktivitätsklasse

Intent intent = getIntent();
    Sport cust = (Sport) intent.getSerializableExtra("sport");
31
Sam

wenn Ihre ObjektklasseSerializableimplementiert, müssen Sie nichts weiter tun. Sie können ein serialisierbares Objekt übergeben. 
das ist was ich benutze.

27
Vlad

Sie können dazu Android BUNDLE verwenden.

Erstellen Sie ein Bundle aus Ihrer Klasse wie:

public Bundle toBundle() {
    Bundle b = new Bundle();
    b.putString("SomeKey", "SomeValue");

    return b;
}

Übergeben Sie dann dieses Bundle mit INTENT . Jetzt können Sie Ihr Klassenobjekt neu erstellen, indem Sie Bundle like übergeben

public CustomClass(Context _context, Bundle b) {
    context = _context;
    classMember = b.getString("SomeKey");
}

Deklarieren Sie dies in Ihrer benutzerdefinierten Klasse und verwenden Sie sie.

16
om252345

serialisierbar in Ihrer Klasse implementieren

        public class Place implements Serializable{
        private int id;
        private String name;

        public void setId(int id) {
           this.id = id;
        }
        public int getId() {
           return id;
        }
        public String getName() {
           return name;
        }

        public void setName(String name) {
           this.name = name;
        }
        }

Dann können Sie dieses Objekt absichtlich übergeben

     Intent intent = new Intent(this, SecondAct.class);
     intent.putExtra("PLACE", Place);
     startActivity();

in der zweiten Aktivität können Sie Daten wie diese erhalten

     Place place= (Place) getIntent().getSerializableExtra("PLACE");

Wenn die Daten jedoch groß werden, wird diese Methode langsam sein.

16
Ishan Fernando

Vielen Dank für die Hilfe zu Paketen, aber ich habe eine weitere optionale Lösung gefunden 

 public class getsetclass implements Serializable {
        private int dt = 10;
    //pass any object, drwabale 
        public int getDt() {
            return dt;
        }

        public void setDt(int dt) {
            this.dt = dt;
        }
    }

In Tätigkeit eins

getsetclass d = new getsetclass ();
                d.setDt(50);
                LinkedHashMap<String, Object> obj = new LinkedHashMap<String, Object>();
                obj.put("hashmapkey", d);
            Intent inew = new Intent(SgParceLableSampelActivity.this,
                    ActivityNext.class);
            Bundle b = new Bundle();
            b.putSerializable("bundleobj", obj);
            inew.putExtras(b);
            startActivity(inew);

Daten in Aktivität abrufen 2

 try {  setContentView(R.layout.main);
            Bundle bn = new Bundle();
            bn = getIntent().getExtras();
            HashMap<String, Object> getobj = new HashMap<String, Object>();
            getobj = (HashMap<String, Object>) bn.getSerializable("bundleobj");
            getsetclass  d = (getsetclass) getobj.get("hashmapkey");
        } catch (Exception e) {
            Log.e("Err", e.getMessage());
        }
15
user1140237

Es gibt verschiedene Möglichkeiten, wie Sie auf Variablen oder Objekte in anderen Klassen oder Aktivitäten zugreifen können.

Eine Datenbank

B. gemeinsame Präferenzen.

C. Objektserialisierung.

D. Eine Klasse, die allgemeine Daten enthalten kann, kann als allgemeine Dienstprogramme bezeichnet werden, die von Ihnen abhängen.

E. Weitergabe von Daten über Intents und Parcelable Interface.

Dies hängt von Ihren Projektanforderungen ab.

A. Datenbank

SQLite ist eine Open Source-Datenbank, die in Android eingebettet ist. SQLite unterstützt Standardfunktionen für relationale Datenbanken wie SQL-Syntax, Transaktionen und vorbereitete Anweisungen.

Tutorials - http://www.vogella.com/articles/AndroidSQLite/article.html

B. Gemeinsame Einstellungen

Angenommen, Sie möchten den Benutzernamen speichern. Es wird also jetzt zwei Dinge geben, einen Schlüssel Benutzername, Wert Wert.

Wie ist es aufzubewahren?

 // Create object of SharedPreferences.
 SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
 //now get Editor
 SharedPreferences.Editor editor = sharedPref.edit();
 //put your value
 editor.putString("userName", "stackoverlow");

 //commits your edits
 editor.commit();

Mit putString (), putBoolean (), putInt (), putFloat (), putLong () können Sie den gewünschten Datentyp speichern.

Wie holt man

SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
String userName = sharedPref.getString("userName", "Not Available");

http://developer.Android.com/reference/Android/content/SharedPreferences.html

C. Objekt-Serialisierung

Die Objekt-Serlisierung wird verwendet, wenn wir einen Objektstatus speichern möchten, um ihn über das Netzwerk zu senden, oder Sie können ihn auch für Ihren Zweck verwenden.

Verwende Java Beans und speichere sie als eines seiner Felder und verwende Getter und Setter dafür

JavaBeans sind Java Klassen mit Eigenschaften. Stellen Sie sich Eigenschaften als private Instanzvariablen vor. Da sie privat sind, können sie nur über Methoden in der Klasse von außerhalb ihrer Klasse aufgerufen werden. Die Methoden, die den Wert einer Eigenschaft ändern, heißen Setter-Methoden, und die Methoden, die den Wert einer Eigenschaft abrufen, heißen Getter-Methoden.

public class VariableStorage implements Serializable  {

    private String inString ;

    public String getInString() {
        return inString;
    }

    public void setInString(String inString) {
        this.inString = inString;
    }


}

Stellen Sie die Variable in Ihrer Mail-Methode mit ein

VariableStorage variableStorage = new VariableStorage();
variableStorage.setInString(inString);

Verwenden Sie dann die Objekt-Serialisierung, um dieses Objekt zu serialisieren und deserialisieren Sie dieses Objekt in Ihrer anderen Klasse.

Bei der Serialisierung kann ein Objekt als eine Folge von Bytes dargestellt werden, die die Daten des Objekts sowie Informationen über den Objekttyp und die im Objekt gespeicherten Datentypen enthält.

Nachdem ein serialisiertes Objekt in eine Datei geschrieben wurde, kann es aus der Datei gelesen und deserialisiert werden. Die Typinformationen und Bytes, die das Objekt und seine Daten darstellen, können verwendet werden, um das Objekt im Speicher neu zu erstellen.

Wenn Sie dazu ein Tutorial benötigen, klicken Sie auf diesen Link

http://javawithswaranga.blogspot.in/2011/08/serialization-in-Java.html

Variable in anderen Klassen holen

D. CommonUtilities

Sie können selbst eine Klasse erstellen, die allgemeine Daten enthält, die Sie häufig in Ihrem Projekt benötigen.

Probe

public class CommonUtilities {

    public static String className = "CommonUtilities";

}

E. Weitergabe von Daten durch Absichten

In diesem Tutorial erfahren Sie, wie Sie Daten weitergeben können.

http://shri.blog.kraya.co.uk/2010/04/26/Android-parcel-data-to-pass-between-activities-using-parcelable-classes/

15
Nikhil Agrawal

Ich benutze Gson mit seiner so mächtigen und einfachen API, um Objekte zwischen Aktivitäten zu senden,

Beispiel

// This is the object to be sent, can be any object
public class AndroidPacket {

    public String CustomerName;

   //constructor
   public AndroidPacket(String cName){
       CustomerName = cName;
   }   
   // other fields ....


    // You can add those functions as LiveTemplate !
    public String toJson() {
        Gson gson = new Gson();
        return gson.toJson(this);
    }

    public static AndroidPacket fromJson(String json) {
        Gson gson = new Gson();
        return gson.fromJson(json, AndroidPacket.class);
    }
}

2 Funktionen fügen Sie sie den Objekten hinzu, die Sie senden möchten

Verwendungszweck

Objekt von A nach B senden

    // Convert the object to string using Gson
    AndroidPacket androidPacket = new AndroidPacket("Ahmad");
    String objAsJson = androidPacket.toJson();

    Intent intent = new Intent(A.this, B.class);
    intent.putExtra("my_obj", objAsJson);
    startActivity(intent);

Empfang in B

@Override
protected void onCreate(Bundle savedInstanceState) {        
    Bundle bundle = getIntent().getExtras();
    String objAsJson = bundle.getString("my_obj");
    AndroidPacket androidPacket = AndroidPacket.fromJson(objAsJson);

    // Here you can use your Object
    Log.d("Gson", androidPacket.CustomerName);
}

Ich verwende es fast in jedem Projekt und ich habe keine Leistungsprobleme.

13
MBH

In Ihrer ersten Aktivität:

intent.putExtra("myTag", yourObject);

Und in Ihrem zweiten:

myCustomObject myObject = (myCustomObject) getIntent().getSerializableExtra("myTag");

Vergessen Sie nicht, Ihr benutzerdefiniertes Objekt zu serialisieren: 

public class myCustomObject implements Serializable {
...
}
9
Rudi

Ich hatte mit dem gleichen Problem zu kämpfen. Ich habe es gelöst, indem ich eine statische Klasse verwendet habe und beliebige Daten in einer HashMap gespeichert habe. Außerdem verwende ich eine Erweiterung der standardmäßigen Activity-Klasse, bei der ich die Methoden onObject onDestroy überschrieben habe, um den Datentransport und das Löschen von Daten zu verhindern. Einige lächerliche Einstellungen müssen geändert werden, z. Orientierungshandhabung.

Anmerkung: Wenn Sie keine allgemeinen Objekte angeben, die an eine andere Aktivität übergeben werden sollen, handelt es sich um Schmerzen im Arsch. Es ist, als würde man sich in das Knie schießen und hoffen, 100 Meter zu gewinnen. "Parcable" ist kein ausreichender Ersatz. Das bringt mich zum Lachen ... Ich möchte diese Schnittstelle nicht in meine technologiefreie API implementieren, da ich weniger eine neue Ebene einführen möchte ... Wie könnte es sein, dass wir uns in der mobilen Programmierung so weit entfernt befinden modernes Paradigma ...

9
oopexpert

Eine andere Möglichkeit besteht darin, das Application-Objekt (Android.app.Application) zu verwenden. Sie definieren dies in Ihrer AndroidManifest.xml-Datei als:

<application
    Android:name=".MyApplication"
    ...

Sie können dies aus einer beliebigen Aktivität heraus aufrufen und das Objekt in der Application-Klasse speichern.

In der FirstActivity:

MyObject myObject = new MyObject();
MyApplication app = (MyApplication) getApplication();
app.setMyObject(myObject);

In der SecondActivity:

MyApplication app = (MyApplication) getApplication();
MyObject retrievedObject = app.getMyObject(myObject);

Dies ist praktisch, wenn Sie Objekte mit Anwendungsbereich haben, d. H. Sie müssen in der gesamten Anwendung verwendet werden. Die Parcelable-Methode ist noch besser, wenn Sie den Objektbereich explizit steuern möchten oder wenn der Bereich eingeschränkt ist.

Dies vermeidet jedoch die Verwendung von Intents. Ich weiß nicht, ob sie zu dir passen. Eine andere Art, wie ich dies verwendet habe, ist, int-Bezeichner von Objekten durch Absichten zu senden und Objekte abzurufen, die ich in Maps im Application-Objekt habe.

7
Saad Farooq
public class SharedBooking implements Parcelable{

    public int account_id;
    public Double betrag;
    public Double betrag_effected;
    public int taxType;
    public int tax;
    public String postingText;

    public SharedBooking() {
        account_id = 0;
        betrag = 0.0;
        betrag_effected = 0.0;
        taxType = 0;
        tax = 0;
        postingText = "";
    }

    public SharedBooking(Parcel in) {
        account_id = in.readInt();
        betrag = in.readDouble();
        betrag_effected = in.readDouble();
        taxType = in.readInt();
        tax = in.readInt();
        postingText = in.readString();
    }

    public int getAccount_id() {
        return account_id;
    }
    public void setAccount_id(int account_id) {
        this.account_id = account_id;
    }
    public Double getBetrag() {
        return betrag;
    }
    public void setBetrag(Double betrag) {
        this.betrag = betrag;
    }
    public Double getBetrag_effected() {
        return betrag_effected;
    }
    public void setBetrag_effected(Double betrag_effected) {
        this.betrag_effected = betrag_effected;
    }
    public int getTaxType() {
        return taxType;
    }
    public void setTaxType(int taxType) {
        this.taxType = taxType;
    }
    public int getTax() {
        return tax;
    }
    public void setTax(int tax) {
        this.tax = tax;
    }
    public String getPostingText() {
        return postingText;
    }
    public void setPostingText(String postingText) {
        this.postingText = postingText;
    }
    public int describeContents() {
        // TODO Auto-generated method stub
        return 0;
    }
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeInt(account_id);
        dest.writeDouble(betrag);
        dest.writeDouble(betrag_effected);
        dest.writeInt(taxType);
        dest.writeInt(tax);
        dest.writeString(postingText);

    }

    public static final Parcelable.Creator<SharedBooking> CREATOR = new Parcelable.Creator<SharedBooking>()
    {
        public SharedBooking createFromParcel(Parcel in)
        {
            return new SharedBooking(in);
        }
        public SharedBooking[] newArray(int size)
        {
            return new SharedBooking[size];
        }
    };

}

Weitergabe der Daten:

Intent intent = new Intent(getApplicationContext(),YourActivity.class);
Bundle bundle = new Bundle();
i.putParcelableArrayListExtra("data", (ArrayList<? extends Parcelable>) dataList);
intent.putExtras(bundle);
startActivity(intent);

Abrufen der Daten:

Bundle bundle = getIntent().getExtras();
dataList2 = getIntent().getExtras().getParcelableArrayList("data");
6

in Ihrem Klassenmodell (Object) implementieren Sie Serializable für Beispiel:

public class MensajesProveedor implements Serializable {

    private int idProveedor;


    public MensajesProveedor() {
    }

    public int getIdProveedor() {
        return idProveedor;
    }

    public void setIdProveedor(int idProveedor) {
        this.idProveedor = idProveedor;
    }


}

und deine erste Aktivität 

MensajeProveedor mp = new MensajeProveedor();
Intent i = new Intent(getApplicationContext(), NewActivity.class);
                i.putExtra("mensajes",mp);
                startActivity(i);

und deine zweite Aktivität (NewActivity)

        MensajesProveedor  mensajes = (MensajesProveedor)getIntent().getExtras().getSerializable("mensajes");

viel Glück!!

6
David Hackro

Android-Anwendung erstellen

Datei >> Neu >> Android-Anwendung

Geben Sie den Projektnamen ein: Android-Pass-Objekt-zu-Aktivität

Paket: com.hmkcode.Android

Behalten Sie die anderen Defualt-Einstellungen bei, und fahren Sie mit "Next" fort, bis Sie "Finish" erreichen

Bevor Sie mit der Erstellung der App beginnen, müssen Sie die POJO-Klasse „Person“ erstellen, mit der wir das Objekt von einer Aktivität zur anderen senden. Beachten Sie, dass die Klasse eine serialisierbare Schnittstelle implementiert.

Person.Java

package com.hmkcode.Android;
import Java.io.Serializable;

public class Person implements Serializable{

    private static final long serialVersionUID = 1L;

    private String name;
    private int age;

        // getters & setters....

    @Override
    public String toString() {
        return "Person [name=" + name + ", age=" + age + "]";
    }   
}

Zwei Layouts für zwei Aktivitäten

activity_main.xml

<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="vertical"
tools:context=".MainActivity" >

<LinearLayout
    Android:layout_width="fill_parent"
    Android:layout_height="wrap_content"
    Android:orientation="horizontal">
    <TextView
        Android:id="@+id/tvName"
        Android:layout_width="100dp"
        Android:layout_height="wrap_content"
        Android:layout_gravity="center"
        Android:gravity="center_horizontal"
        Android:text="Name" />

    <EditText
        Android:id="@+id/etName"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"

        Android:ems="10" >
        <requestFocus />
    </EditText>
</LinearLayout>

<LinearLayout
     Android:layout_width="fill_parent"
    Android:layout_height="wrap_content"
    Android:orientation="horizontal">
<TextView
    Android:id="@+id/tvAge"
    Android:layout_width="100dp"
    Android:layout_height="wrap_content"
    Android:layout_gravity="center"
    Android:gravity="center_horizontal"
    Android:text="Age" />
<EditText
    Android:id="@+id/etAge"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:ems="10" />
</LinearLayout>

<Button
    Android:id="@+id/btnPassObject"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_gravity="center_horizontal"
    Android:text="Pass Object to Another Activity" />

</LinearLayout>

activity_another.xml

<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="vertical"
 >

<TextView
    Android:id="@+id/tvPerson"
    Android:layout_height="wrap_content"
    Android:layout_width="fill_parent"
    Android:layout_gravity="center"
    Android:gravity="center_horizontal"
 />

</LinearLayout>

Zwei Aktivitätsklassen

1) ActivityMain.Java

package com.hmkcode.Android;

import Android.os.Bundle;
import Android.app.Activity;
import Android.content.Intent;
import Android.view.View;
import Android.view.View.OnClickListener;
import Android.widget.Button;
import Android.widget.EditText;

public class MainActivity extends Activity implements OnClickListener {

Button btnPassObject;
EditText etName, etAge;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    btnPassObject = (Button) findViewById(R.id.btnPassObject);
    etName = (EditText) findViewById(R.id.etName);
    etAge = (EditText) findViewById(R.id.etAge);

    btnPassObject.setOnClickListener(this);
}

@Override
public void onClick(View view) {

    // 1. create an intent pass class name or intnet action name 
    Intent intent = new Intent("com.hmkcode.Android.ANOTHER_ACTIVITY");

    // 2. create person object
    Person person = new Person();
    person.setName(etName.getText().toString());
    person.setAge(Integer.parseInt(etAge.getText().toString()));

    // 3. put person in intent data
    intent.putExtra("person", person);

    // 4. start the activity
    startActivity(intent);
}

}

2) AnotherActivity.Java

package com.hmkcode.Android;

import Android.app.Activity;
import Android.content.Intent;
import Android.os.Bundle;
import Android.widget.TextView;

public class AnotherActivity extends Activity {

TextView tvPerson;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_another);

    // 1. get passed intent 
    Intent intent = getIntent();

    // 2. get person object from intent
    Person person = (Person) intent.getSerializableExtra("person");

    // 3. get reference to person textView 
    tvPerson = (TextView) findViewById(R.id.tvPerson);

    // 4. display name & age on textView 
    tvPerson.setText(person.toString());

}
}
4
MFP

sie können die Methoden putExtra (Serializable ..) und getSerializableExtra () verwenden, um Objekte Ihres Klassentyps zu übergeben und abzurufen. Sie müssen Ihre Klasse als serialisierbar kennzeichnen und sicherstellen, dass alle Member-Variablen auch serialisierbar sind ... 

4
null
Intent i = new Intent();
i.putExtra("name_of_extra", myParcelableObject);
startACtivity(i);
3
Manas Ranjan

Ich weiß, dass dies zu spät ist, aber es ist sehr einfach. Alles, was Sie tun müssen, ist, dass Ihre Klasse Serializable implementiert

public class MyClass implements Serializable{

}

dann kannst du zu einer absicht wie gehen

Intent intent=......
MyClass obje=new MyClass();
intent.putExtra("someStringHere",obje);

Um es zu bekommen, rufen Sie einfach an 

MyClass objec=(MyClass)intent.getExtra("theString");
3
suulisin

Mit der Google Gson-Bibliothek können Sie Objekte an andere Aktivitäten übergeben. Tatsächlich konvertieren wir Objekte in Form von Json-String, und nachdem wir zu anderen Aktivitäten übergegangen sind, werden wir wieder in Objekte wie dieses konvertieren

Betrachten Sie eine Bean-Klasse wie diese

 public class Example {
    private int id;
    private String name;

    public Example(int id, String name) {
        this.id = id;
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

Wir müssen das Objekt der Example-Klasse übergeben

Example exampleObject=new Example(1,"hello");
String jsonString = new Gson().toJson(exampleObject);
Intent nextIntent=new Intent(this,NextActivity.class);
nextIntent.putExtra("example",jsonString );
startActivity(nextIntent);

Zum Lesen müssen wir den umgekehrten Vorgang in NextActivity durchführen

 Example defObject=new Example(-1,null);
    //default value to return when example is not available
    String defValue= new Gson().toJson(defObject);
    String jsonString=getIntent().getExtras().getString("example",defValue);
    //passed example object
    Example exampleObject=new Gson().fromJson(jsonString,Example .class);

Fügen Sie diese Abhängigkeit in Gradle hinzu

compile 'com.google.code.gson:gson:2.6.2'
3
Jinesh Francis

Wenn Sie ohnehin über eine Singleton-Klasse (fx-Service) verfügen, die als Gateway für Ihre Modellebene fungiert, kann dies gelöst werden, indem Sie in dieser Klasse eine Variable mit Getters und Setters verwenden.

In Tätigkeit 1:

Intent intent = new Intent(getApplicationContext(), Activity2.class);
service.setSavedOrder(order);
startActivity(intent);

In Tätigkeit 2:

private Service service;
private Order order;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_quality);

    service = Service.getInstance();
    order = service.getSavedOrder();
    service.setSavedOrder(null) //If you don't want to save it for the entire session of the app.
}

Im Dienst:

private static Service instance;

private Service()
{
    //Constructor content
}

public static Service getInstance()
{
    if(instance == null)
    {
        instance = new Service();
    }
    return instance;
}
private Order savedOrder;

public Order getSavedOrder()
{
    return savedOrder;
}

public void setSavedOrder(Order order)
{
    this.savedOrder = order;
}

Diese Lösung erfordert keine Serialisierung oder sonstige "Verpackung" des betreffenden Objekts. Es ist jedoch nur von Vorteil, wenn Sie diese Art von Architektur trotzdem verwenden. 

2
Kitalda

Starten Sie eine weitere Aktivität aus diesen Aktivitätsübergabeparametern über Bündelobjekt

Intent intent = new Intent(getBaseContext(), YourActivity.class);
intent.putExtra("USER_NAME", "[email protected]");
startActivity(intent);

Abrufen einer anderen Aktivität (YourActivity)

String s = getIntent().getStringExtra("USER_NAME");

Dies ist für einfache Datentypen in Ordnung. Wenn Sie jedoch komplexe Daten zwischen den Aktivitäten übergeben möchten, müssen Sie sie zuerst serialisieren.

Hier haben wir Employee Model

class Employee{
    private String empId;
    private int age;
    print Double salary;

    getters...
    setters...
}

Sie können die von Google bereitgestellte Gson lib verwenden, um die komplexen Daten Wie folgt zu serialisieren

String strEmp = new Gson().toJson(emp);
Intent intent = new Intent(getBaseContext(), YourActivity.class);
intent.putExtra("EMP", strEmp);
startActivity(intent);

Bundle bundle = getIntent().getExtras();
    String empStr = bundle.getString("EMP");
            Gson gson = new Gson();
            Type type = new TypeToken<Employee>() {
            }.getType();
            Employee selectedEmp = gson.fromJson(empStr, type);
2
DroidNinja

Am einfachsten wäre es, wenn Folgendes verwendet wird, wenn das Element eine Zeichenfolge ist:

intent.putextra("selected_item",item)

Für den Empfang:

String name = data.getStringExtra("selected_item");
2
ankish

Bei weitem der einfachste Weg, IMHO Objekte zu verpacken. Sie fügen einfach ein Anmerkungs-Tag über dem Objekt hinzu, das Sie als Paket verwenden möchten.

Ein Beispiel aus der Bibliothek ist unter https://github.com/johncarl81/parceler

@Parcel
public class Example {
    String name;
    int age;

    public Example(){ /*Required empty bean constructor*/ }

    public Example(int age, String name) {
        this.age = age;
        this.name = name;
    }

    public String getName() { return name; }

    public int getAge() { return age; }
}
2
Ryan

Implementieren Sie zuerst Parcelable in Ihrer Klasse. Dann Objekt so übergeben.

SendActivity.Java

ObjectA obj = new ObjectA();

// Set values etc.

Intent i = new Intent(this, MyActivity.class);
i.putExtra("com.package.ObjectA", obj);

startActivity(i);

ReceiveActivity.Java

Bundle b = getIntent().getExtras();
ObjectA obj = b.getParcelable("com.package.ObjectA");

Die Paketzeichenfolge ist nicht erforderlich, nur die Zeichenfolge muss in beiden Aktivitäten identisch sein 

REFERENZ

2
Arpit Patel

Wenn Sie sich nicht besonders mit der putExtra-Funktion auskennen und nur eine weitere Aktivität mit Objekten starten möchten, können Sie die Bibliothek GNLauncher ( https://github.com/noxiouswinter/gnlib_Android/wiki#gnlauncher ) überprüfen schrieb in einem Versuch, diesen Prozess einfacher zu gestalten.

GNLauncher macht das Senden von Objekten/Daten an eine Aktivität aus einer anderen Aktivität usw. so einfach wie das Aufrufen einer Funktion in der Aktivität mit den erforderlichen Daten als Parameter. Es führt die Typensicherheit ein und beseitigt alle Mühen, die durch die Serialisierung verursacht werden müssen, indem der String mit Hilfe von String-Schlüsseln verbunden und am anderen Ende wieder rückgängig gemacht wird.

1
jinais
We can send data one Activty1 to Activity2 with multiple ways like.
1- Intent
2- bundle
3- create an object and send through intent
.................................................
1 - Using intent
Pass the data through intent
Intent intentActivity1 = new Intent(Activity1.this, Activity2.class);
intentActivity1.putExtra("name", "Android");
startActivity(intentActivity1);
Get the data in Activity2 calss
Intent intent = getIntent();
if(intent.hasExtra("name")){
     String userName = getIntent().getStringExtra("name");
}
..................................................
2- Using Bundle
Intent intentActivity1 = new Intent(Activity1.this, Activity2.class);
Bundle bundle = new Bundle();
bundle.putExtra("name", "Android");
intentActivity1.putExtra(bundle);
startActivity(bundle);
Get the data in Activity2 calss
Intent intent = getIntent();
if(intent.hasExtra("name")){
     String userName = getIntent().getStringExtra("name");
}
..................................................
3-  Put your Object into Intent
Intent intentActivity1 = new Intent(Activity1.this, Activity2.class);
            intentActivity1.putExtra("myobject", myObject);
            startActivity(intentActivity1); 
 Receive object in the Activity2 Class
Intent intent = getIntent();
    Myobject obj  = (Myobject) intent.getSerializableExtra("myobject");
0
Ashish Kumar

In Koltin

Fügen Sie in Ihrem build.gradle die Erweiterung kotlin hinzu.

apply plugin: 'kotlin-Android-extensions'

Android {
    androidExtensions {
        experimental = true
   }
}

Dann erstellen Sie Ihre Datenklasse so.

@Parcelize
data class Sample(val id: Int, val name: String) : Parcelable

Objekt mit Absicht übergeben  

val sample = Sample(1,"naveen")

val intent = Intent(context, YourActivity::class.Java)
    intent.putExtra("id", sample)
    startActivity(intent)

Objekt mit Absicht erhalten

val sample = intent.getParcelableExtra("id")
0
Naveen
Start another activity from this activity pass parameters via Bundle Object

Intent intent = new Intent(this, YourActivity.class);
Intent.putExtra(AppConstants.EXTRAS.MODEL, cModel);
startActivity(intent);
Retrieve on another activity (YourActivity)

ContentResultData cModel = getIntent().getParcelableExtra(AppConstants.EXTRAS.MODEL);
0
Alok Singh

Am einfachsten und Java am besten: Implementieren Sie serialisierbar in Ihre Pojo/Model-Klasse

Empfohlen für Android zur Leistungsanzeige: Modell paketfähig machen

0
Ashok Kumar

POJO-Klasse "Post " (Beachten Sie, dass es serialisierbar ist)

package com.example.booklib;

import Java.io.Serializable;
import Java.util.ArrayList;
import Java.util.List;

import Android.graphics.Bitmap;

public class Post implements Serializable{
    public String message;
    public String bitmap;
    List<Comment> commentList = new ArrayList<Comment>();
    public String getMessage() {
        return message;
    }
    public void setMessage(String message) {
        this.message = message;
    }
    public String getBitmap() {
        return bitmap;
    }
    public void setBitmap(String bitmap) {
        this.bitmap = bitmap;
    }
    public List<Comment> getCommentList() {
        return commentList;
    }
    public void setCommentList(List<Comment> commentList) {
        this.commentList = commentList;
    }

}

POJO-Klasse "Kommentar" (Da Sie Mitglied der Post-Klasse sind, ist es auch erforderlich, das Serializable zu implementieren.)

    package com.example.booklib;

    import Java.io.Serializable;

    public class Comment implements Serializable{
        public String message;
        public String fromName;
        public String getMessage() {
            return message;
        }
        public void setMessage(String message) {
            this.message = message;
        }
        public String getFromName() {
            return fromName;
        }
        public void setFromName(String fromName) {
            this.fromName = fromName;
        }

    }

Anschließend können Sie in Ihrer Aktivitätsklasse das Objekt an eine andere Aktivität übergeben.

ListView listview = (ListView) findViewById(R.id.post_list);
listview.setOnItemClickListener(new OnItemClickListener(){
        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
            Post item = (Post)parent.getItemAtPosition(position);
            Intent intent = new Intent(MainActivity.this,CommentsActivity.class);
            intent.putExtra("post",item);
            startActivity(intent);

        }
    });

In Ihrer Empfängerklasse "CommentsActivity" können Sie die Daten wie folgt erhalten 

Post post =(Post)getIntent().getSerializableExtra("post");
0
zawhtut