在Android中使用Jsoup
我在android应用程序中有一个简单的代码,我在其中使用一个简单的jsoup代码连接到链接并获取在线广播的标题。但当我点击“播放”按钮时,我的应用程序会崩溃退出。这是我的onClick操作:在Android中使用Jsoup,android,jsoup,Android,Jsoup,我在android应用程序中有一个简单的代码,我在其中使用一个简单的jsoup代码连接到链接并获取在线广播的标题。但当我点击“播放”按钮时,我的应用程序会崩溃退出。这是我的onClick操作: btnPlay.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { progressDialog.show();
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点中循环。怎么了
更新:
堆栈跟踪异常:
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)
E/AndroidRuntime(880):致命异常:main
E/AndroidRuntime(880):android.os.NetworkOnMainThreadException
E/AndroidRuntime(880):位于android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117)
E/AndroidRuntime(880):位于java.net.InetAddress.lookupHostByName(InetAddress.java:385)
E/AndroidRuntime(880):位于java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
E/AndroidRuntime(880):位于java.net.InetAddress.getAllByName(InetAddress.java:214)
E/AndroidRuntime(880):位于libcore.net.http.HttpConnection(HttpConnection.java:70)
E/AndroidRuntime(880):位于libcore.net.http.HttpConnection(HttpConnection.java:50)
E/AndroidRuntime(880):位于libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340)
E/AndroidRuntime(880):位于libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87)
E/AndroidRuntime(880):位于libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
E/AndroidRuntime(880):位于libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:316)
E/AndroidRuntime(880):位于libcore.net.http.HttpEngine.connect(HttpEngine.java:311)
E/AndroidRuntime(880):位于libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290)
E/AndroidRuntime(880):位于libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240)
E/AndroidRuntime(880):位于libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:81)
E/AndroidRuntime(880):位于org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:425)
E/AndroidRuntime(880):位于org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:410)
E/AndroidRuntime(880):位于org.jsoup.helper.HttpConnection.execute(HttpConnection.java:164)
E/AndroidRuntime(880):位于org.jsoup.helper.HttpConnection.get(HttpConnection.java:153)
E/AndroidRuntime(880):位于com.lezgifm.radio.MainActivity$1.onClick(MainActivity.java:109)
E/AndroidRuntime(880):在android.view.view.performClick(view.java:4202)上
E/AndroidRuntime(880):位于android.view.view$PerformClick.run(view.java:17340)
E/AndroidRuntime(880):位于android.os.Handler.handleCallback(Handler.java:725)
E/AndroidRuntime(880):位于android.os.Handler.dispatchMessage(Handler.java:92)
E/AndroidRuntime(880):位于android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime(880):位于android.app.ActivityThread.main(ActivityThread.java:5039)
E/AndroidRuntime(880):位于java.lang.reflect.Method.Invokenactive(本机方法)
E/AndroidRuntime(880):位于java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime(880):位于com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
E/AndroidRuntime(880):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
E/AndroidRuntime(880):位于dalvik.system.NativeStart.main(本机方法)
您应该在一个数据库中运行解析。不允许在UI线程上运行长操作
将
Jsoup.connect()
放在AsyncTask
的doInBackground()
方法中,这样就不会得到NetworkOnMainThreadException
是否打印了任何异常?你能给我看一下航海日志吗?:)请观看更新!所以,在另一个线程中执行网络操作。你从来都不想在UI线程上做任何长时间运行的事情。非常感谢你,它帮助了我