Flex HTTPService ' lerinde JSON Formatını Kullanmak
Selcuk.Bozdag Tarih: 5/05/2008 Yorum: 1 adet
Okunma : 346 Tutanlar: Bu yazıyı 2 kişi tuttu.
BlazeDS kullanarak Java altyapimi AMF3 protokolü sayesinde Flex ile konuşturduğum şu güzel günlerde, HTTPService nesnelerini de zaman zaman uygulamama katmam gerekti. Bir arkadaşımın daha once adini duymadığım formatlarda benimle veri alışverişi yapması ilk başta düşündürse de JSON adlı veri alış veriş formatında haberleşmenin Flex 3 ile ne kadar kolay olabileceğini gördüm, test ettim ve onayladim. JSON ile ilgili daha fazla bilgi icin http://www.json.org.
Ornek Konu
Google Servisleriyle JSON veri alisveris formatini kullanarak haberlesmek.
Nasil?
Flex kodumuzda Google Calendar servisine erismek icin asagidaki tanimi yaparak baslayalim.
<mx:HTTPService id="googleSrv"
url="http://www.google.com/calendar/feeds/developer-calendar@google.com/public/full?alt=json"
resultFormat="text"
result="handleGoogleGetResult()"/>
"resultFormat" secenegini "text" olarak istedik. Servisin yanitini da "json" olarak belirledik. Peki Flex JSON verisini nasil ayiklar? Serilestirme islemlerinde kullanilan corelib kutuphanesini projemizin build path degiskenleri arasina bir kutuphane olarak ekliyoruz. Henuz indirmediyseniz corelib kutuphanesine http://code.google.com/p/as3corelib/downloads/list adresinden ulasabilirsiniz.
Gelen sonuclari ele alacak bir metod tanimliyoruz. Yukaridaki servis taniminda bu metodun adini "handleGoogleResult" olarak belirlemistik:
[Bindable]
private var entries:Array;
private function handleGoogleGetResult():void
{
var feedRoot:Object = JSON.decode( googleSrv.lastResult.toString() );
entries = ArrayUtil.toArray( feedRoot.feed.entry );
}
Cok kolay oldu. Boylece "entries" adli dizi degiskenimiz butun Google Gelistirici haberlerine sahip oldu. Simdi sirada bu sonuclari bir DataGrid icerisinde gosterelim:
<mx:DataGrid id="googleDevEventsDG" dataProvider="{entries}" labelFunction="dgLabelFunc" width="100%">
<mx:columns>
<mx:DataGridColumn dataField="title" headerText="Baslik"/>
<mx:DataGridColumn dataField="gd$when" headerText="Ne zaman?"/>
<mx:DataGridColumn dataField="gd$where" headerText="Nerde"/>
<mx:DataGridColumn dataField="content" headerText="Kisa Aciklama"/>
</mx:columns>
</mx:DataGrid>
Oluşan "entries" dizisini "debug" etmenizi siddetle tavsiye ediyorum. "labelFunction" metodunun gerekliligini o zaman anliyoruz. Cunku varsayilan tablo degerleri [Object object] gibi bir gorunebilir. Panik yok ;) Gostermek istediginiz veri AS3'un kendi siniflarina dogal olarak ceviremiyecegi turden bir nesne oldugundan dogal olarak "Object" sinifinin "toString()" metodunu cagiriyor. Bunu ezmek icin:
[code]private function dgLabelFunc(item:Object, col:DataGridColumn):String
{
var label:String;
switch( col.dataField )
{
case "title" : label = item.title.$t; break;
case "gd$when" : label = item.gd$when[0].startTime; break;
case "gd$where" : label = item.gd$where[0].valueString; break;
case "content" :
var fullStr:String = String(item.content.$t);
label =
fullStr.substr(0, (fullStr.length > descLength) ? descLength : fullStr.length).concat("...");
break;
}
return label;
}
Metodunu mxml dosyamizin "script" bloguna ekliyoruz. Bu arada descLength degiskenini, aciklama uzunlugunu kisitlamak icin koyduk. Kendi programimda bu degeri otuz olarak kurdum.
Sonuç

Boylece JSON formatini Flex 3 ile nasil ayiklayip HTTPService nesnelerinizin sonucu olarak kullanabilecegimizi görmüşolduk.
Konuyla ilgili soru ve dusunceleriniz icin MMIstanbul soru – cevap bölünde de mesajlarınızı bekliyorum.
Makale
Haber
Ders
İlişkili ders bulunamadı.
Etkinlikler
Yarışma
Akbank exi26 Şipşak: Gençler için Fotoğraf Yarışması
Akbank exi26 Şipşak: Gençler için Fotoğraf Yarışması
Akbank Gençlik Bankacılığı exi26 tarafından düzenlenen fotoğraf yarışmasına dijital fotoğraf makinelerinizle çektiğiniz fotoğraflarla katılabilirsiniz...
Kategori:
Yarışma
MMIstanbul Adobe UG
ColdFusion, Flex, AIR, Flash , PDF, Dreamweaver, Fireworks, Photoshop, Illustrator, INdesign, Connect, Premiere, Soundbooth, Contribute, Lightroom, InCopy, JRun, LiveCycle, Acrobat, AfteEffects, Resmi Adobe Kullanıcı Grubu.
Kimler Burada? 
Son 1 dakika içinde MMIstanbul' da 408 (1 kayıtlı, 407 ziyaretçi) kullanıcı varmış. Login durumda olanlar aşağıda:
MMIstanbul Blog'undan
Ne Nedir Kampanyası Başlıyor!
Selam arkadaşlar, MMIstanbul içeriğinin gelişmesine katkıda bulunmak isteyen arkadaşlarımıza söyle bir önerimiz var. Sizleri çok fazla yo ...
Çok Merak Edenler için; MMIstanbul Geliştirme Ekibi ve Çalışma Ortamımız
MMIstanbul Online Seminerlerine Nasıl Katılabilirim?
Bazı Akıl - Fikirleriniz Olabilir
MMIstanbul' u Nasıl Desteklerim?



Merhaba Selcuk, BlazeDS deneyimlerini bir ara ayrintili paylasirsan cok sevinirim.