2012-12-11 14 views
1

嗨!即時通訊嘗試將從aspx webservice返回的項目數組傳遞給android中的微調器。但它返回null。我想知道我做錯了什麼。我確實嘗試過返回一組字符串,它爲相同的連接工作,任何幫助將不勝感激。嘗試將從webservice返回的數組項傳遞給android中的微調器。但它返回null

我的Android代碼如下:

package com.example.fp1_webservicedropdown; 

import android.R.string; 
import android.app.Activity; 
import android.os.Bundle; 
import android.widget.ArrayAdapter; 
import android.widget.Spinner; 
import android.widget.TextView; 

import org.ksoap2.*; 

import org.ksoap2.serialization.SoapObject; 
import org.ksoap2.serialization.SoapPrimitive; 
import org.ksoap2.serialization.SoapSerializationEnvelope; 
import org.ksoap2.transport.*; 

public class MainActivity extends Activity { 
    TextView result; 
    Spinner spinnerC; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     spinnerC=(Spinner) findViewById(R.id.spinner1); 
     result = (TextView) findViewById(R.id.textView2); 

     final String NAMESPACE = "http://sample.com/"; 
     final String METHOD_NAME = "GetCustomerList"; 
     final String SOAP_ACTION = "http://sample.com/GetCustomerList"; 
     final String URL = "http://mylocalip/HelloWorldNew/Service1.asmx"; 

     SoapObject Request = new SoapObject(NAMESPACE, METHOD_NAME); 
     //Request.addProperty("a", "32"); 
     //Request.addProperty("b", "12"); 
     SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(
       SoapEnvelope.VER11); 
     soapEnvelope.dotNet = true; 
     soapEnvelope.setOutputSoapObject(Request); 
     AndroidHttpTransport aht = new AndroidHttpTransport(URL); 

     try { 
      aht.call(SOAP_ACTION, soapEnvelope); 
      SoapPrimitive resultString = (SoapPrimitive) soapEnvelope 
        .getResponse(); 

      result.setText("The web service returned " 
        + resultString.toString()); 

      //---------- result To Spinner Code -----------------------// 

      String[] toSpinner = new String[]{resultString.toString()}; 
      ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
        android.R.layout.simple_spinner_item, toSpinner); 
       adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
       spinnerC.setAdapter(adapter); 

       //---------- result To Spinner Code ends here -----------------------//  
     } catch (Exception e) { 

      e.printStackTrace(); 

     } 
    } 
} 

和我的web服務代碼如下:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Services; 
using System.Collections; 

namespace HelloWorldNew 
{ 
    /// <summary> 
    /// Summary description for Service1 
    /// </summary> 
    [WebService(Namespace = "http://sample.com/")] 
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
    [System.ComponentModel.ToolboxItem(false)] 
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
    // [System.Web.Script.Services.ScriptService] 
    public class Service1 : System.Web.Services.WebService 
    { 


     [WebMethod] 
     public ArrayList GetCustomerList() 
     { 
      ArrayList list = new ArrayList(); 
      list.Add("Shean"); 
      list.Add("Yo"); 
      return list; 
     } 




    } 
} 
+0

查看Logcat中的toSpinner的長度 –

+0

@ Mehul1000 hmm,看起來不像是問題m8,因爲im將相同的信息傳遞給textView,並且沒有任何信息通過 – Kasanova

+0

確定? :'String [] toSpinner = new String [] {resultString.toString()};' –

回答

1

SoapPrimitive類定義:

用來類封裝原始類型(由XM​​L序列化中的字符串表示)。基本上,SoapPrimitive類封裝「未知」基元類型(類似於封裝未知複雜類型的SoapObject)。例如,新的SoapPrimitive(classMap.xsd,「float」,「12.3」)...

您正在返回一個ArrayList,它不是一個Primitive類型。

而不是SoapPrimitive,嘗試使用SoapObject。

SoapObject response = (SoapObject) soapEnvelope.getResponse(); 

然後用response.getProperyCount()來獲取項目數。

int intPropertyCount = response.getPropertyCount(); 

然後,在將每個Property再次投射到SoapObject之後,使用toString()方法。如下:

for (int i = 0; i < intPropertyCount; i++) { 
    SoapObject responseChild = (SoapObject) response.getProperty(i); 
    result.setText(responseChild.toString()); 
    // You can add all strings in a list and give ArrayAdapter<String> for Spinner 
} 

我希望這可以解決您的問題。

+0

這個答案很有意義,但我似乎仍然錯過了一些東西。導致textView仍然爲空。任何建議? – Kasanova

+1

你可以嘗試使用bodyIn:'SoapObject response =(SoapObject)envelope.bodyIn;'你能否調試並檢查'response'對象是否爲null? –

+0

嘿,工作,但輸出是這樣的: anyType {anyType {= Shean; anyType =喲;}而不是謝恩和喲 – Kasanova

相關問題