2012-08-24 147 views
0

我是Android应用程序的新手。我正在使用的代码正在另一台装有Linux的计算机上工作。但在我的电脑上有Windows 7,代码无法正常工作。它无法连接到web服务。请帮帮我。Android应用程序无法连接到Web服务

这里是代码:

package com.example.marport; 

import java.io.IOException; 

import org.ksoap2.SoapEnvelope; 
import org.ksoap2.SoapFault; 
import org.ksoap2.serialization.SoapObject; 
import org.ksoap2.serialization.SoapPrimitive; 
import org.ksoap2.serialization.SoapSerializationEnvelope; 
import org.ksoap2.transport.HttpTransportSE; 
import org.xmlpull.v1.XmlPullParserException; 

import android.app.Activity; 
import android.os.Bundle; 
import android.widget.EditText; 

public class Giriscikis extends Activity { 

    final static String NAMESPACE = "http://webservice.marport.dcat.com/"; 
    final static String METHOD_NAME = "gateOut"; 
    final static String METHOD_NAME2 = "gateIn"; 
    final static String SOAP_ACTION = "http://webservice.marport.dcat.com/gateOut"; 
    final static String SOAP_ACTION2 = "http://webservice.marport.dcat.com/gateIn"; 
    final static String URL = "http://192.168.1.164:8070/test/services/MarportWebServicePort"; 

    private EditText cikis; 
    private EditText giris; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.giriscikis); 

     cikis = (EditText) findViewById(R.id.etCikis); 
     giris = (EditText) findViewById(R.id.etGiris); 

     SoapObject Request=new SoapObject(NAMESPACE,METHOD_NAME); 
     SoapObject Request2 = new SoapObject(NAMESPACE, METHOD_NAME2); 

     SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
     SoapSerializationEnvelope soapEnvelope2 = new SoapSerializationEnvelope(SoapEnvelope.VER11); 

     soapEnvelope.dotNet = false; 
     soapEnvelope2.dotNet = false; 

     soapEnvelope.setOutputSoapObject(Request); 
     soapEnvelope2.setOutputSoapObject(Request2); 

     HttpTransportSE aht = new HttpTransportSE(URL); 

     try { 
      aht.call(SOAP_ACTION, soapEnvelope); 
      aht.call(SOAP_ACTION2, soapEnvelope2); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (XmlPullParserException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     try { 
      SoapPrimitive result=(SoapPrimitive) soapEnvelope.getResponse(); 
      SoapPrimitive result2 = (SoapPrimitive) soapEnvelope2.getResponse(); 
      giris.setText(result2.toString()); 
      cikis.setText(result.toString()); 
     } catch (SoapFault e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 

} 

这里是例外:

08-24 08:25:40.928: E/AndroidRuntime(631): FATAL EXCEPTION: main 
08-24 08:25:40.928: E/AndroidRuntime(631): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.marport/com.example.marport.Giriscikis}: android.os.NetworkOnMainThreadException 
08-24 08:25:40.928: E/AndroidRuntime(631): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059) 
08-24 08:25:40.928: E/AndroidRuntime(631): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084) 
08-24 08:25:40.928: E/AndroidRuntime(631): at android.app.ActivityThread.access$600(ActivityThread.java:130) 
08-24 08:25:40.928: E/AndroidRuntime(631): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195) 
08-24 08:25:40.928: E/AndroidRuntime(631): at android.os.Handler.dispatchMessage(Handler.java:99) 
08-24 08:25:40.928: E/AndroidRuntime(631): at android.os.Looper.loop(Looper.java:137) 
08-24 08:25:40.928: E/AndroidRuntime(631): at android.app.ActivityThread.main(ActivityThread.java:4745) 
08-24 08:25:40.928: E/AndroidRuntime(631): at java.lang.reflect.Method.invokeNative(Native Method) 
08-24 08:25:40.928: E/AndroidRuntime(631): at java.lang.reflect.Method.invoke(Method.java:511) 
08-24 08:25:40.928: E/AndroidRuntime(631): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
08-24 08:25:40.928: E/AndroidRuntime(631): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
08-24 08:25:40.928: E/AndroidRuntime(631): at dalvik.system.NativeStart.main(Native Method) 
08-24 08:25:40.928: E/AndroidRuntime(631): Caused by: android.os.NetworkOnMainThreadException 
08-24 08:25:40.928: E/AndroidRuntime(631): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117) 
08-24 08:25:40.928: E/AndroidRuntime(631): at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84) 
08-24 08:25:40.928: E/AndroidRuntime(631): at libcore.io.IoBridge.connectErrno(IoBridge.java:144) 
08-24 08:25:40.928: E/AndroidRuntime(631): at libcore.io.IoBridge.connect(IoBridge.java:112) 
08-24 08:25:40.928: E/AndroidRuntime(631): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192) 
08-24 08:25:40.928: E/AndroidRuntime(631): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459) 
08-24 08:25:40.928: E/AndroidRuntime(631): at java.net.Socket.connect(Socket.java:842) 
08-24 08:25:40.928: E/AndroidRuntime(631): at libcore.net.http.HttpConnection.<init>(HttpConnection.java:76) 
08-24 08:25:40.928: E/AndroidRuntime(631): at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50) 
08-24 08:25:40.928: E/AndroidRuntime(631): at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:341) 
08-24 08:25:40.928: E/AndroidRuntime(631): at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87) 
08-24 08:25:40.928: E/AndroidRuntime(631): at libcore.net.http.HttpConnection.connect(HttpConnection.java:128) 
08-24 08:25:40.928: E/AndroidRuntime(631): at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:315) 
08-24 08:25:40.928: E/AndroidRuntime(631): at libcore.net.http.HttpEngine.connect(HttpEngine.java:310) 
08-24 08:25:40.928: E/AndroidRuntime(631): at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:289) 
08-24 08:25:40.928: E/AndroidRuntime(631): at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:239) 
08-24 08:25:40.928: E/AndroidRuntime(631): at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:80) 
08-24 08:25:40.928: E/AndroidRuntime(631): at org.ksoap2.transport.ServiceConnectionSE.connect(ServiceConnectionSE.java:76) 
08-24 08:25:40.928: E/AndroidRuntime(631): at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:146) 
08-24 08:25:40.928: E/AndroidRuntime(631): at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:95) 
08-24 08:25:40.928: E/AndroidRuntime(631): at com.example.marport.Giriscikis.onCreate(Giriscikis.java:53) 
08-24 08:25:40.928: E/AndroidRuntime(631): at android.app.Activity.performCreate(Activity.java:5008) 
08-24 08:25:40.928: E/AndroidRuntime(631): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079) 
08-24 08:25:40.928: E/AndroidRuntime(631): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023) 
08-24 08:25:40.928: E/AndroidRuntime(631): ... 11 more 

回答

2

申请强制停止,因为..

Caused by: android.os.NetworkOnMainThreadException 

所引发的异常当应用程序试图在其主线上执行联网操作。找到关于此NetworkOnMainThreadException

解决很多信息:

使用AsyncTask,把你的网络相关操作在它doInVBackground() ..

0

听起来像你试图在UI线程的HTTP请求。从Android 3.0开始,你必须把你的请求放在另一个线程中。

见该职位:HonyComb and DefaultHttpClient

我也建议你使用try/catch语句。

1

您正在主UI线程上的Activity中执行一些网络活动。只要您的构建目标设置为蜂窝或更高,这会引发异常。要修复它,请将网络操作移至AsyncTask。

示例:从活动

public class MyAsyncTask extends AsyncTask<Void, Void, Result>{ 
        private Activity activity; 
        private ProgressDialog progressDialog; 

     public MyAsyncTask(Activity activity) { 
         super(); 
      this.activity = activity; 
     } 

     @Override 
     protected void onPreExecute() { 
     super.onPreExecute(); 
      progressDialog = ProgressDialog.show(activity, "Loading", "Loading", true); 
     } 

     @Override 
     protected Result doInBackground(Void... v) { 
     //do your stuff here 
     return null; 

     } 

     @Override 
     protected void onPostExecute(Result result) { 
      progressDialog.dismiss(); 
      Toast.makeText(activity.getApplicationContext(), "Finished.", 
        Toast.LENGTH_LONG).show(); 
     } 
} 

叫它:

MyAsyncTask task = new AsyncTask(myActivity.this); 
task.execute(); 
+0

有我使用异步task.it另一个代码被用相同上面的代码,但仍无法连接到web服务我想问题是关于Windows,但我不知道在哪里,因为相同的代码在Linux上工作,但不在Windows上工作 –

+0

+1添加示例代码 –

+0

我也尝试了与异步任务相同的代码,但仍无法连接到webservice –

0

您可以通过的setContentView行之后添加此解决它:

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

我不推荐它,但如果您已完成测试代码,请使用AsyncTask。

+0

编译器无法读取严格模式尝试更改为strichmath –

0

您是否尝试禁用Windows 7防火墙?

教学奶奶吸虫卵(其有时有助于祖母)=>http://windows.microsoft.com/en-US/windows-vista/Turn-Windows-Firewall-on-or-off#

+0

是的,现在Windows 7防火墙已禁用,但stil无法连接到webservice –

+0

您可以使用浏览器访问上面的URL吗?只是为了确认该机器可以路由到该地址... –

+0

机器运行良好myfriends谁有Linux操作系统连接到相同的代码的网络服务 –

相关问题