Android uygulamasında “paket” nedir


Yanıtlar:


278

Paketler genellikle çeşitli Android etkinlikleri arasında veri aktarmak için kullanılır. Hangi tür değerleri iletmek istediğinize bağlıdır, ancak paketler her tür değeri tutabilir ve bunları yeni etkinliğe aktarabilir.

Bu şekilde kullanabilirsiniz:

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

Geçirilen değerleri aşağıdakileri yaparak alabilirsiniz:

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

Daha fazla bilgiyi şu adreste bulabilirsiniz:


3
neden sadece doğrudan System.object ve cast kullanmıyorsunuz?
lovespring

79

BundleVe Intentnesnelerini kullanarak etkinlikler arasında veri aktarımı yapın .


İlk Bundlenesne yaratın

Bundle b = new Bundle();

Ardından, depolanan dize verilerini anystringpaket anahtarıyla ilişkilendirin"myname"

b.putString("myname", anystring);

Şimdi bir Intentnesne oluşturun

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

Paket nesnesini bhedefe iletme

in.putExtras(b);

ve ikinci aktiviteyi başlat

startActivity(in);

İkinci aktivitede, ilk aktiviteden geçen verilere erişmemiz gerekiyor

Intent in = getIntent();

Şimdi, verileri paketten almanız gerekiyor

Bundle b = in.getExtras();

Son olarak, şu anahtarla ilişkili dize verilerinin değerini alın "myname"

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

BU GERÇEKTEN İYİ AYDINLATMA CEVAP, BU İÇİN TEŞEKKÜR EDERİZ.
Abhishek Garg

68

İleride veriyi kendilerine aktarmak için paketlerin etkinlikler tarafından kullanıldığını da eklemeliyim.

Ekran döndüğünde veya başka bir etkinlik başlatıldığında, yöntem protected void onSaveInstanceState(Bundle outState)çağrılır ve etkinlik yok edilir. Daha sonra, etkinliğin başka bir örneği oluşturulur ve public void onCreate(Bundle savedInstanceState)çağrılır. İlk etkinlik örneği oluşturulduğunda, paket null olur; ve paket boş değilse, etkinlik selefi tarafından başlatılan bazı işleri sürdürür.

Android metni otomatik olarak metin alanlarına kaydeder, ancak her şeyi kaydetmez ve bazen küçük hatalar ortaya çıkar.

Bununla birlikte, en yaygın anti-kalıp, onCreate()sadece başlatma olduğunu varsayar . Bu yanlıştır, çünkü aynı zamanda devleti geri yüklemelidir.

Bu "döndürme sırasında etkinliği yeniden oluşturma" davranışını devre dışı bırakma seçeneği vardır, ancak yeniden başlatma ile ilgili hataları önlemez, bunlardan bahsetmek daha zorlaşır.

Etkinlik yok edilecekken çağrılması garanti edilen tek yöntemin de olduğuna dikkat edin onPause(). (Dokümanlardaki aktivite yaşam döngüsü grafiğine bakın.)


Bir eşleme kullanabiliyorsak neden bir paket kullanalım? Teşekkürler Ted!
Ruchir Baronia

4
Paket yalnızca Etkinlik tarafından kullanılmaz. Fragment tarafından döndürüldükten sonra durumları korumak için de kullanılır.
Kai Wang

47

A Bundle, anahtarları değerlerle Mapeşleyen bir Java nesnesine çok benzer String. Etkinlikler ve diğer uygulama bileşenleri arasında bilgi aktarmak için kullanılır. Çerçeve tarafından durum bilgilerini yakalamak ve geri yüklemek için de kullanılır.

Android'in bunun için sade eski Mapnesneleri kullanmamasının nedeni Mapçok esnek olmasıdır; serileştirilemeyen nesneler (örneğin, G / Ç akışları) içerebilir. BundleAPI Paketin içeriği seri olduğu garanti edilir bir şekilde bir gruba eklenir edilebilir nesne türlerini kısıtlar. Android çerçevesi bu özelliğe dayanıyor.

Uygulama Esasları ile ilgili dokümanları okumanızı tavsiye ederim . Bu, diğer şeylerin yanı sıra, paketlerin ve amaçların ne olduğunu ve ne için kullanıldığını açıklar.


14

Paketler, Amaçlar yoluyla bir etkinlikten diğerine rastgele veri göndermek için kullanılabilir. Bir Niyet yayınladığınızda, ilgili Etkinlikler (ve diğer BroadcastRecievers) bu konuda bilgilendirilir. Bir niyet, Paket ile birlikte ekstra veri gönderebilmeniz için bir Paket içerebilir.

Paketler anahtar / değer eşlemeleridir, bu nedenle bir şekilde Hash gibidirler, ancak kesinlikle tek bir String / Foo nesne eşlemesi ile sınırlı değildirler. Yalnızca belirli veri türlerinin "Parçalanabilir" olarak değerlendirildiğini ve Paket API'sında açıkça belirtildiğini unutmayın.


OP'nin sorusuna gerçekten yaklaşan tek cevap bu, yani bir paket nedir. stackoverflow.com/a/6236801/1588163 daha fazla bilgi verir.
clapas

Bir eşleme kullanabiliyorsak neden bir paket kullanalım? Teşekkürler!
Ruchir Baronia

@RuchirBaronia, Bundle nesneleri gerektiren Android API'sının bir kısmına iletmek istemediğiniz sürece bir Paket kullanmanın özel bir nedeni yoktur.
scriptocalypse

8

Sadece bir paket oluşturun,


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);

"This_is_the_next_class.class"

Bunun gibi öğeleri alabilirsiniz.

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);

5

Paket, Etkinlikler arasında veri aktarmak için kullanılır. Bir paket oluşturabilir, daha sonra hedef etkinlikten kullanılabilecek etkinliği başlatan Niyet'e iletebilirsiniz.


3

Paket: - Dize değerlerinden çeşitli Parcelable türlerine eşleme.

Paket genellikle android'in çeşitli etkinlikleri arasında veri iletmek için kullanılır.

onPause () sonra onStop () ve sonra onStop () öğesini onPause () 'a ters sırada çağırdığımızda.

Sistemin önceki durumu geri yüklemek için kullandığı kaydedilmiş verilere "örnek durumu" adı verilir ve bir Bundle nesnesinde depolanan anahtar / değer çiftlerinin bir koleksiyonudur.


Bir haritalama, demetin doğasıdır.
BollMose

2

Paket, etkinlikler arasında veri paylaşmak ve oncreate () yönteminde uygulamanın durumunu kaydetmek için kullanılır, böylece uygulama nerede durdurulduğunu öğrenir ... Umarım yardımcı olur :)


0

niyet nesnesi yardımıyla bir etkinlikten başka bir etkinliğe veri gönderme paketinin kullanılması; Herhangi bir tür olabilen verileri bir arada tutun.

Şimdi, iki aktivite arasında paket veri aktarımının nasıl oluşturulacağını anlatacağım.

Adım 1: İlk aktivite hakkında

Bundle b=new Bundle();

b.putString("mkv",anystring);

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

in.putExtras(b);

startActivity(in);

Adım 2: İkinci Aktivitede

Intent in=getIntent();

Bundle b=in.getExtras();

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

Bunun sizin için yararlı olduğunu düşünüyorum ...........


0

Paket, yalnızca iki farklı bileşen arasında veri aktarmak değil, daha da önemlisi, etkinlik yeni etkinliğe zarar vermeden önce depolanan değerleri geri yüklemek için kullanılır.

EditTextpencere öğesindeki metin veya a'nın kaydırma konumu gibi ListView.


0

İlk aktivite:

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());

İkinci aktivite:

String food = getIntent().getExtras().getString("food");
Boolean rb = getIntent().getExtras().getBoolean("rb");

1
Ayrıca Minimal, Complete ve Doğrulanabilir Örnekler hakkında bilgi edinmek de isteyebilirsiniz .
Daniel Corzo
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.