Android uygulamamızın .Net Web Servisi ile haberleşmesine bir örnek yapacağız.
Android uygulamamızda butona basıldığında Edittext'imizde web servisimizden gelecek olan cevabı yazmasını sağlayacağız.
Önce .Net web servisimizin örnek kodları
using System.ComponentModel;
using System.Data;
using System.Web.Services;
namespace WebService1
{
/// <summary>
/// Summary description for Service1
/// </summary>
[WebService(Namespace = "http://192.168.1.10/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ToolboxItem(false)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
// [System.Web.Script.Services.ScriptService]
public class Service1 : System.Web.Services.WebService
{
[WebMethod]
public string HelloWorld()
{
return "Hello World";
}
}
}
Burada dikkat etmemiz gereken noktalardan birisi [WebService(Namespace= http://192.168.1.10/)] dir. Namespace alanı java tarafında isim olarak kullanılacaktır.IIS'e web servisimizi publish ettikten sonra bendeki IIS de http://192.168.1.10/HelloService.asmx şeklinde web servis çalışmaktadır bu da bir diğer önemli noktadır.
Web Servisimizde HelloWorld metodunu çağırdığımızda SOAP mesajı olarak bize cevap dönmektedir.
Android tarafına gelirsek
Burada da dikkat edilecek bir nokta ksoap2 kütüphanesinin (jar) projeye import edilmesi gereklilidir. Buradaki linkten android için olanı indirebilirsiniz.
java kodlarımız
Ekran için kodlar
<?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"
>
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/edt_goster"
/>
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/btn_goster"
/>
</LinearLayout>
Ayrıca manifest dosyasına
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
satırını eklemeyi unutmuyoruz, çünkü bu uygulamızın internet erişimine açılmasını sağlamaktadır.Manifest dosyamız
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.mustafayildirim.android.example.webservice"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".main"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-sdk android:minSdkVersion="7" />
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
</manifest>
Uygulamaya ait java kaynak kodları:
package org.mustafayildirim.android.example.webservice;
import java.io.IOException;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import org.ksoap2.*;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.AndroidHttpTransport;
import org.xmlpull.v1.XmlPullParserException;
public class main extends Activity {
/** Called when the activity is first created. */
private static final String SOAP_ACTION = "http://192.168.1.10/HelloWorld";
private static final String METHOD_NAME = "HelloWorld";
private static final String NAMESPACE = "http://192.168.1.10/";
private static final String URL = "http://192.168.1.10/HelloService.asmx";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final Button btn_goster = (Button) findViewById(R.id.btn_goster);
final EditText edt_goster = (EditText) findViewById(R.id.edt_goster);
btn_goster.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
AndroidHttpTransport httpTransport = new AndroidHttpTransport(URL);
SoapPrimitive result = null;
try {
httpTransport.call(SOAP_ACTION, envelope);
result = (SoapPrimitive) envelope.getResponse();
edt_goster.setText(result.toString());
} catch (IOException e) {
// TODO Auto-generated catch block
edt_goster.setText(e.getMessage());
} catch (XmlPullParserException e) {
// TODO Auto-generated catch block
edt_goster.setText(e.getMessage());
}
}
});
}
}
Burada SOAP_ACTION uygulamamıza gelen soap mesajı parse edilirken burayı dikkate alır.
Android emülatorü kendisi localhost'u kullandığı için IP yerine localhost yazarsanız hata alacak ya da çalışmayacaktır.
.Net Web Servisi ekran görüntüsü
Android tarafı ekran görüntüsü
Buradaki linkte .Net web servisi örneği mevcuttur.
Buradaki linkte Android uygulaması örneği mevcuttur.