932 Stimmen

Wie sendet man ein Objekt von einer Android-Aktivität zu einer anderen mit Intents?

Wie kann ich ein Objekt eines benutzerdefinierten Typs von einem Tätigkeit zu einem anderen unter Verwendung der putExtra() Methode der Klasse Absicht ?

0 Stimmen

@UMMA - Sie brauchen Ihre Fragen nicht ständig als "Community Wiki" zu markieren. Schauen Sie hier nach: meta.stackexchange.com/questions/11740/

1 Stimmen

@Paresh: Der von Ihnen angegebene Link ist defekt. Könnten Sie bitte eine Alternative angeben?

0 Stimmen

40voto

Ishan Fernando Punkte 2478

Serializable 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 in intent übergeben

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

In der zweiten Aktivität können Sie Daten wie folgt erhalten

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

Bei großen Datenmengen wird diese Methode jedoch langsam.

36voto

Samir Punkte 5905

Kurze Antwort für schnellen Bedarf

1. Implementieren Sie Ihre Klasse in Serializable.

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

public class SportsData implements  Serializable
public class Sport implements  Serializable

List<Sport> clickedObj;

2. Setzen Sie Ihr Objekt in Intent

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

3. Und empfangen Sie Ihr Objekt in der anderen Aktivitätsklasse

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

0 Stimmen

0 Stimmen

Sie können dasselbe erreichen, indem Sie die Schnittstelle Parcelable implementieren. Die Implementierung der Schnittstelle Parcelable nimmt im Vergleich zu Serializable aufgrund der Codegröße mehr Zeit in Anspruch. Sie arbeitet jedoch schneller als Serializable und verbraucht weniger Ressourcen.

28voto

Vlad Punkte 727

Wenn Ihre Objektklasse Folgendes implementiert Serializable brauchen Sie nichts weiter zu tun, Sie können ein serialisierbares Objekt übergeben.
Das ist es, was ich benutze.

25voto

Nikhil Agrawal Punkte 24920

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

A. Datenbank

B. gemeinsame Präferenzen.

C. Objekt-Serialisierung.

D. Eine Klasse, die gemeinsame Daten enthalten kann, kann den Namen Common Utilities tragen, das hängt von Ihnen ab.

E. Übergabe von Daten durch Intents und Parcelable Interface.

Das hängt von Ihren Projektanforderungen ab.

A. Datenbank

SQLite ist eine Open-Source-Datenbank, die in Android eingebettet ist. SQLite unterstützt standardmäßige relationale Datenbankfunktionen wie SQL-Syntax, Transaktionen und vorbereitete Anweisungen.

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

B. Gemeinsame Präferenzen

Angenommen, Sie möchten den Benutzernamen speichern. Dann gibt es jetzt zwei Dinge a Schlüssel Benutzername, Wert Wert.

Wie speichern

 // Create an 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 man holt

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 Serialisierung von Objekten wird verwendet, wenn der Zustand eines Objekts gespeichert werden soll, um es über das Netzwerk zu versenden. Sie können es auch für Ihre Zwecke verwenden.

Verwenden Sie Java Beans und speichern Sie darin als eines seiner Felder und verwenden Sie Getter und Setter für diese

JavaBeans sind Java-Klassen, die Eigenschaften haben. Betrachten Sie Eigenschaften als private Instanzvariablen. Da sie privat sind, ist die einzige Möglichkeit der einzige Weg, wie man von außerhalb der Klasse auf sie zugreifen kann, über Methoden in der Klasse. Die Methoden, die den Wert einer Eigenschaft ändern, werden Setter-Methoden genannt, und die Methoden die den Wert einer Eigenschaft abrufen, werden Getter-Methoden genannt.

public class VariableStorage implements Serializable  {

    private String inString ;

    public String getInString() {
        return inString;
    }

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

}

Setzen Sie die Variable in Ihrer Mail-Methode, indem Sie

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

Verwenden Sie dann die Objektserialisierung, 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 Typ des Objekts und die Arten der im Objekt gespeicherten Daten enthält.

Nachdem ein serialisiertes Objekt in eine Datei geschrieben wurde, kann es aus der Datei gelesen und deserialisiert werden, d. h. 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 ein Tutorial für diese auf diesen Link verweisen wollen

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

Variable in anderen Klassen erhalten

D. CommonUtilities

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

Muster

public class CommonUtilities {

    public static String className = "CommonUtilities";

}

E. Übergabe von Daten durch Intents

Für diese Möglichkeit der Datenübergabe lesen Sie bitte dieses Tutorial.

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

0 Stimmen

Gutes Tutorial, das Sie in (E) über die Weitergabe von Daten durch Intents erwähnen.

17voto

om252345 Punkte 2365

Dazu können Sie Android BUNDLE verwenden.

Erstellen Sie ein Bundle aus Ihrer Klasse wie:

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

    return b;
}

Dann übergeben Sie dieses Bündel mit INTENT. Jetzt können Sie Ihr Klassenobjekt neu erstellen, indem Sie das Bundle wie folgt übergeben

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

Deklarieren Sie dies in Ihrer benutzerdefinierten Klasse und verwenden Sie.

2 Stimmen

IMHO ist dies einer direkten Implementierung von Parcelable vorzuziehen. Bundle implementiert Parcelable selbst, so dass Sie immer noch den Leistungsgewinn haben, während Sie den ganzen Aufwand vermeiden, es selbst zu implementieren. Stattdessen können Sie Schlüssel-Wert-Paare verwenden, um die Daten zu speichern und abzurufen, was bei weitem robuster ist, als sich auf die bloße Reihenfolge zu verlassen.

0 Stimmen

Parcelable scheint kompliziert zu mir, in meiner obigen Antwort ich bin mit toBundle-Methode von Klasse auf es ist Objekt, so dass Objekt in Bündel umgewandelt wird und dann können wir Konstruktor verwenden, um Bündel in Klasse Objekt zu konvertieren.

0 Stimmen

Diese Lösung ist nur praktikabel, wenn Sie ein einzelnes Objekt über einen Intent übergeben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X