• 12-09-2017, 18:58:08
    #1
    Merhaba, internetten videolar izleyerek bir şekilde " SharedPreferences.Editor editor=preferences.edit(); " kullanarak veriyi kaydetmeyi halletim. Şimdi benim istediğim şey şu, ben istiyorum ki kaydettiği verinin üzerine yazmasın, bir alt satırına devam etsin ve ben orada o aradığım değer varmı diye kontrol edeyim.

    Mesela uygulama açılınca 1 rakamını kaydetti kapatıp açılınca uygulama 2 rakamını gösterip kaydedince 1 in üzerine kaydediyor. Fakat ben bunu istemioyorum. Ozamana kadar bulduğu her şeyi bir yere kaydetmesini istiyorum. Ordanda belirlediğim bir rakam varmı yokmu kontrol etmek istiyorum.

    Yeni başladım bundan dolayı olabildiğince basit açıklarsanız sevinirim.
  • 12-09-2017, 19:54:23
    #2
    Üyeliği durduruldu
    shared preferences aynı değişken için her zaman üzerine yazacaktır bunu değiştiremezsin. Veritabanı tam da yapmak istediğin şey için var
    https://developer.android.com/traini...databases.html

    Eğer ben bunlardan bişey anlamıyorum dersen önce database mantıgını ogrenmen işini
    kolaylaştırabilir.
    https://www.w3schools.com/sql/default.asp

    Shared preferences ın kullanım amacı genelde tek kontrollü işler için vardır mesela uygulama ilk acıldıgında kamera izni yoktur bir shared preferences degiskeni false yaparsın ve izin almak icin sorarsın. izni aldıgın zaman o degiskeni true yaparsın, o değer true iken de izni asla sormazsın cunku daha onceden izin verilmistir
  • 12-09-2017, 23:16:41
    #3
    Merhabalar,

    Söylediğiniz SharedPreferences'te mümkündür, şöyle ki kendinizce bir string patternı belirlemeniz gerekmektedir. Örneğin;

    Sayilar değişkeninde uygulama açıldığında oluşturduğunuz sayı olsun. Yalnız int(Integer) veri tipinde değer tutamazsınız bu yöntemde.

    Aşağıda verdiğimiz örnekte normalde String değişkenine nasıl normal bir değer tanımlıyorsak, öylesine yazıyorum.

    String Sayilar = "1";

    Şimdi sizin istediğiniz oluşturduğunuz iki farklı rakamı da Sayilar değişkenine tanımlıyoruz.

    String Sayilar = "1,2";

    Burada yaşayacağınız problem ve çözmeniz gereken durum şunlardır.

    - Sayilar değişkenine bir veri kayıt etmeden önce string düzenleme işlemi yaparak(Split ya da Contains işlemi), kayıt edeceğiniz veri değişkenin içinde var mı yok mu kontrol etmek.
    - Eğer Sayilar değişkeni içerisinde kayıt edeceğiniz yeni rakam yok ise ve kayıt etmek istiyorsanız;

    String Sayilar += ",4";

    Gibi bir String birleştirme ifadesi ile String'inizin son hali şöyle olacaktır.

    String Sayilar = "1,2,4";

    Stringde "Contains" ("Contains, Türkçe'de 'İçeriyor mu?' anlamına gelmektedir.") methodu vardır, bu şu işe yarar, "sana arattıracağım veri, şu değişkenin içinde var mı?".

    Kullanımı şu şekildedir;

    Sayilar.contains("4");

    Yukarıda şunu demek istedik, Sayilar değişkenin içinde "4" var mı? Var ise True yok ise False döndürecektir. Method boolean değer döndürüyor bu arada, şu şekilde kullanabilirsiniz;

    if(Sayilar.contains("4")){
    //True döneceği için buraya girecek, gerekli işlemleri yapın.
    }else{
    //4 içermiyorsa buraya girecektir, gereken işlemleri yapın.
    }

    İstediğiniz cevabı tam olarak vermiyorum çünkü String birleştirme, String çözme gibi işlemleri kendiniz araştırmanız, anlamanız ve kavramanız gerekiyor sizin gelişiminiz açısından.

    Sorunuz olursa iletişime geçmekten çekinmeyin lütfen.

    İyi çalışmalar.

    Düzeltme: Yukarıda verdiğim örnekte sadece 0'dan 9'a kadar olan sayıları kullanarak uygulayabilirsiniz çünkü Sayilar değişkeninde "0,1,34" olsaydı, yani 4 olmasaydı ama siz Sayilar.contains("4") olarak sorgu yapsaydınız gene True dönecekti çünkü 34 sayısının içinde de 4 rakamı geçiyor. Eğer 9'dan büyük sayıları da içerecekse "Split" işlemi tam size göre, yukarıda biraz mantık kavramış olursunuz, "Split" işlemini aratarak ve denemeler yaparak sorununuzu çözebilirsiniz.
  • 13-09-2017, 00:05:20
    #4
    BondArcher adlı üyeden alıntı: mesajı görüntüle
    shared preferences aynı değişken için her zaman üzerine yazacaktır bunu değiştiremezsin. Veritabanı tam da yapmak istediğin şey için var
    https://developer.android.com/traini...databases.html

    Eğer ben bunlardan bişey anlamıyorum dersen önce database mantıgını ogrenmen işini
    kolaylaştırabilir.
    https://www.w3schools.com/sql/default.asp

    Shared preferences ın kullanım amacı genelde tek kontrollü işler için vardır mesela uygulama ilk acıldıgında kamera izni yoktur bir shared preferences degiskeni false yaparsın ve izin almak icin sorarsın. izni aldıgın zaman o degiskeni true yaparsın, o değer true iken de izni asla sormazsın cunku daha onceden izin verilmistir
    Şuan sqllite videolarını izlemeye başladım

    --R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 00:05:20 -->-> Daha önceki mesaj 00:04:01 --

    egebit adlı üyeden alıntı: mesajı görüntüle
    Merhabalar,

    Söylediğiniz SharedPreferences'te mümkündür, şöyle ki kendinizce bir string patternı belirlemeniz gerekmektedir. Örneğin;

    Sayilar değişkeninde uygulama açıldığında oluşturduğunuz sayı olsun. Yalnız int(Integer) veri tipinde değer tutamazsınız bu yöntemde.

    Aşağıda verdiğimiz örnekte normalde String değişkenine nasıl normal bir değer tanımlıyorsak, öylesine yazıyorum.

    String Sayilar = "1";

    Şimdi sizin istediğiniz oluşturduğunuz iki farklı rakamı da Sayilar değişkenine tanımlıyoruz.

    String Sayilar = "1,2";

    Burada yaşayacağınız problem ve çözmeniz gereken durum şunlardır.

    - Sayilar değişkenine bir veri kayıt etmeden önce string düzenleme işlemi yaparak(Split ya da Contains işlemi), kayıt edeceğiniz veri değişkenin içinde var mı yok mu kontrol etmek.
    - Eğer Sayilar değişkeni içerisinde kayıt edeceğiniz yeni rakam yok ise ve kayıt etmek istiyorsanız;

    String Sayilar += ",4";

    Gibi bir String birleştirme ifadesi ile String'inizin son hali şöyle olacaktır.

    String Sayilar = "1,2,4";

    Stringde "Contains" ("Contains, Türkçe'de 'İçeriyor mu?' anlamına gelmektedir.") methodu vardır, bu şu işe yarar, "sana arattıracağım veri, şu değişkenin içinde var mı?".

    Kullanımı şu şekildedir;

    Sayilar.contains("4");

    Yukarıda şunu demek istedik, Sayilar değişkenin içinde "4" var mı? Var ise True yok ise False döndürecektir. Method boolean değer döndürüyor bu arada, şu şekilde kullanabilirsiniz;

    if(Sayilar.contains("4")){
    //True döneceği için buraya girecek, gerekli işlemleri yapın.
    }else{
    //4 içermiyorsa buraya girecektir, gereken işlemleri yapın.
    }

    İstediğiniz cevabı tam olarak vermiyorum çünkü String birleştirme, String çözme gibi işlemleri kendiniz araştırmanız, anlamanız ve kavramanız gerekiyor sizin gelişiminiz açısından.

    Sorunuz olursa iletişime geçmekten çekinmeyin lütfen.

    İyi çalışmalar.

    Düzeltme: Yukarıda verdiğim örnekte sadece 0'dan 9'a kadar olan sayıları kullanarak uygulayabilirsiniz çünkü Sayilar değişkeninde "0,1,34" olsaydı, yani 4 olmasaydı ama siz Sayilar.contains("4") olarak sorgu yapsaydınız gene True dönecekti çünkü 34 sayısının içinde de 4 rakamı geçiyor. Eğer 9'dan büyük sayıları da içerecekse "Split" işlemi tam size göre, yukarıda biraz mantık kavramış olursunuz, "Split" işlemini aratarak ve denemeler yaparak sorununuzu çözebilirsiniz.
    Bu kadar detaylı yazdığınız, zaman ayırdığınız için teşekkürler. Bir önceki arkadaşın veritabanı önermesinden dolayı onu izlemeye başladım eğer yapamazsam sizin yorumunuzu inceleyip araştırıp yapmaya çalışacağım. Tekrardan teşekkürler.
  • 13-09-2017, 00:18:21
    #5
    Üyeliği durduruldu
    egebit adlı üyeden alıntı: mesajı görüntüle
    Merhabalar,

    Söylediğiniz SharedPreferences'te mümkündür, şöyle ki kendinizce bir string patternı belirlemeniz gerekmektedir. Örneğin;

    Sayilar değişkeninde uygulama açıldığında oluşturduğunuz sayı olsun. Yalnız int(Integer) veri tipinde değer tutamazsınız bu yöntemde.

    Aşağıda verdiğimiz örnekte normalde String değişkenine nasıl normal bir değer tanımlıyorsak, öylesine yazıyorum.

    String Sayilar = "1";

    Şimdi sizin istediğiniz oluşturduğunuz iki farklı rakamı da Sayilar değişkenine tanımlıyoruz.

    String Sayilar = "1,2";

    Burada yaşayacağınız problem ve çözmeniz gereken durum şunlardır.

    - Sayilar değişkenine bir veri kayıt etmeden önce string düzenleme işlemi yaparak(Split ya da Contains işlemi), kayıt edeceğiniz veri değişkenin içinde var mı yok mu kontrol etmek.
    - Eğer Sayilar değişkeni içerisinde kayıt edeceğiniz yeni rakam yok ise ve kayıt etmek istiyorsanız;

    String Sayilar += ",4";

    Gibi bir String birleştirme ifadesi ile String'inizin son hali şöyle olacaktır.

    String Sayilar = "1,2,4";

    Stringde "Contains" ("Contains, Türkçe'de 'İçeriyor mu?' anlamına gelmektedir.") methodu vardır, bu şu işe yarar, "sana arattıracağım veri, şu değişkenin içinde var mı?".

    Kullanımı şu şekildedir;

    Sayilar.contains("4");

    Yukarıda şunu demek istedik, Sayilar değişkenin içinde "4" var mı? Var ise True yok ise False döndürecektir. Method boolean değer döndürüyor bu arada, şu şekilde kullanabilirsiniz;

    if(Sayilar.contains("4")){
    //True döneceği için buraya girecek, gerekli işlemleri yapın.
    }else{
    //4 içermiyorsa buraya girecektir, gereken işlemleri yapın.
    }

    İstediğiniz cevabı tam olarak vermiyorum çünkü String birleştirme, String çözme gibi işlemleri kendiniz araştırmanız, anlamanız ve kavramanız gerekiyor sizin gelişiminiz açısından.

    Sorunuz olursa iletişime geçmekten çekinmeyin lütfen.

    İyi çalışmalar.

    Düzeltme: Yukarıda verdiğim örnekte sadece 0'dan 9'a kadar olan sayıları kullanarak uygulayabilirsiniz çünkü Sayilar değişkeninde "0,1,34" olsaydı, yani 4 olmasaydı ama siz Sayilar.contains("4") olarak sorgu yapsaydınız gene True dönecekti çünkü 34 sayısının içinde de 4 rakamı geçiyor. Eğer 9'dan büyük sayıları da içerecekse "Split" işlemi tam size göre, yukarıda biraz mantık kavramış olursunuz, "Split" işlemini aratarak ve denemeler yaparak sorununuzu çözebilirsiniz.
    Hocam kusura bakmayın ama bu ameleliktir ve dalga gecilir, dediğiniz gibi 0 dan 9 a kadar kullanabilirsiniz ve sadece integer kullanabilirsiniz bununla .
    + veritabanındaki işlemler (veritabanı baglantısı kurmak haricinde) çok daha hızlıdır.
  • 13-09-2017, 00:59:08
    #6
    Niyetiniz sadece integer değer saklamaksa eğer kaydederken int değerini ve isim olarakta değerin stringini girersiniz. Böylece her veri farklı bir isimle kaydedilmiş olur. Verileri geri çekerken de bir for döndürürsünüz null değer gelen kadar verileri çeker. Veri tabanına göre daha kolay olacağını düşünüyorum.
  • 13-09-2017, 01:47:29
    #7
    BondArcher adlı üyeden alıntı: mesajı görüntüle
    Hocam kusura bakmayın ama bu ameleliktir ve dalga gecilir, dediğiniz gibi 0 dan 9 a kadar kullanabilirsiniz ve sadece integer kullanabilirsiniz bununla .
    + veritabanındaki işlemler (veritabanı baglantısı kurmak haricinde) çok daha hızlıdır.
    Estağfurullah, zaten optimize bir yöntem değildir fakat bunu anlattığımız kişi amatör düzeyde ve veritabanı kurması için bir sınıf oluşturup extend ve override etmesi gereken methodlar var, bunu videodan izleyip, uygulayabilir ama mantığını şu aşamada anlayamama ihtimali benim anlattığım methoda göre çok daha fazla, onun için basit bir yöntem seçtim. Burada dediğim sebepten ötürü en hızlı ve en optimize yöntemi tartışmamamız gerekiyor şu aşamada.

    Tecrübe ile birlikte zamanla zaten kendisi karar verebilecektir hangi yöntemi uygulayacağına.