在 android studio 中尝试连接 jsoup 时模拟器应用程序崩溃
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
已弃用,您可以尝试使用它的替代方法。这是一个不错的 tutorial,其中提到了 AsyncTask
的一些替代方案
在 运行 和 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
已弃用,您可以尝试使用它的替代方法。这是一个不错的 tutorial,其中提到了 AsyncTask