Profili Göster

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ç

mmistanbul.com

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.

aç-kapa İçeriğin rss beslemesi kullanımda değil Yorumlar

Profili Göster
Veli Süngütay 5/05/2008

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

yeni üyelik | şifremi unuttum

aç-kapa 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

aç-kapa Eğitim INETA Summer Hit

INETA Summer Hit

2-3 Ağustos tarihlerinde Yıldız Üniversitesi Oditoryumunda gerçekleştirilecek etkinliğe katılanları ise farklı hediyeler bekliyor. PC Magazine dergi...
Kategori: Eğitim

aç-kapa Konferans 2. Ulusal Yazılım Mimarisi Konferansı - UYMK'08

2. Ulusal Yazılım Mimarisi Konferansı - UYMK'08

2.Ulusal Yazılım Mimarisi Konferansı (UYMK’08), 11 – 12 Eylül 2008 tarihlerinde Ege Üniversitesi Bilgisayar Mühendisliği Bölümü ev sah...
Kategori: Konferans

aç-kapa Sergi İstanbul'da Bir Sürrealist: Salvador Dali

İstanbul'da Bir Sürrealist: Salvador Dali

Picasso ve Rodin’den sonra kimi görmek istersiniz deseler; Salvador Dali listenin ilk başlarında yer almaz mı? Ressam, yazar, bilim adamı, tasar...
Kategori: Sergi

aç-kapa Fuar CeBIT 2008 Bilişim Eurasia 7 - 12 Ekim 2008' de

CeBIT 2008 Bilişim Eurasia 7 - 12 Ekim 2008' de

CeBIT Bilişim Eurasia bu yıl 7 – 12 Ekim tarihlerinde düzenleniyor Adını dünyanın en büyük on fuarı arasına yazdırarak, İstanbul’u Avrasy...
Kategori: Fuar

üyeler Üyelerimizden...

MMIstanbul Adobe UG MMIstanbul Adobe UG

adobe user group

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.

stats Kimler Burada? web stats

Son 1 dakika içinde MMIstanbul' da 408 (1 kayıtlı, 407 ziyaretçi) kullanıcı varmış. Login durumda olanlar aşağıda:

ogzcns ...
coldfusion mysql ubuntu
 

Burada bulunan kategorimize 3, 6 12 ay sürelerince sponsor olabilir, hem topluluğumuzun gelişimine katkılarda bulunup, hem de ürün / servis ya da markanızın yüzbinlerce insan tarafından pozitif olarak tanınmasını sağlayabilirsiniz.