KodFeed İLMİN ZEKATI…

23Eyl/110

An SDK Target must be specified

Android DeveloperAndroid için Eclipste uygulama oluştururken karşılacağınız bu uyarı mesajından da anlaşılacağı gibi; yazacağını uygulamanın hangi sdk için derleneceğini seçmeniz gerekmektedir. Build Target Listesi boş geldiğinden dolayı seçim yapamıyorsanız; Eclipste Windows -> Preferences -> Android sayfasına gidiniz ve Android SDK adresini ayarlayıp uygula deyiniz. Eğer herhangi bir hata almazsanız, derleyebileceğiniz sdk listelerini görebileceksinizdir. Bu aşamadan sonra projeyi tekrar oluşturursanız bu hatayı almayacaksınız.

Burada dikkat etmeniz diğer bir husus; Android SDK adresini düzenlerken adres satırında boşluk kullanmamanız gerekmektedir. Aksi taktirde;

[2011-09-07 01:07:15 - Emulator] invalid command-line parameter: Files.
[2011-09-07 01:07:15 - Emulator] Hint: use '@foo' to launch a virtual device named 'foo'.
[2011-09-07 01:07:15 - Emulator] please use -help for more information

şeklinde bir hata ile karşılaşırsınız. Detaylı bilgi için burayı okuyabilirsiniz.

VN:F [1.9.14_1148]
Rating: 10.0/10 (1 vote cast)
VN:F [1.9.14_1148]
Rating: +1 (from 1 vote)
Etiketler: , Yorum yok
12Eyl/110

INSTALL_FAILED_MISSING_SHARED_LIBRARY Hatası

Android DeveloperBu hatayı alıyor iseniz, kullanmış olduğunuz kütüphanelerden bir veya birkaçını yüklememiş olabilirsiniz. Ben bu hatayı com.google.android.maps kütüphanesini kullanırken aldım ve Android SDK & AVD Manager > Available packages > Third party Add-ons altında bulunan Google Api'yi kurun. Bundan sonra yeni bir avd oluşturup, projenizi bu avd ile çalıştırınız. Ben de işe yaradı.

VN:F [1.9.14_1148]
Rating: 9.0/10 (2 votes cast)
VN:F [1.9.14_1148]
Rating: +1 (from 1 vote)
Etiketler: , Yorum yok
10Eyl/110

Android ve WebService

Android DeveloperAndroid uygulamanızda webservice bağlantısı için ksoap2 kütüphanesini kullanacağız. Projeye ksoap2 kütüphanesini import etmeniz gerekiyor. Kütüphaneyi buradan indirebilirsiniz. Webservis olarak webservisin nasıl yazıldığı konusuna bu yazımda değinmeyeceğim. Web Servis  W3School'un örnek webservisini kullanacağız.

Ksoap2 Kütüphanesini import etmek için projemize sağ tıklayıp "Build Path"den "Configure Build Path"e tıklıyoruz. Libraries sekmesinde "Add External JARs" butonuna tıklayınız ve indirmiş olduğunuz ksoap2.jar dosyasını ekleyiniz.

Şimdi uygulamamıza başlayabiliriz. W3School'un webservisi Celsius - Fahrenheit dönüşümü yaptığından dolayı bizim uygulamamızda bu yönde olacaktır. Uygulamamız internete bağlanacağından dolayı izin verilmesi gerekiyor. Bundan dolayı projemizdeki AndroidManifest.xml dosyasına aşağıdaki satırın eklenmesi gerekiyor.

<uses-permission android:name="android.permission.INTERNET"/>

-
Manifest dosyasını editledikten sonra uygulama ekranımızı düzenleyelim. Ekranımızda bir adet EditText, bir adet TextView ve iki adet buton olacaktır. Butonlardan biri celsius verisini fahrenheit'a dönüştürürken, diğeri fahrentheit değerini celciusa dönüştürecektir. Layoutun tamamı aşağıda yer almaktadır.

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:weightSum="1">
<EditText android:layout_height="wrap_content" android:layout_width="match_parent" android:id="@+id/txtValue">
<requestFocus></requestFocus>
</EditText>
<Button android:layout_height="wrap_content" android:id="@+id/btnConverToFahren" android:layout_gravity="center" android:clickable="false" android:text="Celsius2Fahren" android:layout_weight="0.01" android:layout_width="148dp"></Button>
<Button android:layout_height="wrap_content" android:id="@+id/btnConverToCelsius" android:layout_gravity="center" android:clickable="false" android:text="Fahren2Celsius" android:layout_weight="0.01" android:layout_width="148dp"></Button>
<TextView android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceSmall" android:id="@+id/lblResult" android:layout_gravity="center" android:layout_weight="0.14" android:layout_width="match_parent"></TextView>
</LinearLayout>

Programın çalışmasını bir posta hizmetine benzetebiliriz. Öncelikle SoapObject nesnemizi oluşturuyoruz. Bu nesne bizim mektubumuz olarak düşünebilirsiniz. Mektupta isteklerimizi yazıyoruz ve göndermek için zarfa koyuyoruz. Burada zarf görevini üstlenen nesnemiz SoapSerializationEnvelope. Bu işlemden sonra mektubumuzu artık yollayacağız. HttpTransportSE nesnesi bizim mektubumuzu iletecek servis sağlayıcımız PTT olarak düşünebilirsiniz. Bu aşamadan sonra tek yapmamız gereken mektuba cevap beklemek :)

java kodları:

package android.Package;

import java.io.IOException;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.SoapFault;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import org.xmlpull.v1.XmlPullParserException;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.EditText;

public class TestAndroidActivity extends Activity {
	private Button converToCelciusButton;
	private Button converToFahrenButton;
	private EditText valuText;
	private TextView result;
    final static String NAMESPACE = "http://tempuri.org/";
    final static String SERVICEURL = "http://www.w3schools.com/webservices/tempconvert.asmx";

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        converToFahrenButton = (Button)findViewById(R.id.btnConverToFahren);
        converToCelciusButton = (Button)findViewById(R.id.btnConverToCelsius);
        valuText = (EditText)findViewById(R.id.txtValue);
        result = (TextView)findViewById(R.id.lblResult);

        converToCelciusButton.setOnClickListener(new View.OnClickListener() {

			public void onClick(View v) {
				//Celsius'a çevirmek için webservice invoke ediyoruz ve sonucu ekrana yazdırıyoruz.
				result.setText(invokeConverToCelciusWs());
			}
		});
        converToFahrenButton.setOnClickListener(new View.OnClickListener() {

			public void onClick(View v) {
				//Celsius'a çevirmek için webservice invoke ediyoruz ve sonucu ekrana yazdırıyoruz.
				result.setText(invokeConverToFahrenWs());
			}
        });
    }

    public String invokeConverToCelciusWs()
    {
    	String responseValue = "";
    	//Webservisten istek için SoapObect create ediliyor. WebServiste hangi fonksiyon çalıştırılacak belirliyor.
    	SoapObject request = new SoapObject(NAMESPACE, "CelsiusToFahrenheit");
    	//Invoke edeceğimiz foksiyona ait değişkenlere değer atıyor.
    	request.addProperty("Celsius", valuText.getText().toString());
    	//Kullanılacak versiyon bilgisi ile SoapSerializationEnvelope create ediyoruz.
    	//Adıdan da anlaşılacağı üzere Zarf görevini üstlenen bu nesnenin içine istekde bulunduğumuz değerleri setleyeceğiz.
    	SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
    	//WebService .Net'te yazılmış ise bu değişkeni true yapmamız gerekiyor.
    	soapEnvelope.dotNet = true;
    	//yukarıda bahsettiğimiz gibi isteğimizi zarf'a koyuyoruz :)
    	soapEnvelope.setOutputSoapObject(request);

    	HttpTransportSE aht = new HttpTransportSE(SERVICEURL);
    	try {
    	    	//Artık webservisi invoke etmenin zamanı geldi. Bilgilerin hangi SoapAction'a yollayacağımızı ve hangi bilginin gönderileceğini ayarladık.
       		aht.call("http://tempuri.org/CelsiusToFahrenheit", soapEnvelope);
    	} catch (IOException e) {
    		e.printStackTrace();
    	} catch (XmlPullParserException e) {
    		e.printStackTrace();
    	}
    	try
    	{
    	    	//Gelen cevabı alıyoruz.
    		responseValue = "Fahrenheit:" + (SoapPrimitive) soapEnvelope.getResponse();
    	} catch (SoapFault e) {
    		e.printStackTrace();
    	}
    	return responseValue;
    }

    public String invokeConverToFahrenWs()
    {
    	String responseValue = "";
    	SoapObject request = new SoapObject(NAMESPACE, "FahrenheitToCelsius");
    	request.addProperty("Fahrenheit", valuText.getText().toString());
    	SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
    	soapEnvelope.dotNet = true;
    	soapEnvelope.setOutputSoapObject(request);

    	HttpTransportSE aht = new HttpTransportSE(SERVICEURL);
    	try {
    	aht.call("http://tempuri.org/FahrenheitToCelsius", soapEnvelope);
    	} catch (IOException e) {
    		e.printStackTrace();
    	} catch (XmlPullParserException e) {
    		e.printStackTrace();
    	}
    	try
    	{
    	responseValue = "Celcius:" + (SoapPrimitive) soapEnvelope.getResponse();
    	} catch (SoapFault e) {
    		e.printStackTrace();
    	}
    	return responseValue;
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event)
    {
    	if(keyCode == KeyEvent.KEYCODE_BACK)
    	{
    		AlertDialog.Builder builder = new AlertDialog.Builder(this);
    	    builder.setMessage("Uygulamadan çıkmak istediğinize emin misiniz?")
    	           .setCancelable(false)
    	           .setPositiveButton("Evet", new DialogInterface.OnClickListener() {
    	               public void onClick(DialogInterface dialog, int id) {
    	            	   TestAndroidActivity.this.finish();
    	               }
    	           })
    	           .setNegativeButton("Hayır", new DialogInterface.OnClickListener() {
    	               public void onClick(DialogInterface dialog, int id) {
    	                    dialog.cancel();
    	               }
    	           });
    	    AlertDialog alert = builder.create();
    	    alert.show();
    	    return true;
    	}
    	else
    	{
    		return super.onKeyDown(keyCode, event);
    	}
    }
}

Kaynaklar:

  1. http://www.helloandroid.com/tutorials/using-ksoap2-android-and-parsing-output-data
  2. http://www.getitandroid.com/programlama/77-android-ksoap2-kullanarak-android-uezerinden-web-servislere-eriim.html
  3. http://mustafa-yildirim.blogspot.com/2010/09/android-net-web-servis-baglants.html
VN:F [1.9.14_1148]
Rating: 6.5/10 (2 votes cast)
VN:F [1.9.14_1148]
Rating: +1 (from 1 vote)
Araç Takip | Araç Takip| Araç Takip