[英]emulator app crashes when trying to connect with jsoup in android studio
在android studio中运行和编译代码时没有错误,但是在按下按钮与jsoup连接后,应用程序由于某种原因崩溃了。 有谁知道我做错了什么?
package com.example.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import java.io.IOException;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
class JsoupParseTask extends AsyncTask<String, Void, Document> {
protected Document doInBackground(String... urls) {
Document doc = null;
try {
doc = Jsoup.connect("http://google.com/").get();
}
catch (IOException e)
{
e.printStackTrace();
}
return doc;
}
}
public void connect(View v) {
// Call from here, it will execute doInBackground
new JsoupParseTask().execute();
}
}
它只是一个类型为NetworkOnMainThreadException的异常,当应用程序尝试在其主线程上执行网络操作时抛出该异常。
例如,尝试在 AsyncTask 中运行您的代码:
class JsoupParseTask extends AsyncTask<String, Void, Document> {
@Override
protected Document doInBackground(String... urls) {
Document doc = null;
try {
doc = Jsoup.connect("http://google.com/").get();
}
catch (IOException e)
{
e.printStackTrace();
}
return doc;
}
@Override
protected void onPostExecute(Document doc) {
// execution of result here
String title = doc.title();
}
}
并像下面这样调用它:
public void connect(View v) {
// Call from here, it will execute doInBackground
new JsoupParseTask().execute();
}
除此之外不要忘记在AndroidManifest.xml
添加互联网权限
<uses-permission android:name="android.permission.INTERNET" />
但是由于AsyncTask
已被弃用,您可以尝试使用它的替代方法。 这是一个很好的教程,其中提到了AsyncTask
一些替代方案
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.