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.

İ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.

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
sğl dostum çok işimize yaradı emeğine sağlık
sağolasın kardeş benimde çok işime yaradı…
yenilerini bekliyoruz…..:)))
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.
@taner
Evet o şekilde yapmak da pek ala mümkün. Hatta 3. bir class sadece bunun için kullanılabilir.
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.
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!
Ellrine sağlık dostum.
Java konuları için teşekürler işimi gördü
Güzel bir örnek teşekkürler
Müthiş anlatım, çok teşekkürler.
Teşekkürler Kardeşim Eline sağlık.