0

我编写了一个应用程序,它可以在 android 2.3.3 上正常运行,但它不能在 android 4.0.3 上运行。

我在我的 AndroidManifest 文件中指定了 minsdk="10" 和 targetsdk="15"。

我在我的应用程序中使用 .net Web 服务,但在此页面上出现错误。

myspinner = (Spinner) findViewById(R.id.ihtiyacsec);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, SektorList);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        myspinner.setAdapter(adapter);

SektorList 为空。

我正在使用 ksoap2 访问我的网络服务。

这是我的功能

SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
        envelope.bodyOut=request;
        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();
       SektorList = new String[response.getPropertyCount()];

      for(int i=0;i<response.getPropertyCount();i++){          
               SektorList[i] = response.getPropertyAsString(i).toString();     
      }      
} 
        catch (Exception e) {           
            e.printStackTrace();
       }

当我调试项目时, androidHttpTransport.call(SOAP_ACTION, envelope) 不起作用,编译器跳转到 catch 块。

我知道我的肥皂动作是正确的(相同的代码在 2.3.3 中有效)。

我不知道是什么问题?

4

2 回答 2

1

您正在主线程上执行(可能很慢)网络操作。如果您的目标 SDK 是 11 (Honeycomb) 或更高版本,这将NetworkOnMainThreadException在 Honeycomb 或更高版本上抛出一个错误,因为此行为可能会阻塞 UI 并导致应用程序无响应。

您可以使用AsyncTask来解决这个问题,将数据加载到doInBackground(..).

于 2012-08-08T13:48:00.813 回答
0

这是一个非常普遍的问题。从 Android HC+ 开始,您不得在主 UI 线程中执行繁重的网络操作。要解决此问题,您可以:从清单中删除“targetsdk”标签(不推荐)或仅使用 asynctask 进行网络操作。

于 2012-08-08T13:48:58.773 回答