Nusoap + Android = Good Program

Đôi lúc bạn cũng phân vân REST và SOAP, chúng ta nên sử dụng cái nào cho ứng dụng của mình. Thực tế đúng là không có cái nào là tốt nhất, REST bạn nên sử dụng cho những ứng dụng mà khi client truy cập tới tiêu tốn ít băng thông, dễ sử lý , và những giao thức mà REST hỗ trợ chỉ có HTTP và HTTPS … Còn SOAP tuy yêu cần bạn cần biết nhiều hơn về Xml + cấu trúc của SOAP …, SOAP có tính bảo mật cao hơn, thích hợp với những ứng dụng cho với webservice cung cấp các thông tin đòi hỏi yêu tố về bảo mật … Hôm nay mạo muội chia sẻ cách sử dụng Nusoap kết hợp với Android, bạn hoàn toàn có thể cho ra ứng dụng đủ điều kiện để người dùng tải về một cách khoái trí vào dế yêu của bạn.

Bạn download nusoap (google), file server của chúng ta:

<?php

//Copyright (C) 2010  Jonathan Preece
//
//This program is free software: you can redistribute it and/or modify
//it under the terms of the GNU General Public License as published by
//the Free Software Foundation, either version 3 of the License, or
//(at your option) any later version.
//
//This program is distributed in the hope that it will be useful,
//but WITHOUT ANY WARRANTY; without even the implied warranty of
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//GNU General Public License for more details.
//
//You should have received a copy of the GNU General Public License
//along with this program.  If not, see <http://www.gnu.org/licenses/>.

        require_once("lib/nusoap.php");
        
        $namespace = "http://localhost/demo/server.php";
        
        // create a new soap server
        $server = new soap_server();
        
        // configure our WSDL
        $server->configureWSDL("HelloExample");
        
        // set our namespace
        $server->wsdl->schemaTargetNamespace = $namespace;
        
        //Register a method that has parameters and return types
        $server->register(
                        // method name:
                        'HelloWorld', 	
                        // parameter list:
                        array('name'=>'xsd:string'), 
                        // return value(s):
                        array('return'=>'xsd:string'),
                        // namespace:
                        $namespace,
                        // soapaction: (use default)
                        false,
                        // style: rpc or document
                        'rpc',
                        // use: encoded or literal
                        'encoded',
                        // description: documentation for the method
                        'Simple Hello World Method');
        
        //Create a complex type
        $server->wsdl->addComplexType('MyComplexType','complexType','struct','all','',
        		array( 'ID' => array('name' => 'ID','type' => 'xsd:int'),
        			   'YourName' => array('name' => 'YourName','type' => 'xsd:string')));
        
        //Register our method using the complex type
        $server->register(
                        // method name:
                        'HelloComplexWorld', 	
                        // parameter list:
                        array('name'=>'tns:MyComplexType'), 
                        // return value(s):
                        array('return'=>'tns:MyComplexType'),
                        // namespace:
                        $namespace,
                        // soapaction: (use default)
                        false,
                        // style: rpc or document
                        'rpc',
                        // use: encoded or literal
                        'encoded',
                        // description: documentation for the method
                        'Complex Hello World Method');
        
        //Our Simple method
        function HelloWorld($name)
        {
        	//return "Hello " . $name;
            mysql_connect("localhost", "root", "");
            mysql_select_db("webservice");
            $sql    = "SELECT * FROM user";
            $result = mysql_query($sql);
            $rows   = mysql_fetch_array($result);
            return $rows['email'];
        }
        
        //Our complex method
        function HelloComplexWorld($mycomplextype)
        {
        	return $mycomplextype;	
        }
        
        // Get our posted data if the service is being consumed
        // otherwise leave this data blank.                
        $POST_DATA = isset($GLOBALS['HTTP_RAW_POST_DATA']) 
                        ? $GLOBALS['HTTP_RAW_POST_DATA'] : '';
        
        // pass our posted data (or nothing) to the soap service                    
        $server->service($POST_DATA);                
        exit();

?>

Trong ví dụ mẫu của nusoap thì có phương tức helloword, mình có test thử truy vấn mysql từ nó luôn, và từ Android mình sẽ gọi tới phương thức này để lấy data trả về.

package webservice.demo;

import java.io.IOException;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.PropertyInfo;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.xmlpull.v1.XmlPullParserException;

import android.app.Activity;
import android.net.http.AndroidHttpClient;
import android.os.Bundle;
import android.widget.TextView;

import java.io.IOException;
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 WebserviceActivity extends Activity{

private static final String SOAP_ACTION = "HelloWorld";
private static final String METHOD_NAME = "HelloWorld";
private static final String NAMESPACE = "http://10.0.2.2/demo/server.php";
private static final String URL = "http://10.0.2.2/demo/server.php?wsdl";


@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		WebserviceActivity();
	}

public void WebserviceActivity(){

	SoapObject soapclient = new SoapObject(NAMESPACE,METHOD_NAME);
	
	SoapObject parameters = new SoapObject(NAMESPACE, METHOD_NAME);
	parameters.addProperty("value","Good");
	soapclient.addProperty(METHOD_NAME,parameters);
	
	SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
	envelope.setOutputSoapObject(soapclient);
	HttpTransportSE httpTransportSE = new HttpTransportSE(URL);

		try {
			httpTransportSE.call(SOAP_ACTION, envelope);
		
			Log.v("TEST","return from server of nusoap :" +envelope.getResponse().toString());
		
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			Log.v("TEST","io wrong");
		} catch (XmlPullParserException e) {
			Log.v("TEST","xml wrong");
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}
Advertisements

5 thoughts on “Nusoap + Android = Good Program

  1. phongnt

    mình làm như bạn và bị lỗi ở dòng thứ 54… mình thấy khí comment dòng đó thì k báo lỗi nhưng khi bỏ coment thì báo lỗi và lỗi cụ thể là : “Android.os.NetworkOnMainThreadException”

    Reply
  2. Sharing Post author

    bạn đặt code sử lý liên quan đến data từ internet trong một thread khác nhé or một Asyntask

    Reply
  3. Đắc

    Cho mình hỏi, mình đã làm y như vậy nhưng sao dữ liệu trả về là “Hello Array” vậy bạn?

    Reply
  4. Pingback: Nusoap + Android = Good Program | Thuy Yoyo

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s