12 Ekim 2012 Cuma

Datasnap rest sunucusu ile iletişim(Android Client)

Daha önce iOS(Objective-C) ortamından erişip bir UITableView nesnesi servisten gelen json veriyi yazdırmıştık. Şimdi ise Android(Java) ortamından datasnap server'a erişip bir listview nesnesine nasıl okuyabiliriz.Bunu öğrenicez. Datasnap Uygulaması oluştururken "Mobile Connectors" seçeneğini seçip devam ettiğiniz de size ilgili platformların mini frameworklerini de oluşturuyor.objective-c için SBJson ismindeki framework örnek verilebilir. Yine android(java) için Embarcadero firmasının yazdığı com.embarcedero.javaandroid paketi(mini framework diyebiliriz) Yukarıda bahsettiğim frameworkleri datasnap uygulamanızı oluştururken "Mobile Connectors" seçeneğini işaretlediğinizde projenizin dizininde "proxy" klasöründe ilgili frameworkü bulabilirsiniz.

 activity_main.xml



    
    


MainActivity.java

package com.datasnap.restfulclient;

import java.io.IOException;
import java.util.ArrayList;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MainActivity extends Activity {

 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
      
        try {
   this.bindListView();
  } catch (ClientProtocolException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  } catch (JSONException e) {
   e.printStackTrace();
  }
    }
    
    
    private void bindListView() throws ClientProtocolException, IOException, JSONException{
     ArrayList list=this.GetPersonList();
   
        ArrayAdapter arrayAdapter =      
                new ArrayAdapter(this,android.R.layout.simple_list_item_1, list);
                      
        final ListView listView1=(ListView)this.findViewById(R.id.listView1);
        listView1.setAdapter(arrayAdapter);
    }
    
    
    
    private ArrayList GetPersonList() throws ClientProtocolException, IOException, JSONException{
     ArrayList list=new ArrayList();
     String json=this.getDataFromRest("http://192.168.0.16:8080/datasnap/rest/TServerMethods1/GetPersonList");
     JSONObject jsonObject=new JSONObject(json);
     JSONArray arrayLevel1=jsonObject.getJSONArray("result");
     JSONArray arrayLevel2=(JSONArray)arrayLevel1.get(0);
     for(int I=0; I< arrayLevel2.length(); I++){
      JSONObject items=(JSONObject)arrayLevel2.getJSONObject(I);
      String firstName=items.get("firstname").toString();
      String lastName=items.get("lastname").toString();
      list.add(firstName+" "+lastName);
     }
     return list;
    }
    
    
    
    private String getDataFromRest(String httpUrl) throws ClientProtocolException,IOException{
     HttpClient httpClient=new DefaultHttpClient();
     HttpGet httpMethod=new HttpGet(httpUrl.toString());
     httpMethod.setHeader("Content-type", "application/json");
     HttpResponse httpResponse=httpClient.execute(httpMethod);
     int status=httpResponse.getStatusLine().getStatusCode();
     if (status==200){
      HttpEntity entity=httpResponse.getEntity();
      String data=EntityUtils.toString(entity);
      return data;
     }else{
      return null;
     }
    }
    
    
 

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
}



AndroidManifest.xml dosyasına çift tıklayıp gelen ekrandan "Permissions" sekmesinden "android.permission.INTERNET" değerini ekliyorsunuz. Ekledikten sonra AndroidManifest.xml dosyasının içeriği aşağıdaki gibi olacaktır.

 AndroidManifest.xml



    
    

    
        
            
                

                
            
        
    



Eğer yukarıdaki "android.permission.INTERNET" değerini eklemez iseniz android uygulamanız datasnap rest sunucunuza erişmeyecektir.


İyi Çalışmalar.