1

我在 android 上遇到 jsoup 的问题。我已经看过其他帖子并尝试了那里建议的解决方案(重新添加罐子,调用android修复工具等)

我已将 jsoup jar 添加到我的 android 项目中(使用构建路径),并将所需的 Internet 权限添加到我的清单中。

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

但是当我尝试运行我的应用程序时,我得到了无法找到方法 org.jsoup.Jsoup.connect,引用自方法 com.example.test.MainActivity.onCreate

我曾尝试使用 android fix 工具,但它并没有解决问题。我所拥有的只是一项主要活动,我正在尝试打电话

Document doc = Jsoup.connect("http://en.wikipedia.org/").get();

附件是我的代码 import org.jsoup.Jsoup 的一部分;导入 org.jsoup.nodes.Document;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        try {
            Document doc = Jsoup.connect("http://en.wikipedia.org/").get();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
4

3 回答 3

1

您正在尝试在主线程中运行连接。使用AsyncTask它就会起作用。


IE

public class JsoupParser extends AsyncTask...

为什么你必须AsyncTask在android中使用网络连接?

AsyncTask 是一个抽象辅助类,它使您能够正确使用 UI 线程,同时在不同的线程中执行后台操作,而无需真正处理线程或控制器。由于 android 是使用单线程模型实现的,因此每次启动应用程序时,都会创建一个新线程。

想象一下,您有一个单线程模型,您只需单击按钮即可使用Jsoup. 这在早期的 android 版本中可以正常工作,尽管在网络操作完成之前您会有一个无响应的屏幕。将AsyncTask在后台运行,使您的屏幕仍然可以响应,而另一个线程负责网络通信。

看看 API:
AsyncTask
NetworkOnMainThreadException

于 2013-08-15T04:41:17.970 回答
1

在你的正常活动中使用这个

public static int SDK_INT = android.os.Build.VERSION.SDK_INT;

并在获取 Document 之前将其写入 try 块中

if (SDK_INT >= 10) {
    ThreadPolicy tp = ThreadPolicy.LAX;
    StrictMode.setThreadPolicy(tp);
}

它对我有用

于 2013-08-15T10:32:19.863 回答
1

删除所有语句,例如:

System.out.println(something);

它对我有用,意识到这花了我 2 个小时。

于 2016-03-03T21:21:29.403 回答