Soru & Cevap

volley json data alırken senkron sorunu ...

27.12.2014 - 11:08

Merhaba,

GenelService.java diye bir class var(web servise bağlanıp json formatında veriler çektim tüm metodlarım bu class içinde) ve içerisinde seçilen şehiri parametre olarak gönderip ilçe listesini getirdiğim bir metodum var,  bu metod geriye bir List<IlceModel> tipinde bir liste döndürmektedir, bu listeyi activity içerisinde bir değişkene atayıp kullanıyorum, fakat web servisten veriler çekilirken bu işlemin birmesi beklenmeden sıradaki diğer işleme geçtiği için sorun yaşamaktayım, web servis isteği tamamlandığı zaman sıradaki işleme geçilmesini nasıl sağlayabilirim?

 

[code]

//activity içerisindeki ilçeleri çağırdığım metod

 public void IlceDoldur(int sehirId){

        final List<IlceModel> ilceler = GenelService.GetIlceList(context,sehirId); //bu satırdaki istek bitmeden bir sonraki satıra geçmeyi nasıl engellerim 

        Spinner sp = (Spinner) findViewById(R.id.spIlce);
        ArrayAdapter<IlceModel> adapter = new ArrayAdapter<IlceModel>(this, android.R.layout.simple_spinner_dropdown_item, ilceler );
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        sp.setAdapter(adapter);
    }

 

//web servisden veri çektiğim metod

public static List<IlceModel> GetIlceList(final Context context,int sehirId) {
        final ArrayList<IlceModel> data = new ArrayList<IlceModel>();
        data.add(new IlceModel(0,"ilçe seçiniz"));
        if(sehirId==0)
            return data;

        pd = ProgressDialog.show(context, null, "İlçe listesi alınıyor, lütfen bekleyiniz...");
        //pd.setCancelable(true);

        String prm = "?sehirId=" + sehirId;

        String url = serviceUrl + "/genel/GetIlceler" + prm;      
        RequestQueue q = Volley.newRequestQueue(context);
        JsonObjectRequest rq = new JsonObjectRequest(Request.Method.POST, url, null, new Response.Listener<JSONObject>() {

            @Override
            public void onResponse(JSONObject response) {
                pd.hide();
                Gson gson = new Gson();
                try {                
                    if (!response.getBoolean("Sonuc")) {
                        Toast.makeText(context, response.getString("Mesaj").toString(), Toast.LENGTH_LONG).show();
                        return;
                    }

                    Type listType = new TypeToken<List<IlceModel>>(){}.getType();
                    List<IlceModel> items= (List<IlceModel>) gson.fromJson(response.getJSONArray("Data").toString(), listType);

data.addAll(items);

                } catch (JSONException e) {
                    e.printStackTrace();
                    Toast.makeText(context, e.getMessage(), Toast.LENGTH_LONG).show();
                }
            }
        }, new Response.ErrorListener() {

            @Override
            public void onErrorResponse(VolleyError error) {
                pd.hide();
                Toast.makeText(context, error.toString(), Toast.LENGTH_LONG).show();
            }

        });
        q.add(rq);     

        return data;
    }

 

[/code]

22 Görüntülenme

3 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

Profile picture for user sabo
sabo
12.02.2017 - 03:38

Sorunu Cozebildiniz mi acaba farkli bir sekilde ayni sorunu bende yasiyorumda

 

Profile picture for user yusufdursun
yusufdursun
28.12.2014 - 12:04

@Abdullah

verinin gelmesinde bir problem yok, şöyle izah edeyim örneğin;

işlem-1  // email/şifre al
işlem-2 // UyelikServis.Dogrula(email,sifre) web servisten şifreyi doğrula
işlem-3 // gelen değeri bir 'N' değişkenine ata
işlem-4 //  'N' true ise MainActivity aç değil ise hata mesajı göster

"işlem-2" daha bitmeden "işlem-3" den devam ediliyor, dolayısı ile veri henüz gelmediği için "true" olması gereken değer default değeri(false) ile "işlem-4" de gittiği için her zaman kullanıcı şifresi hatalı kabul ediliyor, 
"işlem-2" tamamlanmadan diğer metodlara geçilmesin istiyorum.  

umarım anlatabilmişimdir.  

picture-19354-1419383480.jpg
abalta
28.12.2014 - 02:52

Sorun, spinner'a basıldığında ilçeler boş mu geliyor? Eğer o şekilde ise spinner'ı doldurma işlemini onResponse'un en sonunda yapın.

yusuf dursun
28.12.2014 - 12:03
...