Soru & Cevap

Volley ile timer kullanımı

29.03.2017 - 06:23

Merhaba arkadaşlar,

Uzak mysql veri tabanından json türünde verileri çektiğim bi android uygulamam var. Verilerin anlık olarak ekrana gelmesi için timer kullanıyorum bir süre sonra uygulama çöküyor.  İnternette yaptığım araştırmalarda volley yerine AsyncHttpClient kullanmam gerektiği yazıyordu fakat yine aynı hatayı aldım.

 

final Handler handler = new Handler();
        TimerTask doAsynchronousTask = new TimerTask() {
            @Override
            public void run() {
                handler.post(new Runnable() {
                    public void run() {

                            mesajGetir();

                        adapter=new UsersmyListAdapter(Mesaj.this,data2);
                        sohbetlistele.setAdapter(adapter);

                    }
                });
            }
        };
        Timer timer = new Timer();
        timer.schedule(doAsynchronousTask,0,1000);

 

 

public void mesajGetir()
    {
        JSONObject jsonObject = null;

        String loginUrl="http://192.168.2.18:9090/InstantMess/webapi/kullanici/mesaj/"+id+"/"+kid;

        JsonArrayRequest req = new JsonArrayRequest(loginUrl,
                new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray response) {

                        try {
                            //adapter2.notifyDataSetChanged();
                            adapter.notifyDataSetChanged();
                            data2.clear();

                            for (int i = 0; i < response.length(); i++) {
                                JSONObject person = (JSONObject) response.get(i);

                                String mesaj=person.getString("mesaj");
                                String im=person.getString("resim");
                                JSONObject arkId=person.getJSONObject("arkadasId");
                                int aid=arkId.getInt("arkadasId");
                                JSONObject kullanici2=arkId.getJSONObject("kullanici2");
                                int kullanici2kullaniciId=kullanici2.getInt("kullaniciId");
                                String kullanici2kullaniciAd=kullanici2.getString("kullaniciAd");

                                JSONObject kullaniciId=person.getJSONObject("kullaniciId");
                                int kullaniciIdkullaniciId=kullaniciId.getInt("kullaniciId");
                                String kullaniciIdkullaniciAd=kullaniciId.getString("kullaniciAd");

                                HashMap<String, String> map2 = new HashMap<String, String>();
                                map2.put("type","1");
                                map2.put("mesaj",mesaj);
                                if(mesaj == "null")
                                    map2.put("type","2");
                                map2.put("resim",im);
                                map2.put("arkadasId", String.valueOf(aid));
                                map2.put("kullaniciId1", String.valueOf(kullanici2kullaniciId));
                                map2.put("kullaniciAd1",kullanici2kullaniciAd);
                                map2.put("kullaniciId2", String.valueOf(kullaniciIdkullaniciId));
                                map2.put("kullaniciAd2", kullaniciIdkullaniciAd);
                                data2.add(map2);
                            }

                        } catch (JSONException e) {
                            Log.e("Web Servis", "bağlantı sağlanamadı" + e.getLocalizedMessage());
                            e.printStackTrace();
                        }

                    }

                },new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
               // Toast.makeText(getApplicationContext(), "Web servis ile bağlantı kurulamadı.", Toast.LENGTH_LONG).show();
            }
        });
        RequestQueue requestQueue = Volley.newRequestQueue(this);
        requestQueue.add(req);
}

 

8 Görüntülenme

1 Cevap

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

picture-90490-1480515135.jpg
bedesten1618
30.03.2017 - 02:22

Her işlemde ram şişiyor ve bir süre sonra ram dolduğu için uygulama patlıyor. İşleminiz bittiğinde timer.cancel() diyerek timer ın çalışmasını durdurabilirsiniz demek istiyorum ama anlık mesaj çekiyorum diyorsunuz ve anladığım kadarıyla timer sürekli çalışmak zorunda. Programsal olarak sorununuzu şöyle bir kod yazarak çözebilirsiniz diyemiyorum ama yukarıda söylediğim gibi ramın şişmesinin önüne geçmeniz lazım bir şekilde.