Android Dersleri – 41 – Firebase Kullanımı – 4

By | 16 Ekim 2020

Android Dersleri serimizin Firebase Kullanımı – 4 dersine hoş geldiniz. Bu dersimizde birçok veriyi nasıl ekrana listeleyebileceğimizi gösteren basit bir uygulama yapacağız. Daha sonra da veri filtreleme ve listeleme işlemlerinin nasıl yapıldığını görmüş olacağız.

SHOW butonuna basıldığında users dizini/çocuğu altındaki diğer tüm verileri çeken ve ekranda bastıran basit bir uygulama görmektesiniz. Uygulamanın kodları aşağıda yer almaktadır.

Activity_main.xml dosyası;

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:orientation="vertical"
    android:padding="16dp"
    android:gravity="center"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/btn_show"
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:text="show"/>
    
    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:fillViewport="true">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <TextView
                android:id="@+id/txt_show"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:textAlignment="center"
                android:padding="20dp"
                android:hint="- - -"/>

        </LinearLayout>

    </ScrollView>

</LinearLayout>

MainActivity.java dosyası;

package com.mrcaracal.ders41;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;

public class MainActivity extends AppCompatActivity {

    Button btn_show;
    TextView txt_show;

    FirebaseDatabase firebaseDatabse = FirebaseDatabase.getInstance();
    DatabaseReference databaseReferenceRead;

    private void init(){
        btn_show = findViewById(R.id.btn_show);
        txt_show = findViewById(R.id.txt_show);
    }

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

        btn_show.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                show();
            }
        });
    }

    private void show() {
        databaseReferenceRead = firebaseDatabse.getReference().child("users");

        ValueEventListener valueEventListener = new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                String s = "";
                for (DataSnapshot dataSnapshot : snapshot.getChildren()){
                    s = s + "\n" + "E-Mail : "+dataSnapshot.child("email").getValue().toString()+"\n"+
                            "Username : "+dataSnapshot.child("username").getValue().toString()+"\n";
                }
                txt_show.setText(s);
            }

            @Override
            public void onCancelled(@NonNull DatabaseError error) {

            }
        };
        databaseReferenceRead.addValueEventListener(valueEventListener);
    }
}

Burada SHOW butonuna tıklanması halinde users çocuğuna eriştik ve ValueEventListener ile oradaki tüm çocukları çekip ekrana bastırdık.

NOT : İlk görselde görüldüğü gibi veritabanımızda daha önceden bazı veriler bulunmaktaydı. Bu örneği yaparken veritabanınıza o verileri elle girebilir ya da Android Dersleri – 39 – Firebase Kullanımı – 2 dersinde veri kaydetme işleminin nasıl yapıldığını tekrardan inceleyip kendiniz veriler ekleyebilirsiniz.

Veri Filtreleme ve Listeleme

Tüm verileri erişip bunları çağırmayı öğrendik ama verilerin istediğimiz şekilde nasıl listeleneceğini  ve sadece istediğimiz verilerin görüntülenmesini nasıl yaparız ona değinelim hemen.

Verileri sıralamak için kullanabileceğimiz metotlar;

orderByChild : Sonuçları belirtilen bir alt anahtarın veya iç içe geçmiş alt yolun değerine göre sıralar.
orderByKey : Sonuçları alt anahtara göre sıralar.
orderByValue : Sonuçları alt değere göre sıralar.

Verileri filtrelemek için kullanabileceğimiz metotlar;

limitToFirst : Sonuç listesinin başından beri döndürülecek olan maximum öğe sayısını belirler.
limitToLast : Sonuç listesinin sonundan beri döndürülecek olan maximum öğe sayısını belirler.
startAt : Belirtilen anahtara veya değere eşit veya ondan büyük öğeleri döndürür.
endAt : Belirtilen anahtara veya değere eşit veya ondan küçük öğeleri döndürür.
equalTo : Belirtilen anahtara veya değere eşit öğeleri döndürür.

Kullanabileceğimiz metotları gördük şimdi bunlardan faydalanarak bir uygulama yapalım.

Öncelikle elimizdeki veritabanını görelim.

Görselde görüldüğü üzere JSON formatında veritabanımız yer almaktadır. Biliyorsunuz ki Firebase verileri bu şekilde tutmaktadır. Görselin sağ tarafında ise temel olarak iskelet yapısını göstermeye çalıştım.

Aşağıda yapacağımız uygulama tamamen bu veriler üzerinden işlem yapacak ve ona göre çıktılar alacağız.

Activity_main.xml dosyası;

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:orientation="vertical"
    android:padding="16dp"
    android:gravity="center"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/btn_show"
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:text="show"/>
    
    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:fillViewport="true">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <TextView
                android:id="@+id/txt_show"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:textAlignment="center"
                android:padding="20dp"
                android:hint="- - -"/>

        </LinearLayout>

    </ScrollView>

</LinearLayout>

MainActivity.java dosyası;

package com.mrcaracal.ders41;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;

public class MainActivity extends AppCompatActivity {

    Button btn_show;
    TextView txt_show;

    FirebaseDatabase firebaseDatabse = FirebaseDatabase.getInstance();
    DatabaseReference databaseReferenceRead = firebaseDatabse.getReference().child("users");

    private void init() {
        btn_show = findViewById(R.id.btn_show);
        txt_show = findViewById(R.id.txt_show);
    }

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

        btn_show.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                show();
            }
        });
    }

    private void show() {

        databaseReferenceRead.limitToLast(3).orderByChild("email").equalTo("A").addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                
                String s = "";
                for (DataSnapshot dataSnapshot : snapshot.getChildren()) {
                    s = s + "\nE-Mail : " + dataSnapshot.child("email").getValue().toString() + "\nUsername : "
                    + dataSnapshot.child("username").getValue().toString() + "\n\n";
                }
                txt_show.setText(""+s);
            }

            @Override
            public void onCancelled(@NonNull DatabaseError error) {

            }
        });
    }
}

ÇIKTISI;

Filtreleyerek listeleme işleminin yapıldığı show metodunun içine baktığımız zaman 3 tane metottan faydalandığımı görürsünüz. Kullanılan metotlar;

limitToLast, orderByChild ve equalTo. Bunların ne olduğunu üst tarafta açıklamıştım zaman. Bunları beraber kullanarak şu sorgulama işleminin yapılmasını sağladım.

Çocuğu email, değer A olan ve sondan itibaren ilk 3 tane veriyi al sadece.

Veritabanımıza baktığımız zaman değer A olan email’lerin sayısının 4 olduğunu görürüz ama limitToLast ile sondan itibaren sadece 3 tanesinin görüntülenmesini sağladık.

Bu dersimizde verileri istediğimiz gibi filtreleyip listelemeyi öğrenmiş olduk. Bir sonraki dersimizde görüşmek üzere.

One thought on “Android Dersleri – 41 – Firebase Kullanımı – 4

  1. hito

    Çok teşekkür ederim. Sürekli araştırıyordum ve kafam karışıyordu. Çok açık ve sade bir şekilde anlatmışsınız sayenizde yapabildim.

    Reply

Bir cevap yazın

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