0

Ksoap2 は、Android アプリケーション開発で SOAP メッセージを処理するための優れたライブラリですが、十分に文書化されていません。多くのブログ投稿や Q&A を読みましたが、情報が不完全なことがよくあります。次の完全な例を提供することは可能ですか?

  1. C# を使用して簡単な Web サービスを作成するには?
  2. Android のこの Web サービスで webmethod を使用し、返された SOAP メッセージを解析して ListView を生成する方法は?
4

1 に答える 1

0

シンプルな Web サービスを作成する方法は、Google で非常に簡単に見つけることができます。

.net Web サービスからデータを取得する方法を紹介したいと思います。

まず、Android でデータを取得するために ksoap2 ライブラリを使用する必要があります。

http://code.google.com/p/ksoap2-android/ダウンロードして project>libs フォルダにコピー

次に、Android では長時間の処理に asynctask を使用する必要があるため、Web サービスの呼び出しには asynctask を使用する必要があります。

ksoap2 ライブラリをダウンロードしてプロジェクトにコピーしたら、始めましょう。

//import ksoap2

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.PropertyInfo;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;


public class Example extends Activity {

    //define your web service namespace
private static final String NAMESPACE = "http://tempuri.org/";  
    //web service URL
private static final String URL = "http://www.example.com/webservice1.asmx";


//variables
private String username;
private String password;
private String userID;


public class ExampleAS extends AsyncTask<String,String,String>{

    private ProgressDialog dialog = new ProgressDialog(Example.this);       
    String ParamUserName;
    String ParamPassword;

    public ExampleAS(String ParamUserName,String ParamPassword){
        this.ParamUserName=ParamUserName;
        this.ParamPassword=ParamPassword;

    }

    @Override
     protected void onPreExecute() {
        dialog.setMessage("Loading...");
        dialog.show();
     }

    @Override
    protected String doInBackground(String... params) {
        ExampleFunc(ParamUserName,ParamPassword);
        return userID;
    }

    protected void onPostExecute(String userID){
        label.setText(userID);
        dialog.dismiss();
    }

}

private String ExampleFunc(String ParamUserName,String ParamPassword){
    PropertyInfo uName = new PropertyInfo();
    uName.name= "USERNAME"; //It must be same with your webservice's parameter name
    uName.setValue(ParamUserName); //Parameter value
    uName.type = PropertyInfo.STRING_CLASS; //Parameter type

    PropertyInfo pass = new PropertyInfo();
    pass.name= "PASSWORD"; //It must be same with your webservice's parameter name      
            pass.setValue(ParamPassword); //Parameter value
    pass.type = PropertyInfo.STRING_CLASS; //Parameter type

    SoapObject request = new SoapObject(NAMESPACE, "Login"); //Namespace,Webservice method name
    request.addProperty(uName);
    request.addProperty(pass);


    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
    envelope.bodyOut=request;
    envelope.dotNet = true; 
    envelope.setOutputSoapObject(request);

    HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
    androidHttpTransport.debug = true;

    try {

        androidHttpTransport.call("http://tempuri.org/Login", envelope);
        SoapObject response = (SoapObject) envelope.getResponse();

        Object property = response.getProperty(0);
        if(property instanceof SoapObject){
            SoapObject users = (SoapObject) property;
                userID = users.getProperty("user_id").toString();
                }

 } 
         catch (Exception e) {          
            e.printStackTrace();
        }



    return userID;

}

コピーしてビルドしないでください。ここに書いているので、動作しない可能性があります。リクエストのフィールドを変更するか、Web サービスからデータを取得する必要があります。

onCreate で asynctask を呼び出す必要があります

例えば;

new ExampleAS("admin","1234").execute();

最後に、私の別の投稿に従ってください: Get List from .net Web Service on Android

于 2013-02-08T12:37:39.760 に答える