Java 试图将从webservice返回的数组项传递给android中的spinner。但它返回空值

Java 试图将从webservice返回的数组项传递给android中的spinner。但它返回空值,java,android,asp.net,web-services,android-ksoap2,Java,Android,Asp.net,Web Services,Android Ksoap2,嗨,我正在尝试将从aspx webservice返回的项目数组传递给android中的spinner。但它返回null。我想知道我做错了什么。我曾经尝试过返回一组字符串,它在相同的连接下工作,任何帮助都将不胜感激 我的android代码如下: package com.example.fp1_webservicedropdown; import android.R.string; import android.app.Activity; import android.os.Bundle; imp

嗨,我正在尝试将从aspx webservice返回的项目数组传递给android中的spinner。但它返回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();

        }
    }
}
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;
        }




    }
 }
package com.example.fp1\u webservicedropdown;
导入android.R.string;
导入android.app.Activity;
导入android.os.Bundle;
导入android.widget.ArrayAdapter;
导入android.widget.Spinner;
导入android.widget.TextView;
导入org.ksoap2.*;
导入org.ksoap2.serialization.SoapObject;
导入org.ksoap2.serialization.SoapPrimitive;
导入org.ksoap2.serialization.SoapSerializationEnvelope;
导入org.ksoap2.transport.*;
公共类MainActivity扩展了活动{
文本视图结果;
喷丝器;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
喷丝头C=(喷丝头)findViewById(R.id.spinner1);
结果=(TextView)findViewById(R.id.textView2);
最终字符串名称空间=”http://sample.com/";
最终字符串方法\u NAME=“GetCustomerList”;
最后一个字符串SOAP_ACTION=”http://sample.com/GetCustomerList";
最终字符串URL=”http://mylocalip/HelloWorldNew/Service1.asmx";
SoapObject请求=新的SoapObject(名称空间、方法名称);
//请求。添加属性(“a”、“32”);
//请求。添加财产(“b”、“12”);
SoapSerializationEnvelope soapEnvelope=新的SoapSerializationEnvelope(
第11版);
soapEnvelope.dotNet=true;
setOutputSoapObject(请求);
AndroidHttpTransport aht=新的AndroidHttpTransport(URL);
试一试{
aht.call(SOAP\u动作,soapEnvelope);
SoapPrimitive结果字符串=(SoapPrimitive)soapEnvelope
.getResponse();
result.setText(“返回的web服务”
+结果字符串.toString());
//----------旋转器代码的结果-----------------------//
String[]toSpinner=新字符串[]{resultString.toString()};
ArrayAdapter=新的ArrayAdapter(此,
android.R.layout.simple\u spinner\u项目,toSpinner);
setDropDownViewResource(android.R.layout.simple\u微调器\u下拉菜单\u项);
喷丝头固定接头(接头);
//----------微调器代码的结果在此处结束----------------//
}捕获(例外e){
e、 printStackTrace();
}
}
}
我的web服务代码如下:

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();

        }
    }
}
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;
        }




    }
 }
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用System.Web;
使用System.Web.Services;
使用系统集合;
名称空间HelloWorldNew
{
/// 
///服务1的摘要说明
/// 
[WebService(命名空间=”http://sample.com/")]
[WebServiceBinding(ConformsTo=WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
//要允许使用ASP.NET AJAX从脚本调用此Web服务,请取消注释以下行。
//[System.Web.Script.Services.ScriptService]
公共类服务1:System.Web.Services.WebService
{
[网络方法]
公共数组列表GetCustomerList()
{
ArrayList=新建ArrayList();
列表。添加(“Shean”);
列表。添加(“Yo”);
退货清单;
}
}
}

SoapPrimitive类定义:

用于封装基元类型(由XML序列化中的字符串表示)的类。基本上,SoapPrimitive类封装“未知”基元类型(类似于封装未知复杂类型的SoapObject)。例如,新的SoapPrimitive(classMap.xsd,“float”,“12.3”)

您返回的是ArrayList,而它不是基元类型

尝试使用SoapObject而不是SoapPrimitive

SoapObject response = (SoapObject) soapEnvelope.getResponse();
然后使用
response.getPropertyCount()
获取项目数

 int intPropertyCount = response.getPropertyCount();
然后在将每个属性再次强制转换为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
}
for(int i=0;i

我希望这能解决您的问题。

SoapPrimitive类定义:

用于封装基元类型(由XML序列化中的字符串表示)的类。基本上,SoapPrimitive类封装“未知”基元类型(类似于封装未知复杂类型的SoapObject)。例如,新的SoapPrimitive(classMap.xsd,“float”,“12.3”)

您返回的是ArrayList,而它不是基元类型

尝试使用SoapObject而不是SoapPrimitive

SoapObject response = (SoapObject) soapEnvelope.getResponse();
然后使用
response.getPropertyCount()
获取项目数

 int intPropertyCount = response.getPropertyCount();
然后在将每个属性再次强制转换为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
}
for(int i=0;i

我希望这能解决您的问题。

检查您的电脑中toSpinner的长度Logcat@Mehul1000嗯,这似乎不是问题所在,因为我也在向textView传递相同的信息,但没有传递任何信息。关于这一点,确定吗<代码>字符串[]toSpinner=新字符串[]{resultString.toString()}@Singularity hm。。我不认为这是纺纱机的问题。由于从服务返回的值也被分配给textView,并且textView也显示null。请检查长度