Arkadaşlar, android de veritabanına uygulama ilk açıldığında bir takım veriler eklemem gerekiyor. Ancak bunu ben onCreate de yaptığımda uygulama her çalıştığında ekleme işlemi gerçekleşiyor. Bu durumun önüne nasıl geçebilirim?

soruldu: 01 Nis '13, 16:42

emax_64's gravatar image

emax_64
64589102101
cevap kabul oranı: 20%

değiştirildi: 01 Nis '13, 16:42

Evet veritabanını oluşturamıyor gibi gözüküyor. Normalde çalışması lazım. Peki Herhangi bir activity de db yi create edince, ordan veri çekebiliyor muydun? Çekebiliyorsan öyle, alttaki sharedpreferences örneği işini görür.Örnek kod yolluyorum.

 public static String LoadPreferencesString(Context con, String key) {
    // ContextWrapper wrapper=new ContextWrapper(con);
    SharedPreferences sharedPreferences = con.getSharedPreferences(
            "yourappname", Context.MODE_PRIVATE);
    String strSavedMem1 = sharedPreferences.getString(key, "");
    return strSavedMem1;
}

public static void SavePreferencesString(Context con, String key, String value) {
    SharedPreferences sharedPreferences = con.getSharedPreferences(
            "yourappname", Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.putString(key, value);
    editor.commit();
}

Bu iki fonksiyonla bir değer kaydet cache. Atıyorum "yaratildimi" key ismi olacak, "evet" value olacak. İlk çalışan activity inde eğer db yi oluşturabilmişsen, bu fonksiyonlarla cache bu kaydı at. Ama db yi oluşturma kodunu bi if in içine al. if de şöyle de :

 if(!LoadPreferencesString(getApplicationContext(),"yaratildimi").eqals("evet")){
 db yi oluştur.....
}
(02 Nis '13, 06:12) yahyacan55 yahyacan55's gravatar image

MainActivity ilk çalışan activity. Bunun oncreate metodunda şunları yazdım , SavePreferencesString(getApplicationContext(),"yaratildiMi","evet");

    if(!LoadPreferencesString(getApplicationContext(),"yaratildiMi").equals("evet")){
         vt = new database(getApplicationContext());
         SorulariEkle(); 
        }

ancak uygulama gene patladı.

(02 Nis '13, 07:34) emax_64 emax_64's gravatar image

application class ını kaldırdın mı? Onu kaldır manifestten. Birde logda yazan hatayı yazarsan daha iyi yardımcı olabilirim

(02 Nis '13, 07:47) yahyacan55 yahyacan55's gravatar image

ewet yanıt vermeden önce kaldırmıştım zaten onu. Şimdi bir sorucam, burada yapmış olduğumuz işlem hatalı değil mi? şöyle ki, onCreate de SavePreferencesString(getApplicationContext(),"yaratildiMi","evet"); bunu yazarak bir tane key-value çifti kayıt ediyoruz. Ve daha sonra if(!LoadPreferencesString(getApplicationContext(),"yaratildiMi").equals("evet")) bunu yazarak kontrol ediyoruz. Uygulama her çalıştığında if içersine girmiycek ? ve her defasında gene oluşturmaya çalışacak.

(02 Nis '13, 07:58) emax_64 emax_64's gravatar image

Save olayını yanlış yerde yapmışsın ondan mantıksız şu an. Patlamasına gelince manifestte şu iznin yoksa patlaması doğaldır:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

if(!LoadPreferencesString(getApplicationContext(),"yaratildiMi").equals("evet")) {db oluştur ve SavePreferencesString(getApplicationContet(),"yaratildiMi","evet")}

bu if daha mantıklı oldu sanırım

(02 Nis '13, 08:01) yahyacan55 yahyacan55's gravatar image

dosyalamaya alternatif olarak konfigrasyon apisini kullanabilirsiniz:

Activity'nin onCreate metodunda:


SharedPreferences ayarlar = getSharedPreferences("dosyaAdi", 0);

if (settings.getBoolean("ilkAcilisMi", true)) {

// sonraki acilislar icin degeri false'a cekiyoruz
ayarlar.edit().putBoolean("ilkAcilisMi", false).commit();

}

permanent link

cevaplandı: 01 Nis '13, 19:56

gturedi's gravatar image

gturedi
2.8k41538
cevap kabul oranı: 26%

değiştirildi: 01 Nis '13, 19:58

@gturedi if (settings.getBoolean("ilkAcilisMi", true)) satırını yazmadan önce değer ataması yapmamız gerekmiyor mu? kodunuzu tam olarak anlayamadım.

(02 Nis '13, 00:50) emax_64 emax_64's gravatar image

yok değer atamanıza gerek yok cunku dikkat edin getBoolean() metodunun ikinci parametresi varsayılan olarak(daha once atama yapılmaması durumu) hangi değeri alacağımızı istiyor.

(02 Nis '13, 08:55) gturedi gturedi's gravatar image

peki manifest te izin vermek gerekiyor mu?

(02 Nis '13, 09:05) emax_64 emax_64's gravatar image

yok gerekmiyor, bence bunları deneyerek görmelisiniz, önce deneyin, hata alırsanız üzerine gidin işin içinden çıkamazsanız sormalasınız, yoksa yavaş ilerlersiniz

(02 Nis '13, 09:27) gturedi gturedi's gravatar image

öyle yapıyorum ancak bir çok hata aldığım için hepsini çözemiyorum.

(02 Nis '13, 09:32) emax_64 emax_64's gravatar image

yardımlarınız için çok tşkler. Sonunda çalıştı :)

(02 Nis '13, 09:38) emax_64 emax_64's gravatar image
6 yorumdan 5 tanesi gösteriliyor hepsini göster

Application sınıfından türeterek bi class oluştur. Bu class ın oncreate inde yapmak istediğin işlemi yaparsan, bu sadece uygulama yüklenirken çalışan bi fonksiyon olduğu için işini görecektir.

permanent link

cevaplandı: 02 Nis '13, 01:37

yahyacan55's gravatar image

yahyacan55
645313
cevap kabul oranı: 21%

değiştirildi: 02 Nis '13, 01:40

Dediğiniz şekilde sınıf tasarladım. Ancak hata almaya başladım. Bu sınıfı mainActivity sınıfı içersinde çağırmak mı lazım? public class Yukleme extends Application { SQLiteDatabase ha; private database vt = null; @Override public void onCreate() { // TODO Auto-generated method stub super.onCreate(); vt = new database(this); //Database oluşturuluyor. SorulariEkle(); //Veritabanına sorular eklendi. }

(02 Nis '13, 02:39) emax_64 emax_64's gravatar image

Bunu manifestte şu şekilde tanımlaman lazım: <application android:name=".YourClassName" android:icon="@drawable/logo" android:label="@string/app_name">

(02 Nis '13, 02:55) yahyacan55 yahyacan55's gravatar image

yeni bir class oluşturdum. Yukleme ismnde. Sonra bunu application dan kalıtladım. onCreate de veritabanı oluşturdum ve verileri ekledim. DAha sonra manifestte <application android:name=".Yukleme" android:icon="@drawable/ic_launcher" android:label="@string/app_name"></application> yukarıdaki gibi tanımlama yaptım. Ancak uygulama açılır açılmaz kapatılıyor.

(02 Nis '13, 03:08) emax_64 emax_64's gravatar image

hata da logda ne yazıyor buraya yazarsan daha iyi yardım edebilirim belki. Birde class ı manifestte application tag inin içine yazarken paket ismiyle yazıp dener misin? Sonra oluşursa yine buraya yazabilir misin?

(02 Nis '13, 03:30) yahyacan55 yahyacan55's gravatar image

bir sürü madde yazıyor LogCat de. Hatalardan bişey anlaşılmıyor ki

(02 Nis '13, 04:01) emax_64 emax_64's gravatar image

logu direk kopyalayıp buraya yapıştırabilir misin?

(02 Nis '13, 04:04) yahyacan55 yahyacan55's gravatar image

resim koyuyorum bunu da mecburen yanıt olarak koyabiliyorum. En altta.

(02 Nis '13, 04:10) emax_64 emax_64's gravatar image

MainActivity 84. satırda ne işlem yapıyorsun orda patlıyor uygulaman

(02 Nis '13, 04:14) yahyacan55 yahyacan55's gravatar image

84.satırda database i okunabilir formatta açıyorum. SQLiteDatabase db = vt.getReadableDatabase();

(02 Nis '13, 04:25) emax_64 emax_64's gravatar image

vt büyük ihtimal null geliyor. Oraya debug koy. Kontrol et oraları

(02 Nis '13, 04:27) yahyacan55 yahyacan55's gravatar image

şimdi bir nokta aklıma takıldı. Yukleme class ında database vt = new database(this); diyerek database i oluşturuyoruz. Yani ilk açıldığında uygulama. Sonra MainActivity de ben veritabanını açmak için, ve eklenen veriler arasından belli kısım veriyi çekmem için bir metodun içersinde database vt = new database(this); diyerek hata mı yapıyorum?

(02 Nis '13, 04:36) emax_64 emax_64's gravatar image

Peki database i oluşturuyor mu kontrol ettin mi? Oraya debug koyup bi baksana?

(02 Nis '13, 04:47) yahyacan55 yahyacan55's gravatar image

eclipse ye yeni alışıyorum o nedenle geç kalabiliyorum cevap vermekte. Evet veritabanı oluşturuluyor. Ancak şu hata var kodda. Şimdi ben kategoriye göre veri çekiyorum. Bunun için kayıtları tek tek geçiyorum. Şu komut ile , while (cursor.moveToNext()) işte burada while içersine girmiyor. Bunun sebebi de veritabanına kayıt işleminin gerçekleşmemiş olmasından. Yani Yukleme classında bir problem var gibi gözüküyor değil mi?

(02 Nis '13, 04:55) emax_64 emax_64's gravatar image

yukleme class ı kod:

public class Yukleme extends Application { SQLiteDatabase ha; private database vt = null; @Override public void onCreate() { // TODO Auto-generated method stub super.onCreate(); vt = new database(this); SorulariEkle(); }

private void SorulariEkle() {
    database.SoruEkle(ha, vt, "asdasd?", "asdsda",
            "asdasd", "wqeq", "qweqwewqe", 1);}
(02 Nis '13, 05:00) emax_64 emax_64's gravatar image

karakter sığmadı alta yeni bi cevap yazdım.Eğer vt yi activity inde daha önceden oluşturabiliyorsan bu kesin işini görür. Tabi bunu yaparsan uygulama ayarlarından verileri temizle deyip , uygulamayı yeniden başlattığında vt de yeniden oluşturulacak. Çünkü cache deki "yaratildimi" değerin silinmiş olacak

(02 Nis '13, 06:14) yahyacan55 yahyacan55's gravatar image
15 yorumdan 5 tanesi gösteriliyor hepsini göster

Veritabanında bir alan daha yarat eklenip, eklenmediğini kontrol et. Eğer eklenmişse, veriyi ekleme gibi. Status gibi (Byte) tipinde Eklenmemişse : 0 - Eklenmişse : 1

permanent link

cevaplandı: 01 Nis '13, 16:46

Turgay%20Can's gravatar image

Turgay Can
8.3k63798
cevap kabul oranı: 18%

değiştirildi: 01 Nis '13, 16:47

bunu veritabanını karıştırmadan programatik olarak çözemezmiyiz?

(01 Nis '13, 16:47) emax_64 emax_64's gravatar image

Bir dosya içinde veritabanına veri eklediğinde, veri yaz, her oncreate işleminde bu sabit dosya içini okursun.

(01 Nis '13, 16:56) Turgay Can Turgay%20Can's gravatar image
Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×817

Soruldu: 01 Nis '13, 16:42

Görüntüleme: 698 kez

Son güncelleme: 02 Nis '13, 15:31

powered by BitNami OSQA