2013-07-11 130 views
-1

我正在製作一個Android應用程序,該應用程序現在應該連接到先前創建的本地主機Web服務。事情進展不順利。我有以下代碼:將Android連接到Web服務

公共無效proben() {

String soapMsg="<?xml version=\"1.0\" encoding=\"utf-8\"?>" + 
    "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">" + 
     "<soap:Body>"+ 
     "<SelectVezba xmlns=\"http://tempuri.org/\">"+ 
      "<ime>" + "a" + "</ime>" + 
     "</SelectVezba>" + 
     "</soap:Body>" + 
    "</soap:Envelope>"; 


    Log.d("where", "before all others"); 

    TextView t = (TextView)findViewById(R.id.textView2); 
     HttpParams httpParameters = new BasicHttpParams(); 
     // Set the timeout in milliseconds until a connection is established. 
     int timeoutConnection = 15000; 
     HttpConnectionParams.setConnectionTimeout(httpParameters,timeoutConnection); 
     // Set the default socket timeout (SO_TIMEOUT) 
     // in milliseconds which is the timeout for waiting for data. 
     int timeoutSocket = 35000; 
     HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket); 

     DefaultHttpClient httpclient = new DefaultHttpClient(httpParameters); 

     HttpPost httppost = new HttpPost(Constants.SERVICE_LOCATION); 
     httppost.setHeader("Content-Type", Constants.CONTENT_TYPE); 
     httppost.setHeader("SOAPAction", Constants.GET_SelectVezba); 


     Log.d("where","before try"); 

     HttpEntity entity; 
     try { 
      entity = new StringEntity(soapMsg, HTTP.UTF_8); 
      httppost.setEntity(entity); 
     } catch (UnsupportedEncodingException e) { 
      // TODO Auto-generated catch block 
      Log.d("where", "in catch 1"); 
      e.printStackTrace(); 
     } 


     HttpResponse response; 
     try { 
      Log.d("where", "in catch 0"); 
      response = httpclient.execute(httppost); 
      Log.d("where","1"); 
      if(response == null) 
      { 

       Log.d("tag","response e null"); 
      } 
      HttpEntity r_entity = response.getEntity(); // get response 
      Header[] headers = response.getAllHeaders(); 
      if (r_entity != null) 
      { 
       String str_entity = EntityUtils.toString(r_entity); 
       Log.d("response",str_entity); 
      } 

     } catch (ClientProtocolException e) { 
      Log.d("where", "in catch 2"); 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      Log.d("where", "in catch 3"); 
      e.printStackTrace(); 
     }// calling server 

//parsing irrelevant to the question 

      ParserSAXLista parser=new ParserSAXLista("nov.xml"); 
      ListView listview1 = (ListView)findViewById(R.id.listView1); 
      ArrayList<Entitet> nova=parser.objekti(); 
      ArrayList<String> lista=new ArrayList<String>(); 

      for (Entitet en : nova) { 
       lista.add(en.toString()); 
      } 

      ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, lista); 
      listview1.setAdapter(adapter); 

}

使用定義的常量如下:

public final static String SERVICE_LOCATION = "http://10.0.2.2:63919/Servis.asmx"; 
    public final static String CONTENT_TYPE = "text/xml; charset=utf-8"; 
    public final static String GET_SelectVezba = "http://tempuri.org/SelectVezba"; 

在我的logcat,我得到一個「在捕獲0」和一個「在捕獲3」這告訴我有一個例外來自線:

response = httpclient.execute(httppost); 

我該如何解決這個問題?我在其他地方看到,我應該在清單中添加Internet許可,但寫入後:

<uses-permission android:name="android.permission.INTERNET"></uses-permission> 

在清單中,程序立即崩潰。

任何幫助,將不勝感激。對不起,在一個問題中這麼長的代碼。

  • EDIT

logcat的:

07-11 09:10:54.224: D/AndroidRuntime(1355): >>>>>> AndroidRuntime START com.android.internal.os.RuntimeInit <<<<<< 
07-11 09:10:54.224: D/AndroidRuntime(1355): CheckJNI is ON 
07-11 09:10:54.344: D/dalvikvm(1355): Trying to load lib libjavacore.so 0x0 
07-11 09:10:54.354: D/dalvikvm(1355): Added shared lib libjavacore.so 0x0 
07-11 09:10:54.394: D/dalvikvm(1355): Trying to load lib libnativehelper.so 0x0 
07-11 09:10:54.394: D/dalvikvm(1355): Added shared lib libnativehelper.so 0x0 
07-11 09:10:55.244: D/AndroidRuntime(1355): Calling main entry com.android.commands.pm.Pm 
07-11 09:10:55.285: D/AndroidRuntime(1355): Shutting down VM 
07-11 09:10:55.304: D/dalvikvm(1355): GC_CONCURRENT freed 100K, 19% free 470K/576K, paused 1ms+5ms, total 16ms 
07-11 09:10:55.304: D/dalvikvm(1355): Debugger has detached; object registry had 1 entries 
07-11 09:10:56.984: D/AndroidRuntime(1368): >>>>>> AndroidRuntime START com.android.internal.os.RuntimeInit <<<<<< 
07-11 09:10:56.984: D/AndroidRuntime(1368): CheckJNI is ON 
07-11 09:10:57.329: D/dalvikvm(1368): Trying to load lib libjavacore.so 0x0 
07-11 09:10:57.354: D/dalvikvm(1368): Added shared lib libjavacore.so 0x0 
07-11 09:10:57.474: D/dalvikvm(1368): Trying to load lib libnativehelper.so 0x0 
07-11 09:10:57.474: D/dalvikvm(1368): Added shared lib libnativehelper.so 0x0 
07-11 09:10:58.914: D/AndroidRuntime(1368): Calling main entry com.android.commands.am.Am 
07-11 09:10:58.924: D/dalvikvm(1368): Note: class Landroid/app/ActivityManagerNative; has 156 unimplemented (abstract) methods 
07-11 09:10:58.964: I/ActivityManager(269): START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.example.anotherstart/.MainActivity} from pid 1368 
07-11 09:10:58.994: W/WindowManager(269): Failure taking screenshot for (328x583) to layer 21010 
07-11 09:10:59.054: D/AndroidRuntime(1368): Shutting down VM 
07-11 09:10:59.084: D/dalvikvm(1368): GC_CONCURRENT freed 101K, 17% free 501K/604K, paused 1ms+1ms, total 29ms 
07-11 09:10:59.104: D/jdwp(1368): Got wake-up signal, bailing out of select 
07-11 09:10:59.104: D/dalvikvm(1368): Debugger has detached; object registry had 1 entries 
07-11 09:10:59.234: D/dalvikvm(1380): Not late-enabling CheckJNI (already on) 
07-11 09:10:59.244: I/ActivityManager(269): Start proc com.example.anotherstart for activity com.example.anotherstart/.MainActivity: pid=1380 uid=10048 gids={50048, 3003, 1028} 
07-11 09:10:59.644: E/SurfaceFlinger(36): ro.sf.lcd_density must be defined as a build property 
07-11 09:10:59.994: E/Trace(1380): error opening trace file: No such file or directory (2) 
07-11 09:11:02.296: E/SurfaceFlinger(36): ro.sf.lcd_density must be defined as a build property 
07-11 09:11:02.684: D/gralloc_goldfish(1380): Emulator without GPU emulation detected. 
07-11 09:11:03.244: I/ActivityManager(269): Displayed com.example.anotherstart/.MainActivity: +4s57ms (total +13m39s598ms) 
07-11 09:11:11.134: I/ActivityManager(269): START u0 {cmp=com.example.anotherstart/.AddHrana} from pid 1380 
07-11 09:11:11.134: W/WindowManager(269): Failure taking screenshot for (328x583) to layer 21015 
07-11 09:11:11.654: D/kade(1380): pred site drugi 
07-11 09:11:11.654: D/kaj sum(1380): pred try 
07-11 09:11:11.674: D/kade(1380): vo catch 0 
07-11 09:11:11.844: D/AndroidRuntime(1380): Shutting down VM 
07-11 09:11:11.864: W/dalvikvm(1380): threadid=1: thread exiting with uncaught exception (group=0x2bd39930) 
07-11 09:11:11.934: E/AndroidRuntime(1380): FATAL EXCEPTION: main 
07-11 09:11:11.934: E/AndroidRuntime(1380): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.anotherstart/com.example.anotherstart.AddHrana}: android.os.NetworkOnMainThreadException 
07-11 09:11:11.934: E/AndroidRuntime(1380):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 
07-11 09:11:11.934: E/AndroidRuntime(1380):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
07-11 09:11:11.934: E/AndroidRuntime(1380):  at android.app.ActivityThread.access$600(ActivityThread.java:141) 
07-11 09:11:11.934: E/AndroidRuntime(1380):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
07-11 09:11:11.934: E/AndroidRuntime(1380):  at android.os.Handler.dispatchMessage(Handler.java:99) 
07-11 09:11:11.934: E/AndroidRuntime(1380):  at android.os.Looper.loop(Looper.java:137) 
07-11 09:11:11.934: E/AndroidRuntime(1380):  at android.app.ActivityThread.main(ActivityThread.java:5039) 
07-11 09:11:11.934: E/AndroidRuntime(1380):  at java.lang.reflect.Method.invokeNative(Native Method) 
07-11 09:11:11.934: E/AndroidRuntime(1380):  at java.lang.reflect.Method.invoke(Method.java:511) 
07-11 09:11:11.934: E/AndroidRuntime(1380):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
07-11 09:11:11.934: E/AndroidRuntime(1380):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
07-11 09:11:11.934: E/AndroidRuntime(1380):  at dalvik.system.NativeStart.main(Native Method) 
07-11 09:11:11.934: E/AndroidRuntime(1380): Caused by: android.os.NetworkOnMainThreadException 
07-11 09:11:11.934: E/AndroidRuntime(1380):  at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117) 
07-11 09:11:11.934: E/AndroidRuntime(1380):  at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84) 
07-11 09:11:11.934: E/AndroidRuntime(1380):  at libcore.io.IoBridge.connectErrno(IoBridge.java:144) 
07-11 09:11:11.934: E/AndroidRuntime(1380):  at libcore.io.IoBridge.connect(IoBridge.java:112) 
07-11 09:11:11.934: E/AndroidRuntime(1380):  at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192) 
07-11 09:11:11.934: E/AndroidRuntime(1380):  at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459) 
07-11 09:11:11.934: E/AndroidRuntime(1380):  at java.net.Socket.connect(Socket.java:842) 
07-11 09:11:11.934: E/AndroidRuntime(1380):  at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:119) 
07-11 09:11:11.934: E/AndroidRuntime(1380):  at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:144) 
07-11 09:11:11.934: E/AndroidRuntime(1380):  at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164) 
07-11 09:11:11.934: E/AndroidRuntime(1380):  at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) 
07-11 09:11:11.934: E/AndroidRuntime(1380):  at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360) 
07-11 09:11:11.934: E/AndroidRuntime(1380):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 
07-11 09:11:11.934: E/AndroidRuntime(1380):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 
07-11 09:11:11.934: E/AndroidRuntime(1380):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 
07-11 09:11:11.934: E/AndroidRuntime(1380):  at com.example.anotherstart.AddHrana.proben(AddHrana.java:92) 
07-11 09:11:11.934: E/AndroidRuntime(1380):  at com.example.anotherstart.AddHrana.onCreate(AddHrana.java:144) 
07-11 09:11:11.934: E/AndroidRuntime(1380):  at android.app.Activity.performCreate(Activity.java:5104) 
07-11 09:11:11.934: E/AndroidRuntime(1380):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
07-11 09:11:11.934: E/AndroidRuntime(1380):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 
07-11 09:11:11.934: E/AndroidRuntime(1380):  ... 11 more 
07-11 09:11:12.034: D/dalvikvm(1380): GC_CONCURRENT freed 198K, 3% free 9137K/9380K, paused 75ms+16ms, total 321ms 
07-11 09:11:12.034: D/dalvikvm(1380): WAIT_FOR_CONCURRENT_GC blocked 60ms 
07-11 09:11:12.064: W/ActivityManager(269): Force finishing activity com.example.anotherstart/.AddHrana 
07-11 09:11:12.084: W/ActivityManager(269): Force finishing activity com.example.anotherstart/.MainActivity 
07-11 09:11:12.494: E/SurfaceFlinger(36): ro.sf.lcd_density must be defined as a build property 
07-11 09:11:12.594: W/ActivityManager(269): Activity pause timeout for ActivityRecord{2cae4aa0 u0 com.example.anotherstart/.AddHrana} 
07-11 09:11:13.184: I/Choreographer(269): Skipped 45 frames! The application may be doing too much work on its main thread. 
07-11 09:11:13.274: I/MIPSAssembler(36): generated scanline__00000077:03515104_00008001_00000000 [206 ipp] (245 ins) at [0x2d401970:0x2d401d44] in 0 ns 
07-11 09:11:13.484: I/Choreographer(1145): Skipped 63 frames! The application may be doing too much work on its main thread. 
07-11 09:11:13.794: E/SurfaceFlinger(36): ro.sf.lcd_density must be defined as a build property 
07-11 09:11:14.431: I/Choreographer(1145): Skipped 97 frames! The application may be doing too much work on its main thread. 
07-11 09:11:26.971: W/ActivityManager(269): Activity destroy timeout for ActivityRecord{2cb65278 u0 com.example.anotherstart/.MainActivity} 
07-11 09:11:26.971: W/ActivityManager(269): Activity destroy timeout for ActivityRecord{2cae4aa0 u0 com.example.anotherstart/.AddHrana} 

清單:

<?xml version="1.0" encoding="utf-8"?> 

<uses-permission android:name="android.permission.INTERNET"></uses-permission> 

<uses-sdk 
    android:minSdkVersion="8" 
    android:targetSdkVersion="17" /> 

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name="com.example.anotherstart.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> 
    <activity 
     android:name="com.example.anotherstart.Pregled" 
     android:label="@string/title_activity_pregled" > 
    </activity> 
    <activity 
     android:name="com.example.anotherstart.AddHrana" 
     android:label="@string/title_activity_add_hrana" > 
    </activity> 
    <activity 
     android:name="com.example.anotherstart.AddVezba" 
     android:label="@string/title_activity_add_vezba" > 
    </activity> 
</application> 

+0

讓我看看崩潰日誌。 –

+0

發佈您的logcat和清單文件。 – abhishek

+0

@abhishek在我添加Internet權限之前或之後? – LTKD

回答

1

看着你logcat的輸出,我們可以看到,連接Web服務:

(...) 
07-11 09:11:11.934: E/AndroidRuntime(1380): Caused by: android.os.NetworkOnMainThreadException 
(...) 

一些線。

這見面@ Selvin的評論關於可能重複的「android.os.NetworkOnMainThreadException」。

由於這個問題的答案告訴:AsyncTask Solution

你應該做你所有的網絡工作在的AsyncTask對象,然後通過最終的結果(或progressResult)和感謝的AsyncTask對象,將在UI線程調用(其中你將處理你的UI元素/事件/答案)。

請不要猶豫,看看:AsyncTask Documentation

+1

Hallelujah!已經在這2天了! – LTKD