Ksoap2 は、Android アプリケーション開発で SOAP メッセージを処理するための優れたライブラリですが、十分に文書化されていません。多くのブログ投稿や Q&A を読みましたが、情報が不完全なことがよくあります。次の完全な例を提供することは可能ですか?
- C# を使用して簡単な Web サービスを作成するには?
- Android のこの Web サービスで webmethod を使用し、返された SOAP メッセージを解析して ListView を生成する方法は?
Ksoap2 は、Android アプリケーション開発で SOAP メッセージを処理するための優れたライブラリですが、十分に文書化されていません。多くのブログ投稿や Q&A を読みましたが、情報が不完全なことがよくあります。次の完全な例を提供することは可能ですか?
シンプルな 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