2010-06-14 13 views
5

ksoap2 lib का उपयोग करके एंड्रॉइड से एक .net SOAP1.1 वेब सेवा को कॉल करना मैंने कस्टम ऑब्जेक्ट को कास्टिंग प्रतिक्रिया की समस्या से मुलाकात की। उदाहरण के लिए httpTransport.call (साबुनएक्शन, साबुन लिफाफा) के बाद नीचे दिया गया कोड सही कहा जाता है; और अंदर डेटा है। लेकिन मैं इसे विशिष्ट ऑब्जेक्ट में नहीं डाल सकता, न तो सोप ऑब्जेक्ट या वेक्टर को जैसा कि मैंने कई उदाहरणों में देखा है, मुझे CastException या सरल कुछ नहीं मिलता है। अगर कोई जानता है कि इससे कैसे निपटें, तो कृपया मदद करें।ksoap2 कास्टिंग getResponse()

public StatusSetting[] GetAllStatuses(String installation){ 
    StatusSetting[] statuses = null; 
    String methodName = "GetAllStatuses"; 
    String soapAction = NAMESPACE + "/" + methodName; 
    SoapObject request = new SoapObject(NAMESPACE, methodName); 
    request.addProperty("installation", installation); 

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

    AndroidHttpTransport httpTransport = new AndroidHttpTransport(SERVICE_URL); 
    try { 
     httpTransport.call(soapAction, soapEnvelope); 
     statuses = (StatusSetting[])soapEnvelope.getResponse(); 

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

उत्तर

5

सबसे पहले प्रयास करें और देखें कि आपको कोई प्रतिक्रिया मिल रही है या नहीं।

Object obj = envelope.bodyIn; 

यदि यह obj शून्य नहीं है तो निम्न का प्रयास करें।

SoapObject resultsRequestSOAP = (SoapObject) envelope.bodyIn; 

मेरा अनुमान है कि अगर आपको कुछ प्रतिक्रिया मिल रही है तो यह काम करना चाहिए।

आप kSOAP क्या StatusSetting वस्तु है और how बताने के लिए एक StatusSetting वस्तु के लिए करने के लिए एक सोप प्रतिक्रिया बदलना होगा।

+0

धन्यवाद, यह काम करता है, मैं SoapObject में डेटा है। क्या आप कृपया सोप ऑब्जेक्ट को पार्स करने का निर्देश दे सकते हैं। मेरा मतलब किसी भी तरह से संपत्तियों को पढ़ना है और मुझे आवश्यक डेटा की तलाश है। मैंने डीबग मोड में परिणाम RequestSOAP.properties (यह जेसन डेटा की तरह मिलता है) प्राप्त करने का प्रयास किया लेकिन गुण कोड में उपयोग करने के लिए खुली विधि नहीं है। – Maxim

+0

मुझे साबुन ऑब्जेक्ट को पार्स करने के दो तरीकों के बारे में पता है। 1. 'org.ksoap2.serialization.Marshal' इंटरफेस को लागू करें और संबंधित SOAP टैग के लिए पंजीकरण करें। 2. एक और तरीका है - टीएच संबंधित मान प्राप्त करने के लिए 'getProperty() 'और' getAttribute() 'SoapObject के तरीकों का उपयोग करना। एचटीएच। –

+0

यह भी देखें। http://www.drdobbs.com/article/printableArticle.jhtml;jsessionid=OKCYS4LV2OQDPQE1GHPCKHWATMY32JVN?articleId=208800166&dept_url=/mobility/ –

1

मुझे आशा है कि यह आपके लिए उपयोगी होगा:

SoapObject result = (SoapObject) envelope.bodyIn; 
String response = result.getProperty(0).toString(); 
0

कुछ है कि जैसे:

SoapObject response = (SoapObject) envelope.getResponse(); 
    yourArray=new String[response.getPropertyCount()]; 

    for(int i=0;i<response.getPropertyCount();i++){  
     Object property = response.getProperty(i); 
     if(property instanceof SoapObject){ 
      SoapObject final_object = (SoapObject) property; 
      yourArray[i] = final_object.getProperty("YOUR_PROPERTY_NAME"); 
    } 
} 
संबंधित मुद्दे