Bu örnekte bir sınıf türünden oluşturulmuş olan listelerin activity’ ler arası Serializable yöntemiyle nasıl transfer edileceğini göreceksiniz.
Android platformunda Serializable, nesnelerin serileştirilmesini sağlamak için kullanılan bir arayüzdür. Nesnelerin serileştirilmesi, bir nesnenin bellekteki durumunu, veri akışında veya dosyada saklanabilir bir veri yapısına dönüştürerek geçici veya kalıcı olarak depolamayı sağlar. Android uygulamalarında Serializable arayüzü, veri aktarımı veya uygulama durumunun korunması için kullanılır.
Serializable arayüzü, Java platformunda da kullanılabilir ve tüm nesnelerin serileştirilmesini sağlayabilir. Ancak, Android platformunda Serializable arayüzü, genellikle basit veri nesneleri veya veri yapısına sahip nesnelerin serileştirilmesi için kullanılır. Örneğin, bir Android uygulamasında, kullanıcının profil bilgileri gibi basit verilerin serileştirilmesi ve bir sonraki açılışta tekrar yüklenmesi için Serializable kullanılabilir.
Bunun yanı sıra, Serializable arayüzü, Android uygulamalarında veri aktarımı için de kullanılabilir. Örneğin, bir uygulama, Bluetooth veya Wi-Fi üzerinden başka bir cihaza veri aktarmak istediğinde Serializable kullanılabilir. Bu durumda, nesneler serileştirilerek veri akışına yazılabilir ve diğer cihaza gönderilebilir.
Serializable arayüzü, Android uygulamalarında nesnelerin serileştirilmesi için kullanışlı bir araçtır. Ancak, Serializable arayüzü, Parcelable arayüzüne göre daha yavaş çalışabilir ve nesne verilerinin daha fazla bellek kullanımına neden olabilir. Bu nedenle, Android uygulamalarında Serializable yerine Parcelable arayüzü tercih edilebilir, özellikle performans önemli olduğunda.
Örneğimizde bir Mekan sınıfı oluşturarak Mekan türünde bir liste oluşturacağız. Ve liste öğelerinin activity’ ler arası transferini gerçekleştireceğiz.
Mekan.java dosyamız:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | package com.example.intenttarihiyerler; import java.io.Serializable; public class Mekan implements Serializable { int resim; String ad; String aciklama; public Mekan(int resim, String ad, String aciklama) { this.resim = resim; this.ad = ad; this.aciklama = aciklama; } public int getResim() { return resim; } public void setResim(int resim) { this.resim = resim; } public String getAd() { return ad; } public void setAd(String ad) { this.ad = ad; } public String getAciklama() { return aciklama; } public void setAciklama(String aciklama) { this.aciklama = aciklama; } } |
Burada dikkat edilmesi geren nokta Serializable arayüzünün implement edilmesidir.

activity_main.xml tasarımında 3 adet Button bulunmaktadır:

activity_detail.xml dosyamızda ImageView ve TextView denetimleri eklenecektir.

strings.xml dosyamız:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | <resources> <string name="app_name">IntentTarihiYerler</string> <string name="aciklama_galata">Galata Kulesi ya da müze olarak kullanılmaya başlaması sonrasındaki adıyla Galata Müzesi, İstanbul\'un Beyoğlu ilçesinde bulunan bir kuledir. Adını, bulunduğu Galata semtinden alır. \n\n Galata Surları dahilinde bir gözetleme kulesi olarak inşa edilen kule, farklı dönemlerde farklı amaçlarla kullanılmasının ardından 2020\'den itibaren, bir sergi mekânı ve müze olarak hizmet verir. Hem Beyoğlu\'nun hem de İstanbul\'un sembol yapılarındandır. \n\nBizans İmparatorluğu ile ittifak hâlinde olan Cenevizliler 1267\'de, Haliç\'in kuzeyinde bulunan Galata\'da \"Pera\" adlı bir koloni kurmuş, bu koloninin hâkimiyet alanını da zaman içinde Bizans tarafından verilen izinlerle genişletmişti. Tepesindeki haçtan ötürü o dönem \"Kutsal Haç Kulesi\" (Turris Sancte Crucis) olarak adlandırılan kule, bu izinlere aykırı bir şekilde kuzeydoğu yönündeki tepeye doğru hâkimiyet alanı arttırılarak 1335-1349 yılları arasında bölgede yapılan tahkimatın bir parçası olarak inşa edildi.</string> <string name="aciklama_ayasofya">Ayasofya (anlamı: \"Kutsal Bilgelik\"; Grekçe: Ἁγία Σοφία, romanize: Agia Sofia), eski adıyla Kutsal Bilgelik Kilisesi ve Ayasofya Müzesi veya günümüzdeki resmî adıyla Ayasofya-i Kebîr Câmi-i Şerîfi (Kutsal Büyük Ayasofya Camii), İstanbul\'da yer alan bir cami ve eski bazilika, katedral ve müzedir.\n\n Bizans İmparatoru I. Justinianus tarafından, 532-537 yılları arasında İstanbul\'un tarihî yarımadasındaki eski şehir merkezine inşa ettirilmiş bazilika planlı bir patrik katedrali olmuştur. 1453 yılında İstanbul\'un Osmanlılar tarafından fethedilmesinden sonra II. Mehmed tarafından camiye dönüştürülmüştür. Mustafa Kemal Atatürk tarafından 1934 yılında yayımlanan Bakanlar Kurulu Kararnamesi ile müzeye dönüştürülmüş, kazı ve tadilat çalışmaları başlatılmış ve 1935\'ten 2020\'ye kadar müze olarak hizmet vermiştir.\n\n 2020 yılında ise müze statüsü iptal edilerek cami statüsü verilmiştir.\n\n Bizans İmparatorluğu döneminde Ayasofya, büyük bir \"kutsal emanetler\" zenginliğine sahipti. Bu emanetlerden biri de 15 metre yüksekliğindeki gümüş ikonostasis idi. Konstantinopolis Patriği\'nin kilisesi ve Doğu Ortodoks Kilisesi\'nin 1000 yıl boyunca merkezi olan Ayasofya, 1054 yılında Patrik I. Mihail\'in Papa IX. Leo tarafından aforoz edilmesine şahitlik etmiş olup, bu olay, genel olarak \"Schisma\"nın, yani Hristiyanlık tarihindeki en önemli olaylardan biri olan Doğu ve Batı kiliselerinin ayrılmasının başlangıcı sayılır. </string> <string name="aciklama_kucuk_su">Küçüksu Kasrı veya Göksu Kasrı, İstanbul\'un Küçüksu semtinde, Göksu Deresi ile Küçüksu Deresi arasında, Boğaziçi\'nde Üsküdar-Beykoz sahilyolu üzerinde yer alan kasır. \n\nSultan Abdülmecit tarafından[1] Nigoğos Balyan\'a yaptırılmış, inşaatı 1856 yılında tamamlanmıştır. \n\nEski adı "Göksu Kasrı" olan bu yapı, padişahların, Boğaziçi kıyılarındaki biniş kasırlarından biridir. \n\nKasırlar sadece hünkârların malı sayılan ve sarayların haricinde inşa edilen, köşkten büyük binalardır. \n\nDevamlı ikamet için kullanılmayan kasırlar, padişahların dinlenmeleri için vakit geçirdikleri yerdir.</string> </resources> |
MainActivity.java dosyamız:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | package com.example.intenttarihiyerler; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import java.util.ArrayList; public class MainActivity extends AppCompatActivity { ArrayList<Mekan> liste=new ArrayList<Mekan>(); Button btnAyasofya,btnGalata,btnKucuksu; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btnAyasofya=findViewById(R.id.button_ayasofya); btnGalata=findViewById(R.id.button_galata); btnKucuksu=findViewById(R.id.button_kucuksu); liste.add(new Mekan(R.drawable.ayasofya,"Ayasofya Cami",getResources().getString(R.string.aciklama_ayasofya))); liste.add(new Mekan(R.drawable.galata,"Galata Kulesi",getResources().getString(R.string.aciklama_galata))); liste.add(new Mekan(R.drawable.kucuksu,"Küçüksu Kasrı",getResources().getString(R.string.aciklama_kucuk_su))); btnAyasofya.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { DetayGoster(0); } }); btnGalata.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { DetayGoster(1); } }); btnKucuksu.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { DetayGoster(2); } }); } private void DetayGoster(int i) { Intent intent=new Intent(MainActivity.this,DetailActivity.class); intent.putExtra("index",liste.get(i)); startActivity(intent); } } |
DetailActivity.java dosyamız:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | package com.example.intenttarihiyerler; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.ImageView; import android.widget.TextView; public class DetailActivity extends AppCompatActivity { ImageView imageView; TextView textViewBaslik,textViewAciklama; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_detail); imageView=findViewById(R.id.iv_mekan_resim); textViewBaslik=findViewById(R.id.tv_baslik); textViewAciklama=findViewById(R.id.tv_aciklama); Mekan mekan = (Mekan) getIntent().getSerializableExtra("index"); imageView.setImageResource(mekan.getResim()); textViewBaslik.setText(mekan.getAd()); textViewAciklama.setText(mekan.getAciklama()); } } |
getSerializableExtra, bir Android Intent nesnesiyle birlikte gönderilen serileştirilmiş bir nesneyi alma yöntemidir.
Android uygulamalarında, bir aktiviteden diğerine veya bir servisten bir aktiviteye veri aktarmak için Intents kullanılır. Bu veriler, genellikle basit veri tipleri (örneğin, tamsayılar veya metinler) olabilir. Ancak, bazen daha karmaşık veri tipleri (örneğin, özel bir sınıf nesnesi) de aktarılması gerekebilir.
Bir özel sınıf nesnesi, Serializable arayüzünü uygulayarak serileştirilebilir hale getirilebilir. Böylece, bu nesne bir Intent nesnesiyle birlikte gönderilebilir. Daha sonra, hedef aktivitede veya serviste bu serileştirilmiş nesne getSerializableExtra yöntemi kullanılarak alınabilir.
Bu yöntem, serileştirilmiş bir nesne almak için kullanılan en basit yöntemlerden biridir. Ancak, veri boyutu büyük olduğunda veya performansın önemli olduğu durumlarda Parcelable arayüzünü kullanmak daha uygun olabilir.
Ekran Çıktısı:
