2010-01-21 11 views
10

मैं एंड्रॉइड ऐप विकसित करने के लिए एक्लिप्स आईडीई का उपयोग कर रहा हूं। मैं एक .net webservice से कनेक्ट करने की कोशिश कर रहा हूँ। मैं ksoap2 संस्करण 2.3ksoap2 का उपयोग कर किसी webservice पर पैरामीटर कैसे पास करें?

का उपयोग कर रहा हूं जब मैं कोई पैरामीटर के साथ वेबमाइंड नहीं बुला रहा हूं, तो यह ठीक काम करता है। जब मैं वेबमाइंड पर पैरामीटर पास करने के लिए आता हूं, तो मुझे शून्य मिलती है (जब मैंने webservice को डिबग किया तो मुझे पता चला) और मुझे क्लाइंट साइड कोड में वेबमाइड से शून्य मिलती है।

कोड:

package com.examples.hello; 
import org.ksoap2.SoapEnvelope; 
import org.ksoap2.serialization.PropertyInfo; 
import org.ksoap2.serialization.SoapObject; 
import org.ksoap2.serialization.SoapSerializationEnvelope; 
import org.ksoap2.transport.HttpTransportSE; 

import android.app.Activity; 
import android.os.Bundle; 
import android.widget.TextView; 
public class HelloActivity extends Activity { 
    /** Called when the activity is first created. */ 
private static final String SOAP_ACTION = "http://Innovation/HRService/stringBs"; 

private static final String METHOD_NAME = "stringBs"; 

private static final String NAMESPACE = "http://Innovation/HRService/"; 
private static final String URL = "http://196.205.5.170/mdl/hrservice.asmx"; 
TextView tv; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    tv=(TextView)findViewById(R.id.text1); 
    call(); 

} 

public void call() 
{ 
     try { 

      SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 
      //PropertyInfo PI = new PropertyInfo(); 

      //request.addProperty("a", "myprop"); 

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

      envelope.dotNet=true; 
      envelope.encodingStyle = SoapSerializationEnvelope.XSD; 


      HttpTransportSE androidHttpTransport = new HttpTransportSE(URL); 

      androidHttpTransport.call(SOAP_ACTION, envelope); 

      Object result = (Object)envelope.getResponse(); 


      String results = result.toString(); 
      tv.setText(""+results); 
     } catch (Exception e) { 
      tv.setText(e.getMessage()); 
      } 
    } 


} 

क्यों मैं अशक्त प्रतिक्रिया मिलता है, मैं कैसे एक वेब सेवा का उपयोग कर ksoap2 के लिए एक पैरामीटर पारित करते हैं?

+0

हो सकता है कि इस सूत्र http://stackoverflow.com/questions/1052300/how-to-call-a-net-webservice- मदद कर सकते हैं से-एंड्रॉइड-उपयोग-ksoap2 मैं स्क्रैच से ग्रहण के आधार पर ksoap2 का उपयोग शुरू कर रहा हूं। – Forrest

उत्तर

5

request.addProperty("a", "myprop"); 

की

SoapObject request = new SoapObject("http://www.webserviceX.NET", "GetCitiesByCountry"); 
String soapAction = "http://www.webserviceX.NET/GetCitiesByCountry"; 

request.addProperty("CountryName", "india"); 
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
envelope.bodyOut = request; 
envelope.dotNet = true; 

HttpTransport ht = new HttpTransport("http://www.webservicex.net/globalweather.asmx"); 
ht.debug = true; 
//System.err.println(ht.requestDump); 

ht.call(soapAction,envelope); 
System.out.println("####################: " +envelope.getResponse()); 
//SoapObject result = (SoapObject)envelope.getResponse(); 
9

इसके बजाय जे 2 एमई से पैरामीटर पारित करके वेब सेवा कॉलिंग

request.addProperty("arg0", "myprop");   

का उपयोग कर मैं एक ksoap2 पर उम्मीद नहीं कर रहा हूँ, लेकिन मैं कोशिश कर रहा हूँ यकीन है कि यह आपके वेब सेवा फ़ंक्शन के पहले पैरामीटर का मान सेट करता है। मेरे लिए पूरी तरह से काम किया है।

4

मैं इसके साथ 2 दिनों के लिए काम कर रहा हूं और मुझे अंत में समाधान मिला। मैं अपना पूरा कोड जमा करता हूं और आशा करता हूं कि इससे मदद मिलेगी। यह पैरामीटर पास कर सकते हैं और प्रतिक्रिया प्राप्त कर सकते हैं।

में .net सी # WebService फ़ाइल के अंदर:

[WebService(Namespace = "http://something/webservice/v1")] 

[WebMethod] 
public DateTime[] Function(Guid organizationId, Guid categoryId) 
    { 
     return ...; 
    } 

एंड्रॉयड कोड के अंदर:

private final static String URL = "http://something/WebServices/WebService.asmx"; 
private final static String NAMESPACE = "http://something/webservice/v1"; 


public ArrayList<Object> getSoapObject(String METHOD_NAME, String SOAP_ACTION, Map<String, String> parameters){ 

try { 

     ArrayList<Object> sol = new ArrayList<Object>(); 
     SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 

     if(parameters != null){ 
      for (Entry<String, String> para : parameters.entrySet()) { 
       request.addProperty(para.getKey(), para.getValue()); 
      } 
     } 

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

     Log.d("Body", envelope.bodyOut.toString()); 

     HttpTransportSE androidHttpTransport = new HttpTransportSE(URL); 
     androidHttpTransport.call(SOAP_ACTION, envelope); 
     SoapObject result=(SoapObject)envelope.getResponse(); 

      for(int i = 0; i < result.getPropertyCount(); i++){ 
       sol.add(result.getProperty(i)); 
      } 

      return sol; 
     } catch (Exception e) { 
      e.printStackTrace(); 
      return null; 
     }  
    } 


    public void getMenuEndDate(String orgId, String categoryId){ 

     Date startDate = null; 
     Date endDate = null; 

     HashMap<String, String> parameters = new HashMap<String, String>(); 
     parameters.put("organizationId", orgId); 
     parameters.put("categoryId", categoryId); 


     ArrayList<Object> sol = getSoapObject("Function", "http://something/webservice/v1/Function", parameters); 

     SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd"); 

     try { 
      startDate = (Date)dateFormatter.parse(sol.get(0).toString()); 
      endDate = (Date)dateFormatter.parse(sol.get(1).toString()); 
     } catch (ParseException e) { 
      Log.d(TAG, "Exception i Date-Formatering"); 
      e.printStackTrace(); 
     } 

    } 

हालात की जाँच करने के:

  • पैरामीटर नाम हैं एक्सपी के समान ही वही है वेब सेवा में ected?
  • जांचें कि क्या आप नेमस्पेस के लिए ट्रेलिंग "/" का उपयोग करते हैं। आपके आवेदन में वही है।
4

लाइन बाहर टिप्पणी कोशिश:

envelope.dotNet = true

मैंने वही किया जो आपने किया था और जब मैंने इस संपत्ति के बारे में वास्तव में बदसूरत हैक किया था, तो मैंने परीक्षण उद्देश्यों के लिए इसे टिप्पणी की और मेरा पैरामीटर सही ढंग से पारित हो गया।

3

आप ग्राहक कोड में पैरामीटर प्रकार की घोषणा करना होगा:

SoapObject request = new SoapObject("http://tempuri.org/", "mymethod"); 
PropertyInfo p = new PropertyInfo(); 
p.setName("param_name_from_webservice"); 
p.setValue(true); 
p.setType(Boolean.class); 
request.addProperty(p); 
संबंधित मुद्दे

 संबंधित मुद्दे