Android :: Sayfalar Arası Veri Aktarımı – 1

Passing data between activities in Android

Android’te sayfalar arasında veri aktarmak için birden fazla yöntem kullanılmaktadır. Sıklıkla kullanılan bir tanesi de bir Bundle oluşturup verilerimizi onun içine depolamak, Bundle‘ı sayfa geçişi için kullanılan Intent‘e eklemek ve hedef sayfadan da Bundle‘ı alıp, içindeki verileri kullanmak. Php’de kullandığımız GET ve POST gibi.

Bundle kullanarak byte, byte array, char, boolean, String, int, long gibi temel türleri gönderebiliriz. Eğer bir Object göndermek istersek de, classımız Parcelable[0] ya da Serializable[1] interface’lerinden birini implement etmelidir.

Örnek bir uygulama üzerinden gidecek olursak, ilk sayfada kullanıcıya ad, yaş ve TC kimlik numaraları soralım ve bunları ikinci bir sayfaya gönderip orada gösterelim. Bunun için sayfaya 3 tane EditText ekleyelim.

android-pass-data-between-activities-001

İlk sayfada formdaki değerleri almak için aşağıdaki satırları kullanıyoruz.

		strName = etName.getText().toString().trim();
		age = Integer.parseInt(etAge.getText().toString().trim());
		strTC = etTC.getText().toString().trim();

Şimdi sıra geldi elimizdeki değerleri ikinci sayfaya göndermeye. Bunun için Bundle class’ından bir instance oluşturuyoruz ve yukarıda almış olduğumuz değerleri bu nesneye ekliyoruz. String eklemek için putString(), int eklemek için putInt()… gibi metodlardan uygun olanları kullanıyoruz. İlk sayfanın kodu aşağıdaki gibi şekillendi.

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class Main extends Activity {
	/** Degiskenler */
	public static String NAME = "name";
	public static String AGE  = "age";
	public static String TC   = "tc";

	private EditText etName, etAge, etTC = null;
	private String strName, strTC = null;
	private int age = -1;
	private Button btnSubmit = null;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		init();
	}

	private void init() {
		/** Formdaki nesnelerin atanmasi */
		etName = (EditText) findViewById(R.id.etName);
		etAge = (EditText) findViewById(R.id.etAge);
		etTC = (EditText) findViewById(R.id.etTC);

		btnSubmit = (Button) findViewById(R.id.btnSubmit);
		btnSubmit.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				clickedSubmit();
			}
		});
	}

	private void clickedSubmit() {
		/** Formdan verileri alalim */
		strName = etName.getText().toString().trim();
		age = Integer.parseInt(etAge.getText().toString().trim());
		strTC = etTC.getText().toString().trim();

		try {
			/** Bundle olusturup verileri bundle'a ekleyelim */
			Bundle extras = new Bundle();
			extras.putString(NAME, strName);
			extras.putString(TC, strTC);
			extras.putInt(AGE, age);

			/** Intent olusturalim */
			Intent intent = new Intent();

			/** Bundle'i intente ekleyelim */
			intent.putExtras(extras);

			/** Yeni sayfayi cagiralim */
			intent.setClass(getApplicationContext(), Second.class);
			startActivity(intent);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

İkinci sayfaya geçip ilk sayfadan gönderilen değerleri almak için de yeni bir Bundle nesnesi oluşturalım. Bu sefer new operatörü ile değil, getIntent().getExtras() ile bu sayfaya gönderilmiş olan ekstra değerleri içeren nesnemizi oluşturuyoruz. Her bir değeri almak için de Bundle classının getString(“key”), getInt(“key”), getBoolean(“key”)… gibi metodlarını kullanacağız. İkinci sayfanın kodu aşağıdaki gibi şekillendi.

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.widget.TextView;

public class Second extends Activity {
	private TextView tvName, tvAge, tvTC = null;
	private String strName, strTC = null;
	private int age = -1;

	private Bundle extras = null;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.second);

		init();
	}

	private void init() {
		/** Textview atamalari */
		tvName = (TextView) findViewById(R.id.tvName);
		tvAge  = (TextView) findViewById(R.id.tvAge);
		tvTC   = (TextView) findViewById(R.id.tvTC);

		/** Renkleri degistirelim */
		tvName.setTextColor(Color.GRAY);
		tvAge.setTextColor(Color.GRAY);
		tvTC.setTextColor(Color.GRAY);

		/** Bir onceki sayfadan verileri alalim */
		extras = getIntent().getExtras();

		/** Verileri alip atamalari yapalim */
		strName = extras.getString(Main.NAME);
		strTC   = extras.getString(Main.TC);
		age     = extras.getInt(Main.AGE);

		/** Aldigimiz verileri ekranda gosterelim */
		tvName.setText(strName);
		tvAge.setText(String.valueOf(age));
		tvTC.setText(strTC);
	}
}

Uygulamayı çalıştırdıktan sonra da aşağıdakine benzer bir ekran görüntüsü elde ediyor olmalıyız.

android-pass-data-between-activities-002

Intent kullanarak sayfalar arasında Object göndermeye de başka bir yazıda değineceğim.

————————–

[0] -> http://developer.android.com/reference/android/os/Parcelable.html

[1] -> http://developer.android.com/reference/java/io/Serializable.html

İlgili olabilecek yazılar:

Java %100 Nesne Yönelimli Bir Programlama Dili Midir?
Java :: Jersey ile RESTful Webservislere Eclipse, Maven ve Apache Tomcat Kullanarak Giriş Yapalım
EcaHack Hackathon @ Android Developer Days 2013 Ardından
Android :: JSON Parse İşlemleri – 2
Android :: JSON Parse İşlemleri – 1


Android :: Sayfalar Arası Veri Aktarımı – 1” yazısına 10 yorum yapılmış.

  1. bunu şu şekilde yapsak acaba bir sıkıntı olur mu?

    ilk sayfada bir değişkeni statik olarak tanımlasak
    public static int degiskenAdi=100;

    diğer sayfadan çağırırken de direk activity sınıfı ismiyle beraber çağırsak.

    MainActivity.degiskenAdi

    şeklinde alsak.

  2. ama aslında size bunu sorduktan sonra anladım ki ;
    Eğer sadece 2 class arası veri gönderilecek ise benim yaptığım gibi olabilir ama 3 class ımız varsa ve 1. ve 2. class lardan 3. bir class ‘a farklı veriler göndereceksek sizin anlattığınız gibi kullanmak gerekiyor. Yazı için teşekkürler.

  3. vestido elsa frozen

    This is very interesting, You’re a very skilled blogger. I have joined your rss feed and look forward to seeking more of your great post. Also, I’ve shared your web site in my social networks!

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

*