+44(0) 1234 567 890 info@domainname.com

2012-12-13

Trường ĐH Sư Phạm Kỹ Thuật Tp. HCM
Khoa Công Nghệ Thông Tin
No comments

2012-11-30

Gọi Web Service từ ứng dụng Android sử dụng KSOAP



  • Vào File → New → Mục Android → Ta chọn Android Application Project

  • Đặt tên ứng dụng Android là KetQuaXoSoClient và tùy chỉnh như hình sau:

  • Chọn Next, và Next để tiến hành cấu hình Launcher Icon

  • Chọn Next

  • Đặt tên cho Activity
  • Chọn Finish
  • Trong res/layout/activity_main ta thiết kết 3 spinner và một listview để lấy kết quả về:
<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:background="@android:color/darker_gray" >

    <Spinner
        android:id="@+id/spDanhSachMien"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:prompt="@string/spinner_mien"
        android:spinnerMode="dropdown" />

    <Spinner
        android:id="@+id/spDanhSachTinh"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/spDanhSachMien"
        android:prompt="@string/spinner_ngay"
        android:spinnerMode="dropdown" />

    <Spinner
        android:id="@+id/spDanhSachNgay"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/spDanhSachTinh"
        android:prompt="@string/spinner_tinh"
        android:spinnerMode="dropdown" />

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_below="@+id/spDanhSachNgay" >

        <ListView
            android:id="@+id/lvKetQua"
            android:layout_width="match_parent"
            android:layout_height="fill_parent"
            android:scrollbars="vertical" >
        </ListView>
    </LinearLayout>

</RelativeLayout>
  • Trong res/value/string.xml tra khai báo như sau:
<resources>

     <string name="app_name">Kết quả sổ xố</string>
     <string name="hello_world">Hello world!</string>
     <string name="menu_settings">Settings</string>
     <string name="title_activity_main">Kết quả sổ xố</string>

     <string name="spinner_mien">Chọn miền</string>
     <string name="spinner_tinh">Chọn Tỉnh/Thành Phố</string>
     <string name="spinner_ngay">Chọn ngày xổ số</string>

</resources>
  • Trong AndroidManifest.xml ta khai báo quyền sử dụng Internet
<?xml version="1.0" encoding="utf-8"?>
<manifest ...>
     <uses-permission android:name="android.permission.INTERNET" />
     ...
</manifest>
  • Thêm thư viện ksoap đã download ở bước chuẩn bị trên vào libs

package hcmute.kqxs.client;

import java.io.IOException;
import java.util.ArrayList;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import org.xmlpull.v1.XmlPullParserException;

import android.util.Log;

public class TienIch {
   private static String METHOD_NAME_1 = "getDanhSachMien";
   private static String METHOD_NAME_2 = "getDanhSachTinh";
   private static String METHOD_NAME_3 = "getDanhSachNgay";
   private static String METHOD_NAME_4 = "getDanhSachKetQua";

   private static String NAMESPACE = "http://kqsx.hcmute";
   private static String SOAP_ACTION_1 = NAMESPACE + METHOD_NAME_1;
   private static String SOAP_ACTION_2 = NAMESPACE + METHOD_NAME_2;
   private static String SOAP_ACTION_3 = NAMESPACE + METHOD_NAME_3;
   private static String SOAP_ACTION_4 = NAMESPACE + METHOD_NAME_4;

   private static final String URL = "http://192.168.42.108:8080/KetQuaXoSoServer/services/KetQuaXoSo?wsdl";

   public ArrayList<String> getDanhSachMien() {
        SoapObject resultSoap = null;
        try {
             SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME_1);
             SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
                        SoapEnvelope.VER11);
             envelope.dotNet = true;
             envelope.setOutputSoapObject(request);
             HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);

             androidHttpTransport.call(SOAP_ACTION_1, envelope);
             resultSoap = (SoapObject) envelope.bodyIn;// envelope.getResponse();
        } catch (IOException e) {
        } catch (XmlPullParserException e) {
        } catch (Exception e) {
        }

        ArrayList<String> result = new ArrayList<String>();
        for (int i = 0; i < resultSoap.getPropertyCount(); i++) {
             Log.i("ChuNT", resultSoap.getProperty(i).toString());
             result.add(resultSoap.getProperty(i).toString());
        }

        return result;
   }

   public ArrayList<String> getDanhSachTinh(String tenMien) {
        Log.i("ChuNT", "Hàm lấy danh sách đang tìm kết quả từ dịnh vụ web cho "
                   + tenMien);
        SoapObject resultSoap = null;
        try {
             SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME_2);
             request.addProperty("tenMien", tenMien);
             SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
                        SoapEnvelope.VER11);
             envelope.dotNet = true;
             envelope.setOutputSoapObject(request);
             HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);

             androidHttpTransport.call(SOAP_ACTION_2, envelope);
             resultSoap = (SoapObject) envelope.bodyIn;// envelope.getResponse();
        } catch (IOException e) {
        } catch (XmlPullParserException e) {
        } catch (Exception e) {
        }

        ArrayList<String> result = new ArrayList<String>();
        for (int i = 0; i < resultSoap.getPropertyCount(); i++) {
             Log.i("ChuNT", resultSoap.getProperty(i).toString());
             result.add(resultSoap.getProperty(i).toString());
        }

        return result;
   }

   public ArrayList<String> getDanhSachNgay(String tenMien, String tenTinh) {
        SoapObject resultSoap = null;
        try {
             SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME_3);
             request.addProperty("tenMien", tenMien);
             request.addProperty("tenTinh", tenTinh);
             SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
                        SoapEnvelope.VER11);
             envelope.dotNet = true;
             envelope.setOutputSoapObject(request);
             HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);

             androidHttpTransport.call(SOAP_ACTION_3, envelope);
             resultSoap = (SoapObject) envelope.bodyIn;// envelope.getResponse();
        } catch (IOException e) {
        } catch (XmlPullParserException e) {
        } catch (Exception e) {
        }

        ArrayList<String> result = new ArrayList<String>();
        for (int i = 0; i < resultSoap.getPropertyCount(); i++) {
             Log.i("ChuNT", resultSoap.getProperty(i).toString());
             result.add(resultSoap.getProperty(i).toString());
        }

        return result;
   }

   public ArrayList<String> getDanhSachKetQua(String tenMien,
             String tenTinh, String ngayXoSo) {
        SoapObject resultSoap = null;
        try {
             SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME_4);
             request.addProperty("tenMien", tenMien);
             request.addProperty("tenTinh", tenTinh);
             request.addProperty("ngayXoSo", ngayXoSo);
             SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
                        SoapEnvelope.VER11);
              envelope.dotNet = true;
             envelope.setOutputSoapObject(request);
             HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);

             androidHttpTransport.call(SOAP_ACTION_4, envelope);
             resultSoap = (SoapObject) envelope.bodyIn;// envelope.getResponse();
        } catch (IOException e) {
        } catch (XmlPullParserException e) {
        } catch (Exception e) {
        }

        ArrayList<String> result = new ArrayList<String>();
        for (int i = 0; i < resultSoap.getPropertyCount(); i++) {
             Log.i("ChuNT", resultSoap.getProperty(i).toString());
             result.add(resultSoap.getProperty(i).toString());
        }

        return result;
   }
}
  • String URL = "http://192.168.42.108:8080/KetQuaXoSoServer/services/KetQuaXoSo?wsdl";để lưu đường dẫn cung cấp dịch vụ web.
  • private String METHOD_NAME…Để lưu phương thức được cung cấp trong dịch vụ web 
  • private String NAMESPACE …Package và namespace được đảo ngược chuỗi
package hcmute.kqxs.client;

import java.util.ArrayList;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Spinner;

public class MainActivity extends Activity {

   Spinner spDanhSachMien;
   Spinner spDanhSachTinh;
   Spinner spDanhSachNgay;
   ListView lvKetQua;

   ArrayAdapter<String> arrayAdapterMien;
   ArrayAdapter<String> arrayAdapterTinh;
   ArrayAdapter<String> arrayAdapterNgay;
   ArrayAdapter<String> arrayAdapterKetQua;

   String tenMien;
   String tenTinh;
   String ngayXoSo;

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

        spDanhSachMien = (Spinner) findViewById(R.id.spDanhSachMien);
        spDanhSachTinh = (Spinner) findViewById(R.id.spDanhSachTinh);
        spDanhSachNgay = (Spinner) findViewById(R.id.spDanhSachNgay);
        lvKetQua = (ListView) findViewById(R.id.lvKetQua);

        arrayAdapterMien = new ArrayAdapter<String>(this,
                   android.R.layout.simple_spinner_item);
        arrayAdapterTinh = new ArrayAdapter<String>(this,
                   android.R.layout.simple_spinner_item);
        arrayAdapterNgay = new ArrayAdapter<String>(this,
                   android.R.layout.simple_spinner_item);
        arrayAdapterKetQua = new ArrayAdapter<String>(this,
                   android.R.layout.simple_list_item_1);

        spDanhSachMien.setAdapter(arrayAdapterMien);
        spDanhSachTinh.setAdapter(arrayAdapterTinh);
        spDanhSachNgay.setAdapter(arrayAdapterNgay);
        lvKetQua.setAdapter(arrayAdapterKetQua);

        arrayAdapterMien.add("Chọn miền xổ số");
        arrayAdapterTinh.add("Chọn tỉnh xổ số");
        arrayAdapterNgay.add("Chọn ngày xổ số");

        ArrayList<String> temp = new TienIch().getDanhSachMien();

        for (String string : temp) {
             arrayAdapterMien.add(string);
        }

        spDanhSachMien.setOnItemSelectedListener(spDanhSachMienSelected);
        spDanhSachTinh.setOnItemSelectedListener(spDanhSachTinhSelected);
        spDanhSachNgay.setOnItemSelectedListener(spDanhSachNgaySelected);
   }

   OnItemSelectedListener spDanhSachMienSelected = new OnItemSelectedListener() {
        public void onItemSelected(AdapterView<?> parent, View arg1,
                   int position, long arg3) {
             tenMien = parent.getItemAtPosition(position).toString();
             Log.i("ChuNT", tenMien);
             ArrayList<String> temp = new TienIch().getDanhSachTinh(tenMien);
             spDanhSachTinh.setSelection(0);
             spDanhSachNgay.setSelection(0);
             arrayAdapterTinh.clear();
             arrayAdapterTinh.add("Chọn tỉnh xổ số");
             for (String string : temp) {
                   arrayAdapterTinh.add(string);
             }
        }

        public void onNothingSelected(AdapterView<?> arg0) {

        }
   };

   OnItemSelectedListener spDanhSachTinhSelected = new OnItemSelectedListener() {
        public void onItemSelected(AdapterView<?> parent, View arg1,
                   int position, long arg3) {
             tenTinh = parent.getItemAtPosition(position).toString();
             Log.i("ChuNT", tenTinh);
             ArrayList<String> temp = new TienIch().getDanhSachNgay(tenMien,
                        tenTinh);
             spDanhSachNgay.setSelection(0);
             arrayAdapterNgay.clear();
             arrayAdapterNgay.add("Chọn ngày xổ số");
             for (String string : temp) {
                   arrayAdapterNgay.add(string);
             }
        }

        public void onNothingSelected(AdapterView<?> arg0) {

        }
   };

   OnItemSelectedListener spDanhSachNgaySelected = new OnItemSelectedListener() {
        public void onItemSelected(AdapterView<?> parent, View arg1,
                   int position, long arg3) {
             ngayXoSo = parent.getItemAtPosition(position).toString();
             Log.i("ChuNT", ngayXoSo);
             ArrayList<String> temp = new TienIch().getDanhSachKetQua(tenMien,
                        tenTinh, ngayXoSo);
             arrayAdapterKetQua.clear();
             for (String string : temp) {
                   arrayAdapterKetQua.add(string);
             }
        }

        public void onNothingSelected(AdapterView<?> arg0) {

        }
   };
}


Tổng kết

Như vậy qua phần này mình đã hướng dẫn các bạn cách  gọi một web service thông qua dịch vụ web dùng SOAP để trả kết quả về dạng XML. Ta dùng thư viện mã nguồn mở KSOAP để gọi web service đó. 
10 comments