Android 4或更高版本中的Android获取错误Ksoap

Android 4或更高版本中的Android获取错误Ksoap,android,ksoap2,android-ksoap2,ksoap,Android,Ksoap2,Android Ksoap2,Ksoap,我的应用程序可以在安卓2.*上运行,没有任何问题,并且可以正确使用KSoap模块。但在安卓4或更高版本中安装应用程序后,我出现以下错误: 627-627/ir.tsms E/AndroidRuntime﹕ FATAL EXCEPTION: main android.os.NetworkOnMainThreadException at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode

我的应用程序可以在安卓2.*上运行,没有任何问题,并且可以正确使用
KSoap
模块。但在安卓4或更高版本中安装应用程序后,我出现以下错误:

627-627/ir.tsms E/AndroidRuntime﹕ FATAL EXCEPTION: main
    android.os.NetworkOnMainThreadException
            at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099)
            at java.net.InetAddress.lookupHostByName(InetAddress.java:391)
            at java.net.InetAddress.getAllByNameImpl(InetAddress.java:242)
            at java.net.InetAddress.getAllByName(InetAddress.java:220)
            at libcore.net.http.HttpConnection.<init>(HttpConnection.java:71)
            at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)
            at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:351)
            at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:86)
            at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
            at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:308)
            at libcore.net.http.HttpEngine.connect(HttpEngine.java:303)
            at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:282)
            at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:232)
            at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:80)
            at org.ksoap2.transport.ServiceConnectionSE.connect(ServiceConnectionSE.java:46)
            at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:68)
            at ir.tsms.wsdl.WSDLHelper.call(WSDLHelper.java:34)
            at ir.tsms.wsdl.TSMS.checkUserAuth(TSMS.java:64)
在android 2.2,3,3*中测试后,没有问题。我不知道为什么这个模块不能在安卓4上运行。请帮帮我。谢谢

我的
Ksoap
是:

ksoap2-android-assembly-2.4-jar-with-dependencies.jar

LogCat告诉您出了什么问题:

FATAL EXCEPTION: main
android.os.NetworkOnMainThreadException
你在你的
主线程上进行联网,在安卓3.0及以上版本中,你必须在后台线程上进行联网

编辑:这只是一个示例,可能包含错误

public class WSDLHelper  extends AsyncTask<String, String, String>{

private static String SOAP_ACTION = "http://tempuri.org/***";
//private static String SOAP_ACTION = "http://tempuri.org/***";
private static String NAMESPACE = "http://tempuri.org/";
private static String METHOD_NAME = "yourMethodName";
private String Url;

private Context context;

public WSDLHelper()
{

}

public WSDLHelper(Context context)
{
    this.context = context;
}


@Override
public void onProgressUpdate(String... data)
{
}

@Override
protected String doInBackground(String... uri) 
{
        publishProgress("prepare sending");
        SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);     


        request.addProperty("YourKey",Key);

        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);

        new MarshalDate().register(envelope);

        envelope.setOutputSoapObject(request);
        envelope.dotNet = true;
        envelope.implicitTypes= false;

        try {
            HttpTransportSE androidHttpTransport = new HttpTransportSE(url);
            androidHttpTransport.call(SOAP_ACTION, envelope);
            // Get the SoapResult from the envelope body.
            SoapObject result = (SoapObject)envelope.bodyIn;
            String Test = result.toString();
            String Test1 = result.getProperty(0).toString();
            publishProgress("data accepted - " + result.getProperty(0).toString());
            return result.getProperty(0).toString();


            } 
        catch (Exception e) {
            return null;
            }

}

@Override
protected void onPostExecute(String result) {

    super.onPostExecute(result);

    if("OK".equals(result) )
    {
        // Do What you Want
    }
    else
    {
    }
}
公共类WSDLHelper扩展异步任务{
私有静态字符串SOAP_ACTION=”http://tempuri.org/***";
//私有静态字符串SOAP_ACTION=”http://tempuri.org/***";
私有静态字符串命名空间=”http://tempuri.org/";
私有静态字符串方法\u NAME=“yourMethodName”;
私有字符串Url;
私人语境;
公共WSDLHelper()
{
}
公共WSDLHelper(上下文)
{
this.context=上下文;
}
@凌驾
公共void onProgressUpdate(字符串…数据)
{
}
@凌驾
受保护的字符串doInBackground(字符串…uri)
{
出版进度(“准备发送”);
SoapObject请求=新的SoapObject(名称空间、方法名称);
addProperty(“YourKey”,Key);
SoapSerializationEnvelope=新的SoapSerializationEnvelope(SoapEnvelope.VER11);
新封送日期()。登记册(信封);
envelope.setOutputSoapObject(请求);
envelope.dotNet=true;
envelope.implicitTypes=false;
试一试{
HttpTransportSE androidHttpTransport=新的HttpTransportSE(url);
调用(SOAP_操作,信封);
//从信封正文获取SoapResult。
SoapObject结果=(SoapObject)envelope.bodyIn;
字符串测试=result.toString();
字符串Test1=result.getProperty(0.toString();
publishProgress(“数据已接受-”+result.getProperty(0.toString());
返回结果.getProperty(0).toString();
} 
捕获(例外e){
返回null;
}
}
@凌驾
受保护的void onPostExecute(字符串结果){
super.onPostExecute(结果);
如果(“确定”。等于(结果))
{
//做你想做的
}
其他的
{
}
}

}

如果另一个答案不起作用,请在onCreate方法中尝试此方法

    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
    StrictMode.setThreadPolicy(policy);

你好我在应用程序上没有任何网络连接,也没有任何操作,比如
线程
我只能检查网络访问互联网。你的确切意思是什么?在
线程上移动
ksoap
?@MahdiPishguy:您正在使用ksoap Web服务并向服务器发出请求,因此您正在联网。您应该在另一个线程或使用AsyncTask执行此操作。您可以帮助我如何使用AsyncTask吗?我的主要请求和使用粘贴在帖子上的
Ksoap
。谢谢
    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
    StrictMode.setThreadPolicy(policy);