Co to jest „pakiet” w aplikacji na Androida

Odpowiedzi:

278

Pakiety są zwykle używane do przesyłania danych między różnymi działaniami systemu Android. To zależy od Ciebie, jaki typ wartości chcesz przekazać, ale pakiety mogą przechowywać wszystkie typy wartości i przekazywać je do nowej aktywności.

Możesz użyć tego w następujący sposób:

Intent intent = new...
Intent(getApplicationContext(), SecondActivity.class);
intent.putExtra("myKey", AnyValue);  
startActivity(intent);

Możesz uzyskać przekazane wartości, wykonując:

Bundle extras = intent.getExtras(); 
String tmp = extras.getString("myKey");

Możesz znaleźć więcej informacji na:

samtherock
źródło
3
dlaczego nie użyć bezpośrednio System.object i cast?
lovespring
79

Przekaż dane między czynnościami za pomocą Bundlei Intentobiektów.


Najpierw utwórz Bundleobiekt

Bundle b = new Bundle();

Następnie powiąż dane łańcuchowe przechowywane w anystringkluczu pakietu"myname"

b.putString("myname", anystring);

Teraz stwórz Intentobiekt

Intent in = new Intent(getApplicationContext(), secondActivity.class);

Przekaż obiekt pakietu bdo celu

in.putExtras(b);

i rozpocznij drugą aktywność

startActivity(in);

W drugim działaniu musimy uzyskać dostęp do danych przekazanych z pierwszego działania

Intent in = getIntent();

Teraz musisz pobrać dane z pakietu

Bundle b = in.getExtras();

Na koniec uzyskaj wartość danych ciągu powiązanych z kluczem o nazwie "myname"

String s = b.getString("myname");
mahalakshmi
źródło
TO NAPRAWDĘ DOBRA ODPOWIEDŹ WERBOSOWA, DZIĘKUJEMY ZA TO.
Abhishek Garg
68

Muszę dodać, że pakiety są wykorzystywane przez działania do przekazywania danych sobie w przyszłości.

Gdy ekran się obraca lub gdy uruchamiane jest inne działanie, metoda protected void onSaveInstanceState(Bundle outState)jest wywoływana, a działanie jest niszczone. Później tworzona jest kolejna instancja działania orazpublic void onCreate(Bundle savedInstanceState) jest wywoływane. Po utworzeniu pierwszego wystąpienia działania pakiet ma wartość NULL; a jeśli pakiet nie ma wartości zerowej, działalność kontynuuje część działalności rozpoczętej przez jej poprzednika.

Android automatycznie zapisuje tekst w polach tekstowych, ale nie zapisuje wszystkiego i czasami pojawiają się subtelne błędy.

Najczęstszym anty-wzorcem jest jednak założenie, że onCreate()właśnie inicjuje. To jest złe, ponieważ musi także przywrócić stan.

Istnieje możliwość wyłączenia tego zachowania polegającego na ponownym tworzeniu aktywności podczas obracania, ale nie zapobiegnie to błędom związanym z ponownym uruchomieniem, a jedynie utrudni ich wspomnienie.

Zauważ również, że jedyną metodą, której wywołanie jest gwarantowane, gdy działanie ma zostać zniszczone, jest onPause(). (Zobacz wykres cyklu życia aktywności w dokumentach.)

18446744073709551615
źródło
Po co używać pakietu, jeśli możemy po prostu użyć mapowania? Dzięki Ted!
Ruchir Baronia
4
Pakiet jest używany nie tylko przez Aktywność. Jest również używany przez Fragment do zachowania stanów po obróceniu.
Kai Wang,
47

A Bundlejest bardzo podobny do Mapobiektu Java, który mapuje Stringklucze na wartości. Służy do przekazywania informacji między działaniami a innymi komponentami aplikacji. Jest również wykorzystywany przez środowisko do przechwytywania i przywracania informacji o stanie.

Android nie używa Mapdo tego zwykłych starych obiektów, ponieważ Mapjest zbyt elastyczny; może zawierać obiekty (takie jak np. strumienie we / wy), których nie można serializować. BundleAPI ogranicza typy obiektów, które mogą być dodawane do wiązki w taki sposób, że zawartość wiązki są gwarantowane być możliwy do serializacji. Struktura systemu Android opiera się na tej właściwości.

Sugeruję przeczytanie dokumentacji na temat Podstawy aplikacji . To wyjaśnia między innymi, jakie są pakiety i zamiary i do czego są używane.

Ted Hopp
źródło
14

Pakiety mogą służyć do wysyłania dowolnych danych z jednego działania do drugiego za pomocą Intencji. Gdy transmitujesz zamiar, zainteresowane działania (i inne BroadcastRecievers) zostaną o tym powiadomione. Intencja może zawierać pakiet, dzięki czemu można wysłać dodatkowe dane wraz z intencją.

Pakiety są odwzorowaniami klucz-wartość, więc w pewnym sensie przypominają skrót, ale nie są ściśle ograniczone do pojedynczego odwzorowania obiektu String / Foo. Pamiętaj, że tylko niektóre typy danych są uważane za „możliwe do paczkowania” i są wyraźnie określone w interfejsie API pakietu.

scriptocalypse
źródło
To jedyna jak dotąd odpowiedź, która naprawdę podchodzi do pytania PO, tj. Co to jest pakiet. stackoverflow.com/a/6236801/1588163 daje więcej informacji.
clapas
Po co używać pakietu, jeśli możemy po prostu użyć mapowania? Dzięki!
Ruchir Baronia
@RuchirBaronia nie ma specjalnego powodu, aby używać pakietu, chyba że zamierzasz przekazać go do części interfejsu API Androida, która wymaga obiektów pakietu.
scriptocalypse
8

Po prostu stwórz pakiet,


Bundle simple_bundle=new Bundle();
simple_bundle.putString("item1","value1");
Intent i=new Intent(getApplicationContext(),this_is_the_next_class.class);
i.putExtras(simple_bundle);
startActivity(i);

W „this_is_the_next_class.class”

Możesz odzyskać takie przedmioty.

Intent receive_i=getIntent();
Bundle my_bundle_received=receive_i.getExtras();
my_bundle_received.get("item1");
Log.d("Value","--"+my_bundle_received.get("item1").toString);
Bala Prasanna
źródło
5

Pakiet służy do przekazywania danych między działaniami. Możesz utworzyć pakiet, przekazać go do Intent, który rozpoczyna działanie, które następnie można wykorzystać z działania docelowego.

GSree
źródło
3

Pakiet: - Odwzorowanie wartości ciągów na różne typy działek.

Pakiet jest zwykle używany do przesyłania danych między różnymi działaniami Androida.

kiedy wywołujemy onPause (), następnie onStop (), a następnie w odwrotnej kolejności onStop () do onPause ().

Zapisane dane, których system używa do przywrócenia poprzedniego stanu, nazywane są „stanem instancji” i są zbiorem par klucz-wartość przechowywanych w obiekcie pakietu.

Ahmed Ali
źródło
Mapowanie jest naturą pakietu.
BollMose
2

Pakiet służy do udostępniania danych między działaniami oraz do zapisywania stanu aplikacji w metodzie oncreate (), dzięki czemu aplikacja dowie się, gdzie została zatrzymana ... Mam nadzieję, że to pomoże :)

Sandip Lawate
źródło
0

użycie pakietu wysyła dane z jednego działania do drugiego za pomocą obiektu docelowego; Pakiet zawiera dane dowolnego typu.

Teraz mówię, jak utworzyć pakiet przekazywania danych między dwoma działaniami.

Krok 1: Przy pierwszej aktywności

Bundle b=new Bundle();

b.putString("mkv",anystring);

Intent in=new Intent(getApplicationContext(),secondActivity.class);

in.putExtras(b);

startActivity(in);

Krok 2: Przy drugiej aktywności

Intent in=getIntent();

Bundle b=in.getExtras();

String s=b.getString("mkv");

Myślę, że jest to przydatne dla Ciebie ...........

Mahendra Kumar Verma
źródło
0

Pakiet służy nie tylko do przesyłania danych między dwoma różnymi komponentami, ale co ważniejsze, służy do przywracania wartości przechowywanych przed zniszczeniem działania do nowego działania.

takich jak tekst w EditTextwidżecie lub pozycja przewijania w ListView.

Ajay Takur
źródło
0

Pierwsza aktywność:

String food = (String)((Spinner)findViewById(R.id.food)).getSelectedItem();
RadioButton rb = (RadioButton) findViewById(R.id.rb);
Intent i = new Intent(this,secondActivity.class);
i.putExtra("food",food);
i.putExtra("rb",rb.isChecked());

Druga aktywność:

String food = getIntent().getExtras().getString("food");
Boolean rb = getIntent().getExtras().getBoolean("rb");
Bednarz
źródło
1
Możesz także zapoznać się z przykładami minimalnymi, kompletnymi i weryfikowalnymi .
Daniel Corzo,