ksoap を使用して、整数値の配列を並べ替え Web サービスに渡したいと考えています。サーバー側でテストすると、アプリケーションが正常に実行されます。ただし、メソッド「androidHttpTransport.call(SOAP_ACTION、envelope)」を呼び出した後、クライアント プログラムはブロックします。誰かが私が間違っていることを教えてくれますか? ありがとう
以下の Android アプリケーションのコードを見つけます。
public void onClick(View arg0) {
try {
KVMInterface ob=new KVMInterface();
PropertyInfo pi = new PropertyInfo();
pi.setName("ob");
pi.setValue(ob);
pi.setType(ob.getClass());
METHOD_NAME = "Sort";
SOAP_ACTION = NAMESPACE+METHOD_NAME;
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
request.addProperty(pi);
envelope.setOutputSoapObject(request);
envelope.addMapping(NAMESPACE, "ob",new KVMInterface().getClass());
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
androidHttpTransport.call(SOAP_ACTION, envelope);
SoapObject response = (SoapObject)envelope.getResponse();
System.out.println("Response Received");
SoapObject ks = ( SoapObject ) envelope.bodyIn;
ob=(KVMInterface) ks.getProperty(0);
System.out.println(ob);
クライアントの KVMInterface クラスは次のとおりです。
public class KVMInterface implements KvmSerializable
{
public int [] a=new int[5];
public KVMInterface()
{
initialize();
}
@Override
public Object getProperty(int arg0) {
// TODO Auto-generated method stub
return a;
}
@Override
public int getPropertyCount() {
// TODO Auto-generated method stub
return 1;
}
@Override
public void getPropertyInfo(int arg0, Hashtable arg1, PropertyInfo arg2) {
// TODO Auto-generated method stub
arg2.type=PropertyInfo.INTEGER_CLASS;
arg2.name="Array";
}
@Override
public void setProperty(int arg0, Object arg1) {
// TODO Auto-generated method stub
}
private void initialize()
{
for(int i=0;i<a.length;i++)
a[i]=i;
}
}
以下は、Web サーバー アプリケーションの Sort メソッドのコードです。
[Web メソッド (EnableSession = true)]
public KVMInterface Sort(KVMInterface ob)
{
Random random = new Random();
for (int i = 0; i < a.Length; i++)
{
a[i] = random.Next(1, a.Length);
}
KVMInterface obkvm = (KVMInterface)ob;
int temp = 0;
for (int i = 0; i < obkvm.a.Length; i++)
{
for (int j = i + 1; j < obkvm.a.Length; j++)
{
if (obkvm.a[i] > obkvm.a[j])
{
temp = obkvm.a[i];
obkvm.a[i] = obkvm.a[j];
obkvm.a[j] = temp;
}
}
}
return ob;
}
public class KVMInterface
{
public int[] a = new int[5];
public KVMInterface()
{
intialize();
}
void intialize()
{
for (int i = 0; i < a.Length; i++)
{
a[i] = i;
}
}
}