Activityler Arası Veri Set Etme.
-
Merhaba Müridcanlar.
Konu başlığı ne denli açıklayıcı oldu bilmiyorum lakin özetlemem gerekirse;
1 activity 1 class dosyam var;
vesselsearchdetails - Activity
wsVesselDetails - class
Yapmak istediğim wsVesselDetails classıma iş yaptırıp bu işin sonucununda aldığım string[] veriyi vesselsearchdetails activity deki bir textview e yazdırmak. Bu iki dosyayı ayırmasaydım vesselsearchdetails activitiysinin içine wsVesselDetails classını yazsaydım activitydeki textview kontrolüne erişebilirdim. lakin ayrıdığımda erişemiyorum.
Aşağıdaki gibi bir çözüm üretmeye çalıştım ters mantık ile wsVesselDetails içinde vesselsearchdetails create edip FindViewById ile kontrole eriştim veriyi set ettim. Hiç hata yok. Ancak runtime da aşağıdaki hatayı alıyorum access vermiyor sanırım.
-
exception dan anladığım kadarıyla oluşturulan thread asenkron çalışıyor. sen ise sonucun oluşturulmasını beklemeden okumaya çalışıyorsun..
şöyle düşün..
1 den 10000 bine kadar olan sayıları topluyorum ve bunun sonucunu döndereceğim...
saymaya başlayan metodu çalıştırdım.. o sayarken, benim thread asenkron çalıştğı için onu beklemeden diğeer işleme geçiyor. diğr işlem nedir, bu sonucu ekrana basmak..
toplama metodu çalıştıktan sonra hemen ekrana basma metodu çalışıyor ama ekrana basacak bir değer yok çünkü henüz toplama metodu bitmiş değil. dolayısıyla null hatası verecek ki senin hata da bu şekilde.
javada bu olay nasıl oluyor hatırlamıyorum ama bu thradin completed eventi olması gerekiyor. sen okuma işini orada yaparsan iş çözülmüş olur. çünkü benim verdiğim örnekteki toplama işlemi bittiğinde bu completed eventi çalışır ve ekrana basacak değerin oluşturulmuş oluyor o zaman da bir sıkıntı kalmaz
bilmem anlatabildim mi
-
Hocam seni çok iyi anladım örneklendirme müthişti :) Sanırım sorunum dediğin gibi asenkron veri alma işlemi bitmediği için patlıyor.
Ancak şöyle bir ekleme yapayım. Android de bir thread kullanımı var bir de muadili asyntask kullanımı var. ikiside aynı işi yapıyor farkı nedir açıkcası bilmiyorum.
asynctask da şöyle bir yapı var. onPreExecute çalışır ardından doInBackground çalışır ki arka planda yapmak istediğin asenkron iş burada yapılır. en son onPostExecute çalışır ki UI işlemlerini burada yaparsın.
Böyle bir yapı var hocam. Yaptığım ters instance alma doğru bir yaklaşım mıdır sence? Ya da bu ters instance ı almadan nasıl diğer activiy classına erişebilirim sence?
-
Hocam bak burada anlatmış nasıl yapacağını: http://stackoverflow.com/questions/10633076/android-getting-result-of-asynctask-in-main-activity-and-add-views-to-xml-layout
-
1.5 yıldan fazladır android ile ilgilenmedim hocam o yüzden çoğu şeyi hatırlamıyorum :))
şimdi soruna gelirsek..
http://developer.android.com/reference/android/os/AsyncTask.html
private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> { protected Long doInBackground(URL... urls) { int count = urls.length; long totalSize = 0; for (int i = 0; i < count; i++) { totalSize += Downloader.downloadFile(urls[i]); publishProgress((int) ((i / (float) count) * 100)); // Escape early if cancel() is called if (isCancelled()) break; } return totalSize; } protected void onProgressUpdate(Integer... progress) { setProgressPercent(progress[0]); } protected void onPostExecute(Long result) { showDialog("Downloaded " + result + " bytes"); } }
ve bu download metodunu çalıştırmak için
new DownloadFilesTask().execute(url1, url2, url3);
şimdi üstteki kodlarda görüldüğü gibi;
1- doinbackground bizim işe başlama eventimiz. yani thread içerisinde çalıştırmak istediğin kodu buraya yazarsın..
2- eğer işlemin her aşamasını bir yerlerde göstermek istersen ( yüzdelik tutuma, progressbar kullanma gibi) bu işleri de onprogressupdate de yaparsın. yüzdeyi almak için de progress parametresinden 0. indexli veri bize yüzdeliği verir..
3- doinbackground içindeki işlem bittikten sonra onpostexecute eventi çalışır bu da işlemin tamamlanmış olduğunu söyler bize.
işte senin thread de işlediğin veriyi kullanabileceğin nokta onpostexecute eventi olmalı.
koduna iyice baktım ki sen de zaten dediğim şekilde yapmışsın olayı ama ortada bi sıkıntı var.
orda bir null değer almışsın. onpostexecute deki kodları commente al. sonra resultu ekrana yazdırmaya çalış. bak bakalım doğru olarak gelmiş mi?
eğer onda sıkıntı yok ise adım adım kodlarını yaz. bir an da yapma ki hatanın nerede kaynaklandığını bulabilesin.
bir ihtimal de txtresult a erişim izni vermemiş de olabilir. ama dediğim gibi kodları parça parça ekle ve en son hatayı bul. deneme yanılma ile yapacaksın. IDE nin debug u gelişmiş olsaydı bunlara çok gerek kalmadan görebilirdin ama eclipse güzel bir ide değil (VS ile karşılaştırınca)
-
smok3 bunu yazdı
Hocam bak burada anlatmış nasıl yapacağını: http://stackoverflow.com/questions/10633076/android-getting-result-of-asynctask-in-main-activity-and-add-views-to-xml-layout
Smok3 sanırım sorumun cevabını buldum teşekkürler:) Eve gidince bakacağım.
Unbalanced ilgine teşekkürler hocam:) detaylı anlatım için ayrıca saolasın. Dediğin gibi debug konusu eclipse de çok sıkıntı. android studyonun geliştirilmesini bekliyorum :)
-
hocam sorun çözülmüş bu arada bende başka bişey sorayım bu arayüz tasarımı nasıl illet bişeydir ya bir türlü istediğim gibi olmuyor, ekran çözünürlükleri değiştiğinde form kayıyor mala donüyor görüntü, nasıl yapıyorsunuz arayüzü tasarlamak için başka bişey filanmı kullanılıyor acaba ?eclipse deki tasarım işi rezalet değilmi yoksa ben bilmediğim içinmi öyle :D
detCode tarafından 09/Eki/13 17:32 tarihinde düzenlenmiştir
edit; birde hala google play den ürün satış işine çözüm yokmu ? -
Sorunu şu şekilde çözdüm müridcanlar.
mutlaka ihtiyacı olan çıkar..
-
@rappermcs, tebrikler hocam iyi ilerliyorsun. güzel bi mobil yazılım geliştirici olacaksın :)) devam et böyle azmini kırma. mümkünse bir kitaptan çalış. busy coder's ... kitabı güzeldir, incelediğim en iyi kitaptı.
http://commonsware.com/Android/
bununla devam edersen güzel olur. bir de wrox un kitabı vardı 2. versiyonunu da çıkarmışlardı, yazılımcılar arasında en çok beğenilen kitap olmuştu hatta bizimkiler türkçe çevirisini çıkartmışlar..
@detcode, hocam droiddraw kullanabilirsin
en son hangi versiyonları destekliyor bilmiyorum. çünkü android versiyonu değiştikçe bazı kontroller deprecate (yürürlükten kalkma) oluyor. o yüzden yazılımı geliştirmemişlerse son versiyon android sürümlerine uyumlu olmayabilir. ama kolay tasarım için ideal bir şeydi. tasarlıyorsun sonra xml kodunu alabiliyorsun. ister site üzerinden java applet şeklinde uygulamayı çalıştır, ister indir local olarak bilgisayarda çalıştır.
-
unbalanced bunu yazdı
@rappermcs, tebrikler hocam iyi ilerliyorsun. güzel bi mobil yazılım geliştirici olacaksın :)) devam et böyle azmini kırma. mümkünse bir kitaptan çalış. busy coder's ... kitabı güzeldir, incelediğim en iyi kitaptı.
http://commonsware.com/Android/
bununla devam edersen güzel olur. bir de wrox un kitabı vardı 2. versiyonunu da çıkarmışlardı, yazılımcılar arasında en çok beğenilen kitap olmuştu hatta bizimkiler türkçe çevirisini çıkartmışlar..
Eyv. hocam gelecek mobil de :) Böyle paslaşarak yardımlaşarak çözeriz bu işi.
Busy coder's duymamıştım içeriğine baktım oldukça detay var gibi görünüyor. Tavsiye için teşekkürler.
-
unbalanced bunu yazdı
@detcode, hocam droiddraw kullanabilirsin
en son hangi versiyonları destekliyor bilmiyorum. çünkü android versiyonu değiştikçe bazı kontroller deprecate (yürürlükten kalkma) oluyor. o yüzden yazılımı geliştirmemişlerse son versiyon android sürümlerine uyumlu olmayabilir. ama kolay tasarım için ideal bir şeydi. tasarlıyorsun sonra xml kodunu alabiliyorsun. ister site üzerinden java applet şeklinde uygulamayı çalıştır, ister indir local olarak bilgisayarda çalıştır.
eyv. hocam araştırıyorum