我写了一个应用程序,它在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为空。
我正在使用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中有效)。
我不知道是什么问题?
答案 0 :(得分:1)
您正在主线程上执行(可能很慢)网络操作。如果您的目标SDK是11(Honeycomb)或更高版本,这将在Honeycomb或更高版本上抛出NetworkOnMainThreadException
,因为此行为可能会阻止UI并导致应用程序无响应。
您可以使用AsyncTask解决此问题,并在doInBackground(..)
中加载数据。
答案 1 :(得分:0)
这是一个非常常见的问题。从Android HC +开始,您不能在主UI线程中执行繁重的网络操作。要解决此问题,您可以:从清单中删除“targetsdk”标记(不推荐),或者只使用asynctask进行网络操作。