• 01-11-2020, 14:19:20
    #1
    Merhaba,

    RestAPI kullanarak sunucumdan bir takım veriler çekmekteyim. Bu verilerden bazısı uygulamanın sol menüsünü oluşturuyor. Program arayüzü tabiri ile Navigation Drawer diyebiliriz. Program içerisinde sunucudan çektiğim kategori başlıklarını bir List<String> türü değişkeninde tutuyorum. Verilerin çekildiği kod satırından sonra Menüye ekleme işlemlerinin yapılması için çalışan kodlar NULL dönderiyor. Muhtemelen program akışı hızlı çalıştığı için veriler aktarılmadan diğer satırlara geçiş sağlanıyor. Menüye ekleme işlemini yaptırmadan Toast mesaj ile ekranda veriyi görebiliyorum. Ya da sout ile konsola yazdırabiliyorum. Menüye ekleme işlemini yaparken oluşturduğum List<String> türü değişkenin içini boş gösteriyor ve null veriyor. Veriler çekildikten sonra işlemlerin yapılmasını nasıl sağlayabilirim ? Bu konuda tecrübe eksikliğim mevcut. İlgili ve bilgili arkadaşlardan yardım istiyorum.

    Teşekkürler









    Aşağıda ki resimde altınız çizdiğim alan null dönderiyor. Verilerin çekildiği getData kısmında sout veya Toast yaptığımda çektiğini görebiliyorum. Verilerin çekildiği onResponse fonksiyonu içerisinde aşağıda ki işlemler yine başarılı sonuç vermiyor.


  • 01-11-2020, 14:35:15
    #2
    kod blogunu paylasirsaniz daha iyi adreslenebilir

    anlattiginiza gore kod bloklari asenkron calisiyor, bu senaryoda bunun onlemek lazim. Uygulamanin sol menusunu olusturuyor dediginiz uygulama da Java mi? Javascript gibi anladim ben?
  • 01-11-2020, 14:48:48
    #3
    LPRN adlı üyeden alıntı: mesajı görüntüle
    kod blogunu paylasirsaniz daha iyi adreslenebilir

    anlattiginiza gore kod bloklari asenkron calisiyor, bu senaryoda bunun onlemek lazim. Uygulamanin sol menusunu olusturuyor dediginiz uygulama da Java mi? Javascript gibi anladim ben?
    Konuya ekleme yaptım hocam
  • 01-11-2020, 14:54:51
    #4
    Bende sorunun çözümünü merak ediyorum
  • 01-11-2020, 15:24:58
    #5
    hakanbey58 adlı üyeden alıntı: mesajı görüntüle
    Konuya ekleme yaptım hocam
    gordugum kadariyla kurgusal olarak bir problem var,

    getData icerisindeki temp.enqueue async. calisan bir method, ne zaman response alinacagi bilinmiyor,
    genData fonksiyonu getData'dan once cagrildigi icin appsPojo henuz initialize edilemiyor.

    genData() method cagrimini 144. satirin altina koyup deneyebilir misiniz?

    appsPojo = response.body();
    }
    genData();
    }

    seklinde olacak yani.

    ayrica response.body.size kadar dongu olusturmak ve appspojo'ya response.body setlemek de dogru gelmedi bana, gereksiz kulfet. ss almak icin duzenlemis olabilirsiniz diye konu disi kabul edebilirsiniz bu yorumumu.
  • 01-11-2020, 15:30:05
    #6
    Hocam asenkron calistigi icin response un ne zaman gelecegi belli degil oncelikle genData methodunu getData da onResponse da cagirmaniz lazim.

    Bundan sonrasinda genData da ne yapmaya calistiginizi anlamadigim icin bir sey soyleyemiyorum, o kisimda da hata olabilir.
  • 01-11-2020, 15:39:09
    #7
    Bu arada for da da mantiksal hata var . Madem response.body i appPojo ya aktaracaksiniz neden bunu for icinde size kadar yapiyorsunuz?
  • 01-11-2020, 19:05:16
    #8
    HavucApps adlı üyeden alıntı: mesajı görüntüle
    Bu arada for da da mantiksal hata var . Madem response.body i appPojo ya aktaracaksiniz neden bunu for icinde size kadar yapiyorsunuz?
    Hocam o kısımı düzeltmeyi unutmuşum. Dediğiniz gibi tek değer ataması olduğu için for döngüsüne gerek kalmıyor. Yaşadığım sorun ile ilgili çözüm ararken kod ekle/sil aşamalarında son hali öyle kalmış

    HavucApps adlı üyeden alıntı: mesajı görüntüle
    Hocam asenkron calistigi icin response un ne zaman gelecegi belli degil oncelikle genData methodunu getData da onResponse da cagirmaniz lazim.

    Bundan sonrasinda genData da ne yapmaya calistiginizi anlamadigim icin bir sey soyleyemiyorum, o kisimda da hata olabilir.
    Çalışması gereken fonksiyonları birbirine zincirleme olarak bağladım. onResponse işlemi tamamlandığında sıradaki fonksiyonu çağırıyor. O fonksiyon bitiminde de diğer fonksiyon çağrılıyor. Bu şekilde zincirleme yaparak sorunumu çözdüm.

    LPRN adlı üyeden alıntı: mesajı görüntüle
    gordugum kadariyla kurgusal olarak bir problem var,

    getData icerisindeki temp.enqueue async. calisan bir method, ne zaman response alinacagi bilinmiyor,
    genData fonksiyonu getData'dan once cagrildigi icin appsPojo henuz initialize edilemiyor.

    genData() method cagrimini 144. satirin altina koyup deneyebilir misiniz?

    appsPojo = response.body();
    }
    genData();
    }

    seklinde olacak yani.

    ayrica response.body.size kadar dongu olusturmak ve appspojo'ya response.body setlemek de dogru gelmedi bana, gereksiz kulfet. ss almak icin duzenlemis olabilirsiniz diye konu disi kabul edebilirsiniz bu yorumumu.
    Evet hocam dediğiniz gibi. Kurgusal olarak çalışması gereken fonksiyonları onCreate içerisine yazmıştım. Söylediğinizden esinlenerek ilk çalışacak fonksiyondan itibaren zincirleme olarak fonksiyon bitimlerinde bir sonrakini çağırarak sorunu çözdüm.

    Çok teşekkür ediyorum