【问题标题】:Error While Receiving A Data From Web-Service And Bind them To Spinner With AsyncTask从 Web 服务接收数据并使用 AsyncTask 将它们绑定到 Spinner 时出错
【发布时间】:2012-11-27 20:13:57
【问题描述】:

我正在尝试从返回 list (of string)的 Web 服务方法接收数据,我已经在 ASP.NET 中创建了它,就像这样

<WebMethod()> _
Public Function HelloWorld() As List(Of String)
    Dim names As New List(Of String)
    names.Add("aaa")
    names.Add("bbb")
    names.Add("ccc")
    Return names
End Function

这样的调用结果

<string>aaa</string>
<string>bbb</string>
<string>ccc</string>

现在我需要接收此数据并将其放入 Spinner 中

我愿意...

public class MainActivity extends Activity 
{

private Spinner myspinner;
private static final String METHOD_NAME = "HelloWorld";  
private static final String NAMESPACE = "http://tempuri.org";   
private static final String SOAP_ACTION = "http://tempuri.org/HelloWorld";
private static final String URL = "http://www.xxxxxxxxxxx.com/ws/AndroidMethods.asmx";
private String[] Values;

private void SektorDoldur()
{
    SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
    envelope.dotNet = true;     
    envelope.setOutputSoapObject(request);
    HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
    androidHttpTransport.debug = true;
try 
    {
       androidHttpTransport.call(SOAP_ACTION, envelope);
       SoapObject response = (SoapObject) envelope.getResponse();
       Values = new String[response.getPropertyCount()];
       for(int i=0;i<response.getPropertyCount();i++)
          {     
           Values[i] = response.getPropertyAsString(i).toString();
          }      
    }
catch (Exception e)
    {
    e.printStackTrace(); 
    }
}

@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    myspinner = (Spinner)findViewById(R.id.spinner1);
    new MyTask().execute();
}
public class MyTask extends AsyncTask<Void, Void, String>
{

String response = "";
public void onPreExecute() 
  {
    super.onPreExecute();
  }
    @Override
protected String doInBackground(Void... arg0)
{
       SektorDoldur();
       return "";
}
@Override
public void onPostExecute(String res)
{

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, Values);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    myspinner.setAdapter(adapter);           
}
}
}

此行有错误

ArrayAdapter<String> adapter = new ArrayAdapter<String>this,android.R.layout.simple_spinner_item, Values);

onPostExecute 方法中

你能帮我做那个吗...

【问题讨论】:

  • 错误信息是什么意思?
  • 构造函数 ArrayAdapter(MainActivity.MyTask, int, String[]) 未定义

标签: android asp.net web-services ksoap2


【解决方案1】:

构造函数 ArrayAdapter(MainActivity.MyTask, int, String[]) 未定义

在这一行:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, Values);

this 指的是 MyTask 类,而不是您期望的 Activity 的上下文。您需要传递对有效上下文的引用,例如:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_spinner_item, Values);

加法

如何从二维中检索列表

Public Class NameAndvalue
    Public name As String
    Public value As String
End Class

我需要在微调器中显示名称以及单击某个项目时的值...

一种方法是使用 List&lt;Map&lt;String, String&gt;&gt; values 将每个 namevalue 存储在 Map 中,并使用 SimpleAdapter 在 Spinner 中显示您的 name 字符串:

SimpleAdapter adapter = new SimpleAdapter(this, values, 
        android.R.layout.simple_spinner_item, 
        new String[] {"name"}, new int[] {android.R.id.text});

最后,在您的 onItemSelected() 方法中,您现在可以使用 value 值而不是 name 值。

【讨论】:

  • 正确的谢谢,我还有一个问题,我怎样才能从像pastie.org/5444357 那样的二维中检索列表
  • 我需要在微调器中显示名称以及单击某个项目时的值...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多