Soru & Cevap

AsyncTask ile WS kullanımı hakkında, ...

19.04.2016 - 01:44

Merhaba Arkadaşlar,

Uygulamamda bir webservis kullanıyorum, hem progressDialog kullanmak için hemde arayüz donmasın diye AsyncTask kullandım ve çok başarılı bir şekilde çalışıyor fakat 1 defaya mahsus... ilk tıkladığımda  her şey çok güzel çalışıyor ikinci tıklamamda webservis çalışıyor ama listelenmiyor. işin garip tarafı 2 defa denedim çalışmaz ise ekranı yan çevirip tekrar butona tıklıyorum çalışıyor.

Yeniyim bu işlerde, webserbis 10 15 saniyeden fazla sürmediği için uygulamada servis kullanmadım AsyncTask iş görür diye düşündüm

Butonumda bu kod var,


new BackgroundTask().execute((Void) null);
 


musterilistesi(); 'nde webserivden dönen müşterileri ArrayListe ekliyorum.  nerede hata yapıyorum ?

///////////////////// AsyncTask İşlemi /////////////////////
private class BackgroundTask extends AsyncTask<Void, Void, Void> {
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        progressDialog.show();
    }
    @Override
    protected Void doInBackground(Void... arg0) {
        musterilistesi();
        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        super.onPostExecute(result);
        // Dismiss the progress dialog
        if (progressDialog.isShowing()) {
            progressDialog.dismiss();
            adet = 0;
            listem.setAdapter(null);
            listem.setAdapter(veriAdaptoru);
        }

    }
    @Override
    protected void onCancelled() {
        super.onCancelled();
    }

 

9 Görüntülenme

5 Cevap

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

picture-77170-1461050000.jpg
yhackup
20.04.2016 - 11:08

Hallettim Arkadaşlar sağolun, kod sıralamam hatalıymış sanırım...

veri adaptörümü oncreate methotundaydı musterilistesi methodunun içine aldım düzeldi problem...

 

            mlist.clear();
            veriAdaptoru = new ArrayAdapter<String>
                    (this, android.R.layout.simple_list_item_1, android.R.id.text1, mlist);
            veriAdaptoru.clear();

 

Serdar Şen
20.04.2016 - 06:46
ii ya sevindim çözdüğüne :D
picture-77170-1461050000.jpg
yhackup
20.04.2016 - 10:21

Bu video daha net anlatacak sorunumu...

picture-77170-1461050000.jpg
yhackup
20.04.2016 - 10:07

 musterilistesinin kodları bu şekilde, bu işlemi AsyncTask kullanmadan yaptığımda biraz donuyor ama her seferinde listeleme yapıyor AsyncTask kullandığımda ilkinde getirip ikincide getirmemesi yanılttı beni

 

notfyDataSetChanged() nasıl kullanılıyor tam olarak ?

 

 

 

 

 

 ListView listem;
 ArrayList<String> mlist;
 ArrayAdapter<String> veriAdaptoru;


  veriAdaptoru = new ArrayAdapter<String>
                (this, android.R.layout.simple_list_item_1, android.R.id.text1, mlist);


////////////////////
 try {
            mlist.clear();
            veriAdaptoru.clear();

            SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
            request.addProperty("Restlist", unvan.getText().toString());
            request.addProperty("Systempass",ayar.getString("macid","").trim());
            request.addProperty("pDbase",ayar.getString("DataBaseKod","").trim());

            SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
            envelope.setOutputSoapObject(request);
            HttpTransportSE androidhttptransport = new HttpTransportSE(URL);
            androidhttptransport.debug = true;
            androidhttptransport.call(SOAP_ACTION, envelope);
            SoapObject response = (SoapObject) envelope.bodyIn;

            for (int i = 0; i < response.getPropertyCount(); i++) {
                Object property = response.getProperty(i);
                if (property instanceof SoapObject) {
                    SoapObject category_list = (SoapObject) property;
                    String listesi = category_list.getProperty("mlist").toString();
                    for (int a = 0; a < listesi.length(); a++) {
                        String as = listesi.split(";")[a].trim();
                        if (!as.equals("")){
                            mlist.add(as);
                            adet = adet + 1;
                            progressDialog.setProgress(adet);
                            //progressDialog.setProgressNumberFormat(as);
                            //Arabuton.setText(as);

                        }
                    }
                }
            }
        } catch (Exception e) {
        }

 

picture-57989-1451678910.jpg
serdarşen
20.04.2016 - 09:54

Merhaba Yakup, sorununu tam anlamamış olabilirim ama. Sistemin şöyle çalışıyor galiba: 

Webden gelen müşteri listesini veriAdapdoru ile Listview gibi bir componente atıyor.

Burada, yeni veriyle listeyi güncellemek istiyorsun. 

Eğer veri webden geliyor da listelenmiyorsa, yanlış bilmiyorsam: veriAdaptorunde setListe(listem)  tarzında bir setter metodu yardımıyla yeni listeyi adaptöre gönderip ardından adaptör içinde notfyDataSetChanged() metodunu çağırıp adaptörü bundan haberdar edebilirsin. Kolay gelsin

picture-30491-1565085904.jpg
serhatleventyavas
19.04.2016 - 08:08

baglantı kodunuz nerede

YAKUP ULUTAŞ
20.04.2016 - 08:55
bağlantı kodu derken ? anlamadım