2013-04-30 47 views
0

我想从android用户发送登录凭证到通过visual studio在本地主机上运行的C#web服务。我已经使用KSOAP2进行SOAP通信,并希望将登录信息发送到Web服务并在UI中进行打印。我已经使用Asynctask,但我一直在这里发布下面的错误。kSOAP2与webservices通信C#

ksoap 2 communication - sending the asynctask result to UI thread and print

能有一个人,请帮助我哪里错了?????

public class MainActivity extends Activity { 

     EditText un,pw; 
     TextView tv; 
     Button test; 
     /** Called when the activity is first created. */ 
     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 
      Button test=(Button) findViewById(R.id.login); 
      un = (EditText) findViewById(R.id.et_un); 
      pw = (EditText) findViewById(R.id.et_pw); 


       test.setOnClickListener(new View.OnClickListener(){ 

        @Override 
        public void onClick(View v) { 
final String NAMESPACE = "http://sparking.org/login"; 
     final String METHOD_NAME = "login"; 
     final String SOAP_ACTION = "http://sparking.org/login"; 
     final String URL = "http://localhost:63734/service.asmx"; 

     SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 

     SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
     envelope.dotNet = true; 
     envelope.setOutputSoapObject(request); 
     HttpTransportSE transport = new HttpTransportSE(URL); 

     try { 
     transport.call(SOAP_ACTION, envelope); 
     SoapPrimitive resultstring = (SoapPrimitive)envelope.getResponse(); 

      } 

     catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 

         } 
        }); 
    } 
    } 

错误信息:

04-30 05:15:09.215: D/gralloc_goldfish(2997): Emulator without GPU emulation detected. 
    04-30 05:15:29.105: W/System.err(2997): android.os.NetworkOnMainThreadException 
    04-30 05:15:29.115: W/System.err(2997):  at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117) 
    04-30 05:15:29.115: W/System.err(2997):  at java.net.InetAddress.lookupHostByName(InetAddress.java:385) 
    04-30 05:15:29.115: W/System.err(2997):  at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236) 
    04-30 05:15:29.125: W/System.err(2997):  at java.net.InetAddress.getAllByName(InetAddress.java:214) 
    04-30 05:15:29.125: W/System.err(2997):  at libcore.net.http.HttpConnection.<init>(HttpConnection.java:70) 
    04-30 05:15:29.135: W/System.err(2997):  at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50) 
    04-30 05:15:29.135: W/System.err(2997):  at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340) 
    04-30 05:15:29.135: W/System.err(2997):  at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87) 
    04-30 05:15:29.135: W/System.err(2997):  at libcore.net.http.HttpConnection.connect(HttpConnection.java:128) 
    04-30 05:15:29.135: W/System.err(2997):  at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:316) 
    04-30 05:15:29.135: W/System.err(2997):  at libcore.net.http.HttpEngine.connect(HttpEngine.java:311) 
    04-30 05:15:29.155: W/System.err(2997):  at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290) 
    04-30 05:15:29.155: W/System.err(2997):  at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240) 
    04-30 05:15:29.165: W/System.err(2997):  at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:81) 
    04-30 05:15:29.165: W/System.err(2997):  at org.ksoap2.transport.ServiceConnectionSE.connect(ServiceConnectionSE.java:46) 
    04-30 05:15:29.175: W/System.err(2997):  at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:68) 
    04-30 05:15:29.175: W/System.err(2997):  at com.example.cmpe220.MainActivity$1.onClick(MainActivity.java:73) 
    04-30 05:15:29.185: W/System.err(2997):  at android.view.View.performClick(View.java:4204) 
    04-30 05:15:29.195: W/System.err(2997):  at android.view.View$PerformClick.run(View.java:17355) 
    04-30 05:15:29.205: W/System.err(2997):  at android.os.Handler.handleCallback(Handler.java:725) 
    04-30 05:15:29.215: W/System.err(2997):  at android.os.Handler.dispatchMessage(Handler.java:92) 
    04-30 05:15:29.215: W/System.err(2997):  at android.os.Looper.loop(Looper.java:137) 
    04-30 05:15:29.225: W/System.err(2997):  at android.app.ActivityThread.main(ActivityThread.java:5041) 
    04-30 05:15:29.225: W/System.err(2997):  at java.lang.reflect.Method.invokeNative(Native Method) 
    04-30 05:15:29.235: W/System.err(2997):  at java.lang.reflect.Method.invoke(Method.java:511) 
    04-30 05:15:29.235: W/System.err(2997):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
    04-30 05:15:29.249: W/System.err(2997):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
    04-30 05:15:29.249: W/System.err(2997):  at dalvik.system.NativeStart.main(Native Method) 
    04-30 05:17:04.375: D/dalvikvm(2997): GC_CONCURRENT freed 175K, 12% free 2579K/2900K, paused 76ms+8ms, total 229ms 

清单:

<?xml version="1.0" encoding="utf-8"?> 
    <manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="com.example.cmpe220" 
     android:versionCode="1" 
     android:versionName="1.0" > 

     <uses-sdk 
      android:minSdkVersion="8" 
      android:targetSdkVersion="14" /> 
     <permission android:name="android.permission.INTERNET"></permission> 

     <application 
      android:allowBackup="true" 
      android:icon="@drawable/ic_launcher" 
      android:label="@string/app_name" 
      android:theme="@style/AppTheme" > 
      <activity 
       android:name="com.example.220.MainActivity" 
       android:label="@string/app_name" > 
       <intent-filter> 
        <action android:name="android.intent.action.MAIN" /> 

        <category android:name="android.intent.category.LAUNCHER" /> 
       </intent-filter> 
      </activity> 
     </application> 

    </manifest> 

回答

0

我猜你OnClickListener方法的问题,只是试试这个。

public class MainActivity extends Activity { 

    EditText un,pw; 
    TextView tv; 
    Button test; 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Button test=(Button) findViewById(R.id.login); 
     un = (EditText) findViewById(R.id.et_un); 
     pw = (EditText) findViewById(R.id.et_pw); 


    test.setOnClickListener(new OnClickListener(){ 
    public void onClick(View v) { 
    final String NAMESPACE = "http://sparking.org/login"; 
    final String METHOD_NAME = "login"; 
    final String SOAP_ACTION = "http://sparking.org/login"; 
    final String URL = "http://localhost:63734/service.asmx"; 

    SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 

    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
    envelope.dotNet = true; 
    envelope.setOutputSoapObject(request); 
    HttpTransportSE transport = new HttpTransportSE(URL); 

    try { 
    transport.call(SOAP_ACTION, envelope); 
    SoapPrimitive resultstring = (SoapPrimitive)envelope.getResponse(); 

     } 

    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 

        } 
       }); 
} 
} 
0

这个错误是当你尝试通过你的主线程通过http进行通信。

声明“请求”对象之前,只需添加这些2号线:

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

实际上,本地主机是模拟器本身在这里,因为代码仿真器中运行。所以你应该连接到10.0.2.2。详细内容见 Android Emulator Networking,不要忘了在清单文件中的网络权限

+0

不要忘记在manifest文件 添加网络权限<使用许可权的android:NAME =“android.permission。 ACCESS_NETWORK_STATE“/> <使用权限android:name =”android.permission.ACCESS_WIFI_STATE“/> <使用权限android:name =”android.permission.INTERNET“/> – ama527 2018-02-22 05:57:32

+0

这不会提供问题的答案。一旦你有足够的[声誉](https://stackoverflow.com/help/whats-reputation),你将可以[对任何帖子发表评论](https://stackoverflow.com/help/privileges/comment);相反,[提供不需要提问者澄清的答案](https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-c​​an- I-DO-代替)。 - [来自评论](/ review/low-quality-posts/18897356) – aifarfa 2018-02-22 08:01:55