1 Nisan 2013 Pazartesi

Androidde Basit Json Parse İşlemi

Arkadaşlar merhabalar, basit olarak bir android cihazda json yapıları nasıl kullanılırız bugun biraz onlardan bahsedeceğim size genel olarak kodlar üzerinde açıklamalarda bulunarak anlatamaya çalışacağım.

İlk olarak yapmamız gereken yeni bir android projesi oluşturmak olacak.Yeni bir proje oluşturduktan sonra main layoutu içerisene bir textview nesnesi ekleyelim. 

json_ornek.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".JsonOrnek" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="174dp"
        android:text="TextView" />

</RelativeLayout>

2. olarak main activity içerisine kodlarımızı yazacağız.

  Basit bir json objesini parse edebilmemiz çoka basittr örneğin: json objemiz obj= {"ad":"gokhan","soyad":"aras"} olduğunu düşünelim yapmamız gereken tek şey bu nesneyi JSONObject jsonobj=new JSONObject(); parametre olarak gönderkmek olacaktır. JSONObject jsonobj=new JSONObject(obj); gibi

package gokhan.test.andoridjson;

import org.json.JSONException;
import org.json.JSONObject;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.TextView;

public class JsonOrnek extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.json_ornek);
   
        TextView texview=(TextView) findViewById(R.id.textView1);
         //Json nesnesi
         String jsonvalue="{\"ad\":\"gokhan\",\"soyad\":\"aras\",\"numara\":\"09260509\"}";
       
        texview.setText(simpleJson(jsonvalue));
       
        
       
    }
    
// Json nesnesini parse etmeye yarayan method.
// Bu method gelen parametre değerindeki ad,soyad,numara değerlerini gösteremeye yarar.
    public String simpleJson(String jsonvalue){
       
        String data="";
        try {
            JSONObject jsonobj=new JSONObject(jsonvalue);
           
  //Burada dikkat etmemiz gereken konu json nesnesi değer isimlerini bilmemiz gerekmektedir. //Yoksa nesne içerindeki değerleri alamayız.           data=""+jsonobj.getString("ad")+"----"+jsonobj.getString("soyad")+"-----"+jsonobj.getString("numara");
           
           
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
   
   
        return data;
       
    }
     
Bu işlemde tamamlandıktan sonra projemizi çalıştırdığımızda karşımıza şekildeki görüntü gelir.    


 Peki ya json objesi içerindeki etiket isimlerini bilmiyorsak nasıl yapacağız. Bu etiketlere karşılık gelen verileri alamıyacağızmı? Hayır tabikide öyle değil :) isimlerini bilmeden de global bir biçimde json objelerini kullanabilir bunun için bu basit uygulamada kullanabileceğimiz bir aşağıdaki kodu yazdım.

texview.setText(simpleJsonGlobal(jsonvalue)); // Main methodu içerisindeki textviewe set //ettğimiz değeri yeni method değeri ile değiştirelim

Daha sonra  simpleJsonGlobal methodunu projemize ekleyerek global bir biçimde json parse etme işlemini gerçekleştirebiliriz.


    public String simpleJsonGlobal(String jsonvalue){
       
        String data="";
        String names="";
        try {
            JSONObject jsonobj=new JSONObject(jsonvalue);
            for (int i = 0; i <jsonobj.names().length(); i++) {
                names=jsonobj.names().getString(i);
                data+=""+jsonobj.getString(names)+"----";
            }
       
           
           
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
   
   
        return data;
       
    }
 json objelerini istediğimiz etkikette göndererek aynı sonucu elde edeceğiz
     String jsonvalue="{\"ad\":\"gokhan\",\"soyad\":\"aras\",\"numara\":\"09260509\"}";
     String jsonvalue="{\"ad1\":\"gokhan\",\"soyad1\":\"aras\",\"numara1\":\"09260509\"}"; 


 
Eğer elimizde bir json objesi değil bir json dizi objesi var ne yapcağız. Json dizi yapısını Json obje ile parse edemeyiz bunun için ise Javanın JSonArray kütüphanesi kullanacağız gelen objeyi dizi olarak tamınladıktan sonra tek tek nesneler halinde okumamız gerekmektedir. Bunu  yapmamız için aşağıdaki methodu kullanmamız yeterli olacaktır.

    public String simpleArrayJson(String jsonvalue){
       
        String data="";
        try {
            JSONArray jsonarray=new JSONArray(jsonvalue);
            for (int i = 0; i <jsonarray.length(); i++) {
                JSONObject jsonobj=jsonarray.getJSONObject(i);
           
         data +=""+jsonobj.getString("ad")+"----"+
         jsonobj.getString("soyad")+"-----"+jsonobj.getString("numara")+"\n";
            }           
   
                   
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
   
   
        return data;
       
    }


Aynı şekilde etiket isimlerini bilmediğimizde bu dizide de işlem yapmak için global bir biçimde tnaımlamamız gerekmektedir. Bunun için ise aşağıdaki methodu kullanmamız gerekir.

public String simpleGolobalArrayJson(String jsonvalue){
       
        String data="",names="";
        try {
            JSONArray jsonarray=new JSONArray(jsonvalue);
            for (int i = 0; i <jsonarray.length(); i++) {
                JSONObject jsonobj=jsonarray.getJSONObject(i);
                for (int j = 0; j <jsonobj.names().length(); j++) {
                    names=jsonobj.names().getString(j);
                    data+=""+jsonobj.getString(names)+"----";
                }
           
                data +="\n";
            }           
   
                   
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
   
   
        return data;
       
    }
Projenin Son Hali ise aşağıdaki biçimde olur 
Projeyi indirmek için tıklayınız

Gökhan Turan Aras
Kolay Gelsin :)

31 Mart 2013 Pazar

android.os.net workonmainthreadexeption json php webservice hatası

StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder() .detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build());

   Activity classs içerisinde onCreate methodu ilk başladığında kodunun çalışması hatayı engelleyecektir. Aynı zamanda internet izinizide kontrol etmelisiniz verilmemişse internet izninizi veriniz.

İnternet İzni İçin
 <uses-permission android:name="android.permission.INTERNET"/>

AndroidManifest.xml dosyası içerisene yazılacaktır.

28 Mart 2013 Perşembe

Subversion Nedir ve Subversion Eclipse Entegrasyonu


Subversion Nedir ve Subversion Eclipse Entegrasyonu
  Yazılım dünyasında çoğunlukla iyi projelerinin altında iyi bir takım çalışması yatmaktadır. Takım olarak çalışmada ise bazı sorunlar açığa çıkarmaktadır. Örneğin çalışmaya başladığımız bir projeyi takım olarak yapmak istediğimizde çalışma yapabilmek için  projeyi modüllere bölerek ekip arkadaşlarımıza dağıtarak çalıştığımızı var sayalım. Bu durumda her bir takım üyesine yapması için birer modül verilir ve tamamlanması istenir. Daha sonra her bir  takım üyesi modüllerini tamamlayıp bu modüllerin bir çatı altında birleştirilmesi ile projenin oluşturulması gerekmektedir. Bu işlemin yapılabilmesi için çalışanların ekstradan çaba sarf etmesi gerekir. Öyle ki birleştirilen projede bir çok can sıkıcı hata ile de karşılaşılabilir bu işimizi daha çok zora sokacaktır. Daha kötü durum ise aynı dosya üzerinde çalışma yapılması senaryosu vardır eğer böyle bir durum oluşursa işler daha da zora girecektir.İşte bu noktada Subversion yani kısaca SVN devreye girmektedir.
   Subversion takım çalışmalarını daha kolay bir şekle getirmektedir . Svn'in temel çalışma mantığını kısaca açıklayacak olursak, ortak bir çalışma alanı oluşturduğumuzu düşünün ve her bir takım arkadaşınız bu alandaki projelere erişip, proje dosyalarını kendi bilgisayarına indirerek çalışmasını yapabilir ve yaptığı değişiklikleri tekrar yükleyerek herkesin projenin güncel halini görmesini sağlayabilir. Değişiklikler yapılırken ise versiyonlama yapılarak projenin geçmişteki herhangi bir anındaki durumuna geçiş yapılabilmektedir. Dahası ise çalışma yaptığımız herhangi bir dosya üzerinde başka bir üyenin çalışması istenmediğinde ise çalışma yaptığımız proje dosyasını kitleyerek sadece bizim değişiklik yapmamıza olanak sağlar. Svn bu gibi ve daha fazla özellikleri ile takım çalışmasına büyük katkı sağlamaktadır. Takım çalışması yapıyorsanız kesinlikle SVN kullanmanızı öneririm.
 Subversionu kullanabilmek için ise bir sunucuya ihtiyacımız vardır. Her zaman açık olacak bir sunucuya ihtiyacımız vardır bu durumda  herkes kendi sunucusunu oluşturması zor olacaktır  Bunun için bir çok firma size bu olanağı sağlamaktadır. En çok kullanılan svn ortamları ise https://code.google.com ve https://github.com dır. Bu ortamlardan birini tercih ederek projenizi takım çalışması biçiminde yapabilirsiniz. Yapmanız gereken tek işlem ise svn aracının derleyecinizde bulunmasıdır. 

Subversion Eclipse Entegrasyonu
1) İlk olarak Svn ortamını kullanabilmek için svn aracını eclipse kurmamız gerekmektedir. Bunun için ise Eclipse--->Help--> Eclipse Marketplace seçeneğini seçerek Eclipse Marketplace açmamız yeterli olacaktır. Eclipse Marketplace sayesinde derleyicimize bu alanda ve herhangi bir alanda bulunan birçok aracı yükleyebiliriz.

2) Açılan Eclipse Marketplace sayfasında arama kısmına svn yazılarak arama yapılır ve Subversive - SV Team Provider Install butonuna tıklanarak yüklenmesi istenir.

3) Next butonuna tıklanır ve bir sonraki aşamaya geçilir.


4) Svn'in kurulumu bir kaç dk sürecektir. Kurulum yapılırken Eclipse kapatmayalım.



5) Kurulum tamamlandıktan sonra Eclipsin restart edilmesi istenecektir. Evet  diyerek devam edelim.




6) Eclipse tekrar başladığında şekildeki ekran karşınıza gelcektir burada. SVN Kit 1.3.8 ve SVN Kit 1.7.8 kitlerini seçili hale getirip. Finish butonuna tıklayarak işlemi tamamlayalım.




7) Sonraki aşama için Next diyelim. Bu işlemler tamamlandıktan sonra Eclipse tekar reset atılacaktır ve  derleyici tekrar açıldıktan sonra SVN kurulumu tamamlanmış olacaktır. Buradan sonra herhangi bir svn projesine dahil olabilir veya projeyi dosyalarını eclipse ile entegre edebiliriz.


8) Şimdi ise herhangi bir projeyi eclipse ile bağlantısını yapmaya çalışacağız. Google codedan herhangi bir projeyi açarak svninin çalışmasının inceleyebilir. Seçtiğimiz herhangi bir projenin Source kategorisi altındaki  svn checout http://example.googlecode.com/svn/trunk/  exemple-xxxx-xxx kısmındaki kırmızı ile belirttiğim linki kopyalamız yeterli olacaktır. Bu bizim için proje dosyalarını almamızı sağlayacak bağlantıdır.


9) Eclipse de File--> New--> Other seçeneği seçiyoruz.




10) Açılan sayfada SVN klasörü altındaki Project from SVN seçilerek yeni bir SVN projesi oluşturuyoruz.



11) Kopyaladığımız linki açılan sayfada URL kısımına yapıştırıyoruz ve Next diyerek devam ediyoruz.




12) İndirilecek projenin workspacenizde yeni bir proje ismi ile kayıt etmek için birinci alanı seçerek devam ediyoruz. Projemizin türüne göre Java- Android - Web proje hangisi ise projenize uygun yeni bir proje seçerek oluşturuyoruz.


13) Daha sonra ise herşey yolunda ise proje dosyalarını eclipse indirmeye başlayacaktır ve indirme tamalandıktan sonra proje kullanılabilir olacaktır.



Gökhan Turan Aras