应用程序不适用于4.0.3但它适用于2.3.3

时间:2012-08-08 13:41:27

标签: android android-arrayadapter android-spinner android-4.0-ice-cream-sandwich android-sdk-2.3

我写了一个应用程序,它在android 2.3.3上运行正常,但它在android 4.0.3上不起作用。

我在AndroidManifest文件中指定minsdk =“10”和targetsdk =“15”。

我在我的应用中使用.net网络服务,我在此页面上收到错误。

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为空。

我正在使用kso​​ap2来访问我的网络服务。

这是我的功能

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中有效)。

我不知道是什么问题?

2 个答案:

答案 0 :(得分:1)

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

您可以使用AsyncTask解决此问题,并在doInBackground(..)中加载数据。

答案 1 :(得分:0)

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