2011-02-10 9 views
3

.net Webserviceに接続している間、アンドロイドプロジェクトでKsoap2を使用する際に問題が発生します。 私がWit witouthパラメータを呼び出す限り、すべて正常に動作しますが、パラメータを追加しようとすると、サーバは決してそれらを取得しません。 はここ..私は私はそれを送信した文字列+パラメータを返すために、サーバ側のharcode私のコードKSoap2 + Android + .net Ws = Null

import java.util.Vector; 

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.ksoap2.transport.AndroidHttpTransport; 

import android.app.Activity; 
import android.os.Bundle; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.TextView; 
import android.widget.Toast; 

public class ServicioWeb extends Activity { 

SoapObject response; 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    // String NAMESPACE = "http://tempuri.org/"; 
    String NAMESPACE = "IDBN.WS"; 
    String METHOD_NAME = "getClientesByName"; 
    //String SOAP_ACTION = "http://tempuri.org/getClientesByName"; 
    String SOAP_ACTION = "IDBN.WS/getClientesByName"; 
    //String URL = "http://www.ws.idbnar2.com.ar/wsClientes.asmx"; 
    String URL = "http://www.ws.idbnar2.com.ar/wsClientes.asmx"; 
    SoapObject Request = new SoapObject(NAMESPACE, METHOD_NAME); 
    PropertyInfo pi = new PropertyInfo(); 
    pi.setName("Nombre"); 
    pi.setValue("RIQUELME"); 
    pi.setType(int.class); 
    Request.addProperty(pi); 

    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
    envelope.dotNet = true; 
    envelope.setOutputSoapObject(Request); 
    AndroidHttpTransport androidHttpTransport = new AndroidHttpTransport(URL); 
    ListView Lista = (ListView)findViewById(R.id.Lista); 

    try 
    { 
     androidHttpTransport.call(SOAP_ACTION, envelope); 
     response = (SoapObject)envelope.getResponse(); 
     String[] Clientes = getStringArrayResponse(response, null); 
     Lista.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,Clientes)); 
    } 
    catch(Exception e) 
    { 
     Toast toast = Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG); 
     toast.show(); 
    } 
} 

public String[] getStringArrayResponse(SoapObject node, Vector<String> strings) { 
    boolean isFirstCall = false; 
    if (strings == null) { 
     isFirstCall = true; 
     strings = new Vector<String>(); 
    } 
    int count = response.getPropertyCount(); 
    for (int i = 0; i < count; i++) { 
     Object obj1 = node.getProperty(i); 
     if (obj1 instanceof SoapObject) { 
      // don't recurse empty objects 
      if (((SoapObject)obj1).getPropertyCount() > 0) { 
       // recurse into another node to process its nodes/primitives 
       getStringArrayResponse((SoapObject)obj1, strings); 
      } 
     } else if (obj1 instanceof SoapPrimitive) { 
      strings.add(((SoapPrimitive)obj1).toString()); 
     } 
    } 
    // only make this for the original caller 
    if (isFirstCall) { 
     return (String[])strings.toArray(new String[strings.size()]); 
    } 
    return null; 
} 
} 

だと今、すべての私はそれがハードコードされ一部のget、私はある石鹸オブジェに追加するパラメータのように思えますサーバーによって受信されることはありません。

すでに試してください: - ) "http://"をWebservice - の名前空間から削除します)。 "envelope.dotNet = true;"を使用しないでください。 - )リクエストに直接プロパティを追加する

どのようなアイデアwha'ts間違い???

答えて

2

これらの行は、私を混乱させる:

PropertyInfo pi = new PropertyInfo(); 
pi.setName("Nombre"); 
pi.setValue("RIQUELME"); 
pi.setType(int.class); 
Request.addProperty(pi); 

は、なぜあなたは、整数の値として文字列(「リケルメ」)を使用していますか?

コードを実行するとどうなりますか? envelope.debug = trueを設定してみてください。ブレークポイントを設定し、envelope.requestDumpenvelope.responseDumpの値を検査しようとしています。そうすれば、送信されたものと受信されたものを見ることができます。

0
pi.setName("Nombre"); 
    pi.setValue("RIQUELME"); 
    pi.setType(int.class); 
    Request.addProperty(pi); 

pi.setValueは(など、1、2)の整数のいずれかである必要があり OR pi.setTypeはstring.class

するか、あなたを持っている必要はありませんpi.setType。その行を削除すると、その行が機能するはずです。

関連する問題