2014-09-06 3 views
1

내 응용 프로그램은 안드로이드 2.에서 실행할 수 있습니다 * 어떤 문제없이 올바르게 KSoap 모듈을 사용할 수 있습니다. 하지만 안드로이드 4 또는 위의 응용 프로그램을 설치 한 후이 오류를 얻을 :안드로이드 점점 안드로이드 4 이상에서 Ksoap

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) 

WSDLHEPLER은 다음과 같습니다

public class WSDLHelper { 
    public static String call(SoapObject request) throws TException { 
     String result; 

     SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
     envelope.setOutputSoapObject(request); 

     AndroidHttpTransport transport = new AndroidHttpTransport(Strings.URL_TSMS); 
     transport.debug = true; 

     try { 

      /* GETTING ERROR IN BELOW LINE */ 
      transport.call(Strings.URL_TSMS + request.getName(), envelope); 
      result = envelope.getResponse().toString(); 
     } catch (IOException ex) { 
      Log.e("" , ex.getMessage()); 
      throw new TException(PublicErrorList.NOT_EXIST_ERROR_DETAIL); 
     } catch (XmlPullParserException ex) { 
      Log.e("" , ex.getMessage()); 
      throw new TException(PublicErrorList.NOT_EXIST_ERROR_DETAIL); 
     } 
     if (result.equals(String.valueOf(Integers.CODE_USER_PASS_FALSE))) 
      throw new TException(PublicErrorList.USERNAME_PASSWORD_ERROR); 

     return result; 
    } 

    public static String convert1(String str) { 
     return str.substring(1, str.length() - 1); 
    } 

    public static String[] convert2(String str) { 
     return str.split(", "); 
    } 

    public static String[] convert3(String str) { 
     return str.split(","); 
    } 

} 

안드로이드 2.2,3,3에서 테스트 후 *없는 문제.. 나는 왜이 모듈이 안드로이드 4에서 실행할 수 없는지 모르겠다. 제발 도와주세요.

Ksoap 감사

은 다음과 같습니다

FATAL EXCEPTION: main 
android.os.NetworkOnMainThreadException 

당신은 안드로이드 3.0에서 당신이 배경 스레드의 네트워킹을 할 필요가 위에, 당신의 MainThread에 네트워킹됩니다 무슨 잘못

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

답변

0

다른 대답이 작동하지 않는 경우, 다음에서 onCreate 방법이 시도,

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
    StrictMode.setThreadPolicy(policy); 
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 
    { 
    } 
} 

}

+0

안녕하세요. 나는 app.or에서 어떤 네트워킹도하지 않는다.'Thread'는 인터넷에 대한 네트워크 접근만을 체크한다. 정확히 무슨 뜻이야? 'Thread'에서'ksoap'을 움직입니까? –

+0

@MahdiPishguy : 당신은 Ksoap webservice를 소비하고 서버에 요청을함으로써 네트워킹을하고 있습니다. 다른 스레드에서 또는 AsyncTask를 사용하여이 작업을 수행해야합니다. –

+0

AsyncTask를 사용하는 방법을 도울 수 있습니까? 나의 주요 요청과'Ksoap'을 사용하여 게시물에 붙여 넣었다. 감사 –

관련 문제