Android Firebase Veritabanı Okuma ve Yazma

Sizlere bu örneğimde, Firebase Veritabanına Veri Ekleme ve Verileri Listeleme örnek çalışmaya değineceğim. Yararlı Olması dileklerimle...

Yeni bir çalışma açıp ve MainActivity içerisine btnEkle ve btnListele isimlerinde iki adet buton oluşturuyorum.

activity_main.xml kaynak kodları aşağıdaki gibidir;

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.serifgungor.firebasedatabase.Activity.MainActivity"> <Button
android:id="@+id/btnEkle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_marginTop="25dp"
android:text="Ekle" /> <Button
android:id="@+id/btnListele"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentStart="true"
android:layout_below="@+id/btnEkle"
android:layout_marginTop="30dp"
android:text="Listele" /> </RelativeLayout>

MainActivity class'ında ise kodlarım şu şekilde; (Kayıt ve Listeleme amacıyla KayitActivity ve ListeleActivity sayfalarıma yönlendiriyorum)

import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase; public class MainActivity extends AppCompatActivity { Button btnEkle,btnListele; @Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btnEkle = (Button)findViewById(R.id.btnEkle); btnListele = (Button)findViewById(R.id.btnListele); btnEkle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(MainActivity.this,KayitActivity.class));
}
}); btnListele.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(MainActivity.this,ListeleActivity.class));
}
}); } }

Model üretimiyle başlıyoruz, Projeniz içerisine Model paketi oluşturup User isminde class oluşturunuz. (Kapsülleme yapınız);

public class User {
	private String email;
	private String sifre;
	private String ad;
	private String soyad;

	public User(){}
	public User(String email, String sifre, String ad, String soyad) {
this.email = email;
this.sifre = sifre;
this.ad = ad;
this.soyad = soyad;
} public String getEmail() {
return email;
} public void setEmail(String email) {
this.email = email;
} public String getSifre() {
return sifre;
} public void setSifre(String sifre) {
this.sifre = sifre;
} public String getAd() {
return ad;
} public void setAd(String ad) {
this.ad = ad;
} public String getSoyad() {
return soyad;
} public void setSoyad(String soyad) {
this.soyad = soyad;
} }

KayitActivity.java için kodlarımız (Layout kısmını paylaşmıyorum);

import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.serifgungor.firebasedatabase.R;
import com.serifgungor.firebasedatabase.Model.User; public class KayitActivity extends AppCompatActivity { EditText etEmail,etSifre,etAd,etSoyad; Button btnKayit; @Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_kayit); btnKayit = (Button)findViewById(R.id.btnUyeKaydet);
etEmail = (EditText)findViewById(R.id.etEmail);
etSifre = (EditText)findViewById(R.id.etPassword);
etAd = (EditText)findViewById(R.id.etAd);
etSoyad = (EditText)findViewById(R.id.etSoyad); btnKayit.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { DatabaseReference dbRef = FirebaseDatabase.getInstance().getReference().child("users"); dbRef.push().setValue( new User(
etEmail.getText().toString(),
etSifre.getText().toString(),
etAd.getText().toString(),
etSoyad.getText().toString()
) );

finish(); } }); } }

Burada DatabaseReference sayesinde, users isimli tabloya veri ekleme işlemi yapıyoruz. users tablosu yoksa sistem ilgili tabloyu kendisi eklemektedir. İlgili tablo kolonları da yine aynı şekilde.

dbRef nesnesi üzerinde bulunan push().setValue() dediğimizde, setValue içerisine object gönderebiliyoruz. Gönderdiğimiz object users isminde oluşturulmuş json'ın elemanı oluyor.

Firebase'in en güzel yanı, bir web service üzerine iki satır kadar kısa şekilde kolay bir kullanımı olan veri ekleme şeklini kavrayabiliyorsunuz.

ListeleActivity.java için kodlarımız (Layout kısmını paylaşmıyorum);

public class ListeleActivity extends AppCompatActivity {
	Button btnUyeleriListele;
GridView gridView;
ArrayList<User> uyeler;
GridAdapter gridAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.activity_listele); uyeler = new ArrayList<>();
btnUyeleriListele = (Button) findViewById(R.id.btnUyeleriListele);
gridView = (GridView) findViewById(R.id.gridView);
gridAdapter = new GridAdapter(this, uyeler); btnUyeleriListele.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
gridView.setAdapter(gridAdapter);
}
}); FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference(); myRef.child("users").addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { for (DataSnapshot snapshot : dataSnapshot.getChildren()) { User user = snapshot.getValue(User.class); uyeler.add(
new User(
user.getEmail(),
user.getSifre(),
user.getAd(),
user.getSoyad(),
user.getResim()
)
); } } @Override public void onCancelled(DatabaseError databaseError) {} }); } }

Listeleme kısmında myRef.child().addValueEventListener oluşturup, onDataChange metodu içerisinde argüman olarak bulunan DataShapshot bize ilgili tablodaki satırları dönmeyi sağlamaktadır.

Bu makaleyi paylaşın:

3 Comments

  1. ömer aydemir2018-08-30 18:43:23

    Hocam selamlar, makalenizden faydalanarak uygulamam için Database oluşturmaya çalışıyorum oldukça yardımcı oldu teşekkür ederim, ancak bir hatayla karşılaşıyorum, "users" tablosuyla ilgili bir problem çıkıyor sanırım. Hatanın çıktığı satır şöyle; DatabaseReference dbRef = FirebaseDatabase.getInstance().getReference().child("users"); Logcat de haldığım mesaj ise şu; Bahsi geçen java:33 satırı yukarıdaki satır oluyor 08-30 18:36:00.756 16297-16297/com.professor.omernasuhiaydemir.professor E/AndroidRuntime: FATAL EXCEPTION: main Process: com.professor.omernasuhiaydemir.professor, PID: 16297 java.lang.NoSuchMethodError: No virtual method zzbqo()Z in class Lcom/google/firebase/FirebaseApp; or its super classes (declaration of 'com.google.firebase.FirebaseApp' appears in /data/app/com.professor.omernasuhiaydemir.professor-_4LtZDWhZbo4SiFZ93f71Q==/split_lib_dependencies_apk.apk) at com.google.firebase.database.FirebaseDatabase.getInstance(Unknown Source:128) at com.google.firebase.database.FirebaseDatabase.getInstance(Unknown Source:22) at com.professor.omernasuhiaydemir.professor.KisiselBilgiler$1.onClick(KisiselBilgiler.java:33) at android.view.View.performClick(View.java:6294) at android.view.View$PerformClick.run(View.java:24774) at android.os.Handler.handleCallback(Handler.java:790) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:172) at android.app.ActivityThread.main(ActivityThread.java:6590) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) Konuyla ilgili görüşünüzü paylaşabilirseniz çok sevinirim şimdiden teşekkürler.

Bir yorum bırakın