Thứ tư, ngày 22 tháng 11 năm 2017

Gọi Webservice viết bằng .net bằng Ksoap2-Android

Ngày đăng: 4/11/2011, 17:9:29PM | Lượt xem: 21,627
Hot!

 

 Đây là tutorial rất hay mình thấy trên vietandroid up lại lên đây cho các bạn tham khảo và để tiện mình dễ tìm (để lâu ko nhớ link)

Bước 1 
Tạo database và stored procedure

database mình dùng sql2005
database trong bài tut có dạng 
ID-----varchar
TenPhim-----nVarchar
Daodien-----nvarchar

Tạo store procedure:

CREATE Procedure [sp_Phim_SelectAll]
As
Begin
    Select 
        [IDphim],
        [TenPhim],
        [DaoDien]
    From TblPhimtest
End

Bước 2:
Tạo webservice:
Chú ý: cnnstring các bạn phải sửa để có thể connect đến database
tạo file class sqlserv.cs
các bạn nhớ using System.Data.Sqlclient

public DataSet getphimall()
    {
        DataSet ds1 = new DataSet();
        try
        {
            SqlConnection cnn = new SqlConnection(cnnstring);
            SqlCommand cmd = new SqlCommand("sp_Phim_SelectAll", cnn);
            cmd.CommandType = CommandType.StoredProcedure;
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            da.Fill(ds1);
            return ds1;
        }
        catch(Exception e)
        {
            return null;
        }
    }

Tạo webservice:
các bạn nhớ using System.Data 

[WebMethod]
    public DataSet phimall()
    {
        sqlserv phim1 = new sqlserv();

        return phim1.getphimall();
    }

Bước 3:Các bạn tạo project trong eclipse
Ở đây mình tạo riêng 1 class để lấy data

package at.Example;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.AndroidHttpTransport;

public class phim {
        String tenphim;
        String daodien;
        
        public phim getallphim()
        {
            final String SOAP_ACTION = "http://tempuri.org/phimall";
            final String METHOD_NAME = "phimall";
            final String NAMESPACE = "http://tempuri.org/";
            final String URL = "http://10.0.2.2:1701/WebSer1/exm1.asmx";
            //những cái trên nếu webservice của bạn tên khác thì phải đổi


            SoapObject table = null;                        // Cái này chứa table của dataset trả về thông qua SoapObject
            SoapObject client = null;                        // Its the client pettition to the web service(đoan này mình cũng chưa rõ)
            SoapObject tableRow = null;                        // Chứa hàng của bảng
            SoapObject responseBody = null;                    // Chứa nội dung XML của dataset
            AndroidHttpTransport transport = null;            // cái này để gọi webservice
            SoapSerializationEnvelope sse = null;
            //cái này trong tut viết thế, mình lười đổi tên


            sse = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
            sse.addMapping(NAMESPACE, "phim", this.getClass());
            //chú ý nếu class(ở trên đầu í) ko phải là phim thì đổi
            sse.dotNet = true; // .NET thì chọn true
            AndroidHttpTransport androidHttpTransport = new AndroidHttpTransport(URL);

            phim setphim = new phim();
            try 
            {
                client = new SoapObject(NAMESPACE, METHOD_NAME);
                sse.setOutputSoapObject(client);
                sse.bodyOut = client;
                androidHttpTransport.call(SOAP_ACTION, sse);
                
                // bước này lấy cả file XML
                responseBody = (SoapObject) sse.getResponse();
                // bước này bỏ các thông tin XML chỉ lấy kết quả trả về
                responseBody = (SoapObject) responseBody.getProperty(1);
                // Lấy thông tin XML của bảng trả về
                table = (SoapObject) responseBody.getProperty(0);
                //Ở đây lấy thông tin từng dòng của table, bạn chú ý 0 là dòng đầu tiên
                tableRow = (SoapObject) table.getProperty(0);
                setphim.daodien = tableRow.getProperty("DaoDien").toString();
                setphim.tenphim = tableRow.getProperty("TenPhim").toString();
                return setphim;
                
            } catch (Exception e) 
            {
                setphim.daodien = e.toString();
                setphim.tenphim = e.toString();
                return setphim;
            }
            
        }
        
}

ở main.xml các bạn tạo 2 textview

<?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"
    >
<TextView
    android:id="@+id/txt1"  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    />
<TextView
    android:id="@+id/txt2"    
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    />
</LinearLayout>

tạo file tabnewjava để chạy ct

package at.Example;

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

public class tabnew extends Activity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            TextView te1 = (TextView)findViewById(R.id.txt1);
            TextView te2 = (TextView)findViewById(R.id.txt2);
            phim newphim = new phim();
            newphim = newphim.getallphim();
            te1.setText(newphim.daodien);
            te2.setText(newphim.tenphim);
        }
}

Các bạn nhớ set quyền INTERNET trong Manifest
Trên đây mình chỉ lấy 1 bản ghi ra thôi
Nếu muôn lấy tất cả bản ghi thì các bạn dùng ArrayList và vòng for là ok

Còn nếu web service  viết = java

bạn có thể cho webservice trả data về dạng Arraylist
Nếu data trả về có dạng Arraylist hay cụ thể định dạng file xml trả về nó ntn:

<?xml version="1.0" encoding="utf-8" ?> 
- <ArrayOfAnyType xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/">
  <anyType xsi:type="xsd:string">Thor</anyType> 
  <anyType xsi:type="xsd:string">Kenneth Branagh</anyType> 
  <anyType xsi:type="xsd:string">Priest</anyType> 
  <anyType xsi:type="xsd:string">Scott Charles Stewart</anyType> 
  <anyType xsi:type="xsd:string">Immortals</anyType> 
  <anyType xsi:type="xsd:string">Tarsem Singh</anyType> 
  <anyType xsi:type="xsd:string">Transformers: Dark of the Moon</anyType> 
  <anyType xsi:type="xsd:string">Michael Bay</anyType> 
  <anyType xsi:type="xsd:string">Fast Five</anyType> 
  <anyType xsi:type="xsd:string">Justin Lin</anyType> 
  <anyType xsi:type="xsd:string">Rio</anyType> 
  <anyType xsi:type="xsd:string">Carlos Saldanha</anyType> 
  </ArrayOfAnyType>

thì bạn tạo class javaphim 

package at.Example;

import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.AndroidHttpTransport;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;

public class javaphim {
        ArrayList<String> tenphim;
        int slbg = 0;
        
        public javaphim getallphim1()
        {
            final String SOAP_ACTION = "http://tempuri.org/phimall2";
            final String METHOD_NAME = "phimall2";
            final String NAMESPACE = "http://tempuri.org/";
            final String URL = "http://10.0.2.2:4934/WebSer1/exm1.asmx";
            //webservice java của bạn phải đổi mấy cái trên đấy.
            
            SoapObject client = null;                        
            SoapObject responseBody = null;                    
            AndroidHttpTransport transport = null;            
            SoapSerializationEnvelope sse = null;
            
            sse = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
            sse.addMapping(NAMESPACE, "javaphim", this.getClass());
            sse.dotNet = false; //cái này webservice java chắc phải để false
            AndroidHttpTransport androidHttpTransport = new AndroidHttpTransport(URL);
            javaphim setphim = new javaphim();
            try 
            {
                // gọi webservice
                client = new SoapObject(NAMESPACE, METHOD_NAME);
                //ở đây để truyền tham số vào webservice
                sse.setOutputSoapObject(client);
                sse.bodyOut = client;
                androidHttpTransport.call(SOAP_ACTION, sse);
                
                // Lấy nd cả file XML
                responseBody = (SoapObject) sse.getResponse();
                //đếm số bản ghi trong file
                setphim.slbg = responseBody.getPropertyCount();
                setphim.tenphim = new ArrayList<String>();
                for (int i = 0; i < setphim.slbg; i++) 
                {;
                    setphim.tenphim.add(responseBody.getProperty(i).toString());
                }
                return setphim;
                
            } catch (Exception e) 
            {
                setphim.tenphim.add(e.toString());
                setphim.slbg = 0;
                return setphim;
            }
            
        }
        
        
}

Tiếp theo thì tạo file để chạy ct, ở đây mình lười nên đổ ra luôn listview

package at.Example;

import java.util.ArrayList;

import android.app.ListActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;

public class tabnew extends ListActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        
        javaphim newphim = new javaphim();
        newphim = newphim.getallphim1();
        ArrayList<String> array1 = newphim.tenphim;
        setListAdapter(new ArrayAdapter<String>(this,
                  android.R.layout.simple_list_item_1, array1));
        
    }

}

tham khảo thêm http://fszlin.blogspot.com/2010/05/comsuming-wcf-services-with-android.html

doanhkisi
 Chia sẻ qua: 
Hot!
Ý kiến bạn đọc

These items will be permanently deleted and cannot be recovered. Are you sure?

Gallery

image

Maecenas viverra rutrum pulvinar

Maecenas viverra rutrum pulvinar! Aenean vehicula nulla sit amet metus aliquam et malesuada risus aliquet. Vestibulum rhoncus, dolor sit amet venenatis porta, metus purus sagittis nisl, sodales volutpat elit lorem…

Read more

Text Links

Thiết kế logo chuyên nghiệp Insky
DAFABET
W88 w88b.com/dang-ky-tai-khoan-w88
W88
ca do bong da online
Copyright © 2011 - 2012 vietshare.vn by phamkhuong102@gmail.com doanhkisi2315@gmail.com. All rights reserved.