Android ile RESTful Web Servisi Kullanımı

Nisan 28, 2013

Merhaba arkadaşlar, Android ile diğer iletişim cihazları ile haberleşme konusunda web servisleri çok aktif bir şekilde kullanılmaktadır bu yazımızda RESTful servislerini inceleyeceğiz.Oldukça hızlı bir yapıya sahiptir veri tipi olarak json kullanıyor olacağız.Daha önceleri kullandığımız ksoap2 artık yavaş kalmakta ve geliştirilmemektedir.Android cihazdan servisi kullanmak için ilk önce Asp.Net ile bir sayfa hazırlayacağız ve bu sayfa da gelen paramereyi okuyarak local bilgisayarımızda bulunan veri tabanını sorgulayarak ulaştığımız veriyi json formatında yazdıracağız daha sonra Android ile yazacağımız uygulamada bu sayfaya istekde bulunarak geri dönen json veri yi okuyarak işlem yaypacağız RESTful ile ilgili daha detaylı bilgiye buradan ulaşabilirsiniz.

İlk olarak Asp.Net ile bir proje oluşturalım ve sayfamızda şu kodları yazalım

.Net projesinde Android ile bağlanacağımız sayfayı hazırlıyoruz.Bu kodları sayfanın Page_Load olayına yazıyoruz


            Response.Clear();
            Response.ClearContent();
            Response.ClearHeaders();

            int productID = Convert.ToInt32(Request.QueryString["ProductID"]);

            string strSonuc = "";

            try
            {
                string conStr = "data source=.;database=Northwind;user=Android;password=123456;Integrated Security=True;";

                SqlConnection connection = new SqlConnection(conStr);
                connection.Open();

                string sorgu = "select p.ProductID,p.ProductName,c.CategoryName,p.UnitPrice from Products p join " +
                                                    "Categories c on p.CategoryID = c.CategoryID where p.ProductID = @productID";

                SqlCommand cmd = new SqlCommand(sorgu, connection);
                cmd.Parameters.AddWithValue("@productID", productID);

                SqlDataReader reader = cmd.ExecuteReader();

                while (reader.Read())
                {
                    var nes = new
                    {
                        ProductID = reader["ProductID"].ToString(),
                        ProductName = reader["ProductName"].ToString(),
                        CategoryName = reader["CategoryName"].ToString(),
                        UnitPrice = reader["UnitPrice"].ToString()
                    };
                    strSonuc = new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(nes);
                }
            }
            catch (Exception ex)
            {
                strSonuc = "Hata : " + ex.Message;
            }

            Response.Write(strSonuc);

Bu kodlar yardımı ile url de parametre olarak gelen ProductID değerini okuyoruz ve local bilgisayırımda bulunan Northwind veri tabanına bağlantı kurarak Products tablosunda sorgulama yapıyoruz.Bu örneğimizde senaryo olarak kullanıcının ID bilgisine göre Products tablosunu sorgulamasını yapıyoruz.

Bu projeyi IIS altında yayınlayıp sayfaya bağlantı kurduğumuz zaman ise çıktısı şu şekildedir

Continue Reading »

Android ile Mssql Stored Procedure Kullanımı

Nisan 21, 2013

Android ile mssql server işlemlerine devam niteliğinde ki bu yazıda android ile Mssql stored procedure kullanmayı inceleyeceğiz.Daha önceki yazılarıma buradan ve buradan ulaşabilirsiniz.

Uygulamamızı local sql server ‘da bulunan Northwind veri tabanı üzerinde gerçekleştireceğiz.Northwind veri tabanı ile ilgili detaylı bilgiye buradan ulaşabilirsiniz.

Northwind veri tanbanını local Mssql server veri tabanına kurduktan sonra sorgulama için kullanacağımız stored procedure adı CustOrderHist

Sql server ‘daki kullanım şekli şöyledir

Continue Reading »

Android 4.0 ile Local Mssql Server Bağlantısı

Nisan 20, 2013

Merhaba arkadaşlar bir önceki android 2.2 sürümü ile yaptığım örnek üzerine oldukça fazla soru geldi genel anlamda sorular sql server bağlantı kurma ile ilgiliydi.Bir önceki yazıya buradan ulaşabilirsiniz.Şimdi ise android 4.0 sürümü üzerinden local bilgisayarımızdaki sql server ‘a bağlanacağız. Android 4.0 sürümü ile birlikte bazı yenilikler gelmiştir bunların en önemlisi main thread içerisinde artık direkt sql kodu yazamıyoruz daha doğrusu sadece sql sorgulamaları değil örneğin main thread içerisinden direkt web servisinede bağlanamayız yeni sürüm ile bazı noktalarda kısıtlamalar geldi bu örnek’de onlarada dikkat ederek kodumuzu yazacağız.Geliştireceğimiz örnek için bir tane uygulama oluşturalım 4.0 veya üzerin bir sürüm belirleyelim.Aşağıdaki ekran görüntüsünü hazırlayalım

activity_main.xml dosyası kodları


<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" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:orientation="horizontal" >

        <TextView
            android:layout_width="70dp"
            android:layout_height="fill_parent"
            android:layout_marginLeft="10dp"
            android:layout_marginTop="15dp"
            android:text="ID" />

        <EditText
            android:id="@+id/etID"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_marginRight="10dp" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="70dp"
        android:orientation="horizontal" >

        <TextView
            android:layout_width="70dp"
            android:layout_height="fill_parent"
            android:layout_marginLeft="10dp"
              android:layout_marginTop="15dp"
            android:text="Kategori" />

        <EditText
            android:id="@+id/etKategoriAdi"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_marginRight="10dp" />
    </LinearLayout>

    <LinearLayout
        android:id="@+id/linearLayout1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="130dp"
        android:orientation="horizontal" >

        <TextView
            android:layout_width="70dp"
            android:layout_height="fill_parent"
            android:layout_marginLeft="10dp"
              android:layout_marginTop="15dp"
            android:text="Açıklama" />

        <EditText
            android:id="@+id/etAciklama"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginRight="10dp" />
    </LinearLayout>

    <Button
        android:id="@+id/bSorgula"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:layout_marginTop="220dp"
        android:text="Sorgula" />

</RelativeLayout>

Ekran tasarımını bu şekilde yapmadaki amacımız local mssql veri tabanından ID bilgisine göre tablo sorgulayıp kategori ve açıklama bilgilerini ekrana almak.Bunun için

MainActivity.java sınıfı kodlarımız


package com.example.mssqlconnection;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends Activity implements OnClickListener {

	Button bSorgula;
	EditText etID, etKategoriAdi, etAciklama;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		bSorgula = (Button) findViewById(R.id.bSorgula);
		bSorgula.setOnClickListener(this);

		etID = (EditText) findViewById(R.id.etID);
		etKategoriAdi = (EditText) findViewById(R.id.etKategoriAdi);
		etAciklama = (EditText) findViewById(R.id.etAciklama);

	}

	@Override
	public void onClick(View v) {

		try {
			try {
				Class.forName("net.sourceforge.jtds.jdbc.Driver").newInstance();
			} catch (InstantiationException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IllegalAccessException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		new Thread(new Runnable() {

			public void run() {

				runOnUiThread(new Runnable() {
					public void run() {
						ResultSet results = null;

						try {
							Connection conn = DriverManager
									.getConnection(
											"jdbc:jtds:sqlserver://192.168.1.222:1433;databaseName=Northwind",
											"Android", "123456");

							Statement statement = conn.createStatement();
							statement = conn.createStatement(
									ResultSet.TYPE_SCROLL_INSENSITIVE,
									ResultSet.CONCUR_READ_ONLY);

							int ID = Integer.valueOf(etID.getText().toString());

							String sorgu = "SELECT CategoryID,CategoryName,Description FROM Categories WHERE CategoryID ="
									+ ID;

							results = statement.executeQuery(sorgu);

							results.last();
							int kayitSayisi = 0;
							if (results != null) {
								kayitSayisi = results.getRow();
							}
							results.beforeFirst();

							if (results != null && kayitSayisi != 0) {
								while (results.next()) {

									String kategoriAdi = results
											.getString("CategoryName");

									String aciklama = results
											.getString("Description");

									etKategoriAdi.setText(kategoriAdi);
									etAciklama.setText(aciklama);
								}

							} else {

							}

						} catch (SQLException e) {
							e.printStackTrace();
						}
					}
				});

			}
		}).start();

	}
}

Continue Reading »

Android Uygulamaya Dinamik Kontroller Ekleme

Ocak 18, 2013

Merhaba arkadaşlar, geliştirdiğimiz uygulamalarda sadece dizayn tarafından nesneleri ekleyerek işlem yaptırmak bazı durumlarda kullanışlı olmayabilir örneğin; Tüm kullanıcıları listelemeniz gerekiyor bu durumda uygulamanıza dinamik kontrolleri ekleyerek işinizi çok kolay bir şekilde yapabilirsiniz.Yapacağımız örnek için bir tane uygulama oluşturalım ve arayüz’e hiç bir kontrol eklemeyelim.Arayüz’de görünmesini istediğimiz kontrolleri kod tarafında istediğimiz şekilde ve boyutlarda biz hazırlayıp ekranda görünmesini sağlayacağız

.xml kodları


<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" >

    <LinearLayout
        android:id="@+id/llOrtaAlan"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >
    </LinearLayout>

</RelativeLayout>

Ana sınıf’daki kodlarımız


package com.example.dynamicapp;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.Toast;

public class MainActivity extends Activity {

	LinearLayout llOrtaAlan;

	Button btnOrnek1;
	EditText etDeger;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		// Arayüz de bulunan LinearLayout kontrol'üne ulaşılıyor
		llOrtaAlan = (LinearLayout) findViewById(R.id.llOrtaAlan);
		// Kontrol'ün Yatay & Dikey bilgisi atanıyor
		//llOrtaAlan.setOrientation(LinearLayout.HORIZONTAL); // Yatay
		 llOrtaAlan.setOrientation(LinearLayout.VERTICAL); // dikey

		// Ekranda görünmesi için dinamik olarak Button kontrol'ü hazrlanıyor
		btnOrnek1 = new Button(this);
		// Genişlik ve yükseklik bilgisi atanıyor
		LinearLayout.LayoutParams btnOrnek1Par = new LinearLayout.LayoutParams(
				160, 60);
		// Hazırlanan değerler atanıyor
		btnOrnek1.setLayoutParams(btnOrnek1Par);
		// Button kontrol'ünün text özelliği atanıyor
		btnOrnek1.setText("Örnek Btn 1");
		// Sol, Üst, Sağ, Alt boşluk bilgileri atanıyor
		btnOrnek1.setPadding(5, 0, 0, 0);
		// btnOrnek1.setPadding(left, top, right, bottom)
		btnOrnek1.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				Mesaj(etDeger.getText().toString());
			}
		});

		// Bilgi girişi yapılacak text kontrolü hazırlanıyor
		etDeger = new EditText(this);
		// Genişlik ve yükseklik bilgisi atanıyor
		LinearLayout.LayoutParams etPar = new LinearLayout.LayoutParams(250, 60);
		// Hazırlanan değerler atanıyor
		etDeger.setLayoutParams(etPar);

		// Hazırlanan kontrol arayüz'e ekleniyor
		llOrtaAlan.addView(btnOrnek1);
		llOrtaAlan.addView(etDeger);

	}

	private void Mesaj(String strMesaj) {
		Toast.makeText(this, strMesaj, Toast.LENGTH_LONG).show();
	}

}

Continue Reading »

SQLite Veri Tabanını Uygulama İçerisine Aktarma

Ocak 10, 2013



Merhaba arkadaşlar, Android ile uygulama geliştirirken özellikle uygulamamız local’de çalışacak ise en mantıklı veri tabanı sqlite olacaktır ama kod ile veri tabanı kontrolü bir yere kadar işimizi göreceği için ilk önce database manager ile ilgili yazılara bir göz atmanızı öneririm buradan ve buradan, şimdi ise elimizde hazır olarak bulunan bir .sqlite veri tabanını hazırladığımız uygulamanın içerisine nasıl import edeceğimize bakalım.


Eclipse içerisinde uygulamamızı oluşturduktan sonra uygulamamızın klasör’lerinin bulunduğu dizinde assets klasör’ü olması lazım, elimizdeki .sqlite uzantılı veri tabanı dosyasını bu klasör’ün içerisine kopyalayalım.Daha sonra ise uygulamamızın onCreate() method’unda ( veya herhangi istediğimiz başka bir anında ) aşağıdaki kodları yazalım


	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

        try {

			this.deleteDatabase("/data/data/"+ getPackageName() +"/databases/DB.sqlite");

			String dbPath = "/data/data/" + getPackageName()
					+ "/databases/DB.sqlite";

			File f = new File(dbPath);
			if (!f.exists()) {

				InputStream in = getAssets().open("DB.sqlite");
				OutputStream out = new FileOutputStream(dbPath);

				byte[] buffer = new byte[1024];
				int length;
				while ((length = in.read(buffer)) > 0) {
					out.write(buffer, 0, length);
				}
				in.close();
				out.close();
			}

		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

	}



İlk olarak deleteDatabase() ile veri tabanı varsa eski olanını siliyoruz daha sonra assets klasör’üne kopyaladığımız veri tabanını InputStream olarak okuyoruz ve oluşturduğumuz OutputStream ‘e yazdırıyoruz.Örnek kod’da kullanılan ayarlara sizde uyarsanız herhangi bir sıkıntı çıkmadan sqlite veri tabanınızı uygulamanıza import edebilirsiniz.




Android Firefox SQLite Manager Kullanımı

Ocak 10, 2013

Merhaba arkadaşlar, firefox’un çok güzel bir eklentisi olan SQLite manager uygulaması ile .sqlite uzantılı dosyaları nasıl hazırlayacağızı bir bakalım.İlk olarak eklentiyi kurmak için burayı ziyaret ederek eklentiyi tarayıcınıza kurunuz.Daha sonra firefox tarayıcınızı kapatıp açın ve Araçlar altında SQLite Manager kısmını açalım.

Continue Reading »

 
Powered by Wordpress and MySQL. Theme by Shlomi Noach, openark.org