Skip to main content

Cursor Loader nasıl kullanılır? Örnek



Neden ihtiyacımız var?
Yanıt basit; çünkü Cursor Loader query fonksiyonunu ve devamında sonuçları işlemeyi arkaplan thread i olarak yapmaktadır. Bu nedenle uzun zaman alan SQlite işlerinde normal thread ler gibi kullanıcı arayüzünü (UI) kilitlememektedir.
Eski yöntemi : Activity.managerQuery.
Ne zaman kullanmamız lazım?
            SQlite tan veri çekeceğimiz her zaman kullanılabilir. Arkaplan işi olduğu için ne kadar sürerse sürsün kullanıcıyı rahatsız eden UI kilitlemeye neden olmayacaktır.
Nasıl kullanılır?

            Başlangıç;
Kullanabilmek için ilk önce Content Provider dan bir query döndürebilmemiz lazım. Hadi basit bir query methodu yazalım. İçerisinde Android telefon modellerinin sıralandığı bir database imizin olduğunu varsayalım. Ve query sonunda bu listenin dönmesini sağlayalım. Bunun dışında query yi yavaşlatmak için kodun içine Thread.sleep() methodunu ekleyelim. Sonuç olarak beş saniye bekledikten sonra databaseden query dönecek özellikle yavaş çalışması için yazılmış bir methodumuz oldu.

    public static CursorLoader getCursorLoader(Context paramContext) {
        Log.i(TAG,"try to block query");
        Thread.sleep(5000); //miliseconds

        String[] a = { Boolean.toString(false) };
        return new CursorLoader(paramContext, Your.URI, ColumnNamesYouWantToQuery, null, null, "_id ASC ");
    }
            Bu query nin aşağıdaki basit listeyi döndürdüğünü varsayalım.
String[]{"Samsung Galaxy S6","HTC One M9","Sony Xperia Z5","LG G4", "Nexus 5X", "Nexus 6P"}
Bu basit listenin dışında database isteğe bağlı olarak farklı kaynaklarda doldurulabilir.
            Kullanım;
Cursor Loader ı implement olarak almış basit bir class yazalım.
CursorLoaderActivity .java
package com.kozaxinan.sekreter;

import android.app.ListActivity;
import android.app.LoaderManager;
import android.content.CursorLoader;
import android.content.Intent;
import android.content.Loader;
import android.database.Cursor;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ListView;

public class CursorLoaderActivity extends ListActivity implements LoaderManager.LoaderCallbacks<Cursor> {

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

    @Override
    protected void onResume() {               
// cursor loader ı tekrar çalıştırmak için
        getLoaderManager().restartLoader(0, null, this);
        super.onResume();
    }


    @Override
    public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) {
       //Burada arkaplan işi olarak istenilen query çağırılır.
        CursorLoader localCursorLoader = getCursorLoader(this);
        return localCursorLoader;
    }

    @Override
    public void onLoadFinished(Loader<Cursor> arg0, Cursor localCursor) {
        //query bittikten sonra onunla istediğimizi yapacağımız yer burası
        localCursor.close();
    }

    @Override                 
    public void onLoaderReset(Loader<Cursor> arg0) {
    }
}

Yeni bir API!!!
            Cursor Loader yeni bir API. Android SDK level 11 den sonra kullanımı var. Fakat Google Android takımı bu yararlı API yi uyumluluk paketine dahil ettiler. (Compatibility/support library)

            Cursor Loader ın Fragment Activity ile çalışma şekli çağırılış açısından farklıdır;           
        getSupportLoaderManager().initLoader(LOADER_ID, null, this);

Bu methodu Fragment ile kullanırken kendi seçtiğimiz bir LOADER_ID vermemiz lazım.
Cursor Loader ı kullanmak çok kolay ve kazandırdıkları uygulamanıza eklerken harcayacağınız zamandan kat ve kat fazladır. Uygulamalarınızda kullanıp sonuçları test ederek görebilirsiniz.

Sinan KOZAK
Elektronik Mühendisi

Comments

Popular posts from this blog

Using Accelerometer when Screen Off

Introduction

Android Phones have a lot of built-in sensor such as gyro, proximity and accelerometer.
Using Accelerometer in Android is a known thing. For listening sensors, class or service needs a SensorEventListener implementation. An Activity is only exists when you are seeing it. When phone enters standby mode, activity which was recently active frozen and restored whenever needed. While this frozen time, activity doesn’t run. Because of that it doesn’t need sensor updates. And Android stop to listen some sensors for power management.

Services have this condition like classes (activity). In contrast to class, a service run every time, even when phone is in standby mode. Therefore Services needs sensor updates for some situations. But android stop to listen some sensor(accelerometer) in some different phones.

There is a solution for that. This is not an exact solution but it work with a lot of phones.

With a BroadcastReceiver listenIntent.ACTION_SCREEN_OFFand register sensor listener a…

Android Telefonlarda Usb Problemi

Telefonum kendi kendine araba moduna girmeye ve şarj sırasında problem yaratmaya başladı. Genel olarak sorun usb portu ile alakalı olduğu kesindi. Telefonu bilgisayara taktığım zaman tanıyamıyor, bazen şarj oluyor bazen olmuyor, bazen takılı değilken bile şarj olduğunu zannediyordu. Sorunu yazılımsal olabilir diye her türlü şeyi denedim ama çözüm olmadı.

Sorunun çözümü olarak internette okuduğum ingilizce kaynaklarda USB portun 4 ve 5 inci pinlerinde gizli olduğunu öğrendim. Telefon 4 ve 5. pinler üzerinde direnç oluşunca (yağ, su, kir vb.) telefon araçta kullanıldığını zannediyor. Donanımsal bu uyarı yazılımsal desteklenmediği için telefon saçmalıyor.

Çözüm ise aslında çok basit ama uygularken dikkatli olmak lazım. Öncelikle kendiniz uğraşmanızı tavsiye etmiyorum. Bir profesyonele danışın yada teknik servise götürün.

CİHAZINIZDA OLUŞABİLECEK PROBLEMLERDE TÜM SORUMLULUK SİZE AİTTİR. BU YAZIDA ANLATTIKLARIM KENDİ TECRÜBELERİM VE YABANCI FORUMLARDAN OKUDUKLARIMDAN İBARETTİR.

1- Ama herşe…

Eclipse'te Android Sanal Makinesi oluşturma

Eclipse'te oluşturduğumuz projeleri denemek için Eclipse'te Android Sanal makinesı oluşturabiliriz. Bu yaptığımız programları önce bilgisayar üzerinde denememiz ve ilk izlenimlerimizi oluşturmamız için önemlidir. Her android sürümü için farklı sanal makine oluşturabileceğimiz için yazdığımız programın farklı sürümlerde nasıl çalıştığını görmemize yardımcı olur.

Bu sanal makineyi önceki yazılarda anlattığımız şekilde kurduğumuz Eclipse'te  bir kaç adımda oluşturabiliriz. Bunun içim aşağıdaki adımları izlememiz yeterli olucaktır.

Windows-> AVD Manager a tıklayalım. Açılan pencerede sağ üstten "New"e basarak yeni sanal makine oluşturacağımız ekrana gelelim.

Burda "Name" kısmına istediğimiz ismi yazabiliriz. Ama tavsiyem oluşturacağınız android sürümü ile alakalı isimler verin. örn: Android 2.1 sürümü için Andro_2.1 şeklinde isim verebilirsiniz.


"Target" kısmında oluşturacağınız sanal makinenin API sini seçmelisiniz.

SD kart kısmına sanal maki…