2013-05-20 26 views
1

我在android應用程序中有一個簡單的代碼,我在其中使用一個簡單的jsoup代碼連接到鏈接並獲得在線廣播的標題。但是當我點擊播放按鈕時,我的應用程序退出崩潰。這是我的onClick動作:在Android中使用Jsoup

btnPlay.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      progressDialog.show(); 

      Document doc = null; 
      try { 
       doc = Jsoup.connect("http://info.radiostyle.ru/inc/getinfo.php?getcurentsong=20383&mount=lezgifm").get(); 
       String s = doc.body().text(); 
       System.out.println(s); 
       lblMusicName.setText(s); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 

      new Thread(new Runnable() { 

       @Override 
       public void run() { 

        if (radioBtn128.isChecked()) 
         url = "http://stream4.radiostyle.ru:8004/lezgifm"; 
        else if (radioBtn32.isChecked()) 
         url = "http://stream0.radiostyle.ru:8000/lezgifm"; 
        setStream(url); 
        isPlaying = true; 
        progressDialog.dismiss(); 
       } 
      }).start();    
     } 
    }); 

當我嘗試調試時,調試器正在循環文檔doc = null點。哪裏不對?

UPDATE: 堆棧跟蹤異常:

E/AndroidRuntime(880): FATAL EXCEPTION: main 
E/AndroidRuntime(880): android.os.NetworkOnMainThreadException 
E/AndroidRuntime(880): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117) 
E/AndroidRuntime(880): at java.net.InetAddress.lookupHostByName(InetAddress.java:385) 
E/AndroidRuntime(880): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236) 
E/AndroidRuntime(880): at java.net.InetAddress.getAllByName(InetAddress.java:214) 
E/AndroidRuntime(880): at libcore.net.http.HttpConnection.<init>(HttpConnection.java:70) 
E/AndroidRuntime(880): at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50) 
E/AndroidRuntime(880): at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340) 
E/AndroidRuntime(880): at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87) 
E/AndroidRuntime(880): at libcore.net.http.HttpConnection.connect(HttpConnection.java:128) 
E/AndroidRuntime(880): at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:316) 
E/AndroidRuntime(880): at libcore.net.http.HttpEngine.connect(HttpEngine.java:311) 
E/AndroidRuntime(880): at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290) 
E/AndroidRuntime(880): at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240) 
E/AndroidRuntime(880): at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:81) 
E/AndroidRuntime(880): at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:425) 
E/AndroidRuntime(880): at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:410) 
E/AndroidRuntime(880): at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:164) 
E/AndroidRuntime(880): at org.jsoup.helper.HttpConnection.get(HttpConnection.java:153) 
E/AndroidRuntime(880): at com.lezgifm.radio.MainActivity$1.onClick(MainActivity.java:109) 
E/AndroidRuntime(880): at android.view.View.performClick(View.java:4202) 
E/AndroidRuntime(880): at android.view.View$PerformClick.run(View.java:17340) 
E/AndroidRuntime(880): at android.os.Handler.handleCallback(Handler.java:725) 
E/AndroidRuntime(880): at android.os.Handler.dispatchMessage(Handler.java:92) 
E/AndroidRuntime(880): at android.os.Looper.loop(Looper.java:137) 
E/AndroidRuntime(880): at android.app.ActivityThread.main(ActivityThread.java:5039) 
E/AndroidRuntime(880): at java.lang.reflect.Method.invokeNative(Native Method) 
E/AndroidRuntime(880): at java.lang.reflect.Method.invoke(Method.java:511) 
E/AndroidRuntime(880): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
E/AndroidRuntime(880): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
E/AndroidRuntime(880): at dalvik.system.NativeStart.main(Native Method) 
+0

是否有打印的任何異常?你可以顯示logcat嗎? :) –

+0

觀看更新,請! –

+1

因此,在另一個線程中執行網絡內容。你永遠不會想在UI線程上長時間運行任何事情。 –

回答

3

你應該在AsyncTask運行分析。不允許在UI線程上運行長操作。

Jsoup.connect()放入AsyncTaskdoInBackground()方法中,這樣就不會得到NetworkOnMainThreadException

+1

thx,男人。你的回答是及時幫助我的 –