Wie kann ich ein Objekt eines benutzerdefinierten Typs von einem Tätigkeit zu einem anderen unter Verwendung der
putExtra()
Methode der Klasse Absicht ?
Siehe diesen Link, stackoverflow.com/questions/2139134/
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.
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");
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.
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.
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.
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.
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.
Diese Lösung ist nur praktikabel, wenn Sie ein einzelnes Objekt über einen Intent übergeben.
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.
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
Mögliche Duplikate von Wie man in Android ein Objekt von einer Aktivität an eine andere weitergibt
0 Stimmen
Sehen Sie sich diese Antwort an. stackoverflow.com/questions/8857546/
0 Stimmen
Ich habe eine einfache und elegante Methode gefunden stackoverflow.com/a/37774966/6456129