我在android上遇到了jsoup的问题。我已经看过其他帖子,并尝试了那里建议的解决方案(重新添加罐子,调用android修复工具等)。
我已经将jsoup jar添加到我的android项目中(使用构建路径),并添加了必需的 互联网允许我的清单。
<uses-permission android:name="android.permission.INTERNET" />
但是当我试图运行我的应用程序时,我得到了 找不到从方法com.example.test.MainActivity.onCreate
引用的方法org.jsoup.Jsoup.connect我曾尝试使用Android修复工具,但它没有解决问题。 我所拥有的只是一项主要活动,而我正打算致电
Document doc = Jsoup.connect("http://en.wikipedia.org/").get();
附件是我的代码的一部分 import org.jsoup.Jsoup; import 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();
}
}
答案 0 :(得分:1)
您正在尝试在主线程中运行连接。使用AsyncTask
即可使用。
即
public class JsoupParser extends AsyncTask...
为什么你必须在android中使用AsyncTask
进行网络连接?
AsyncTask是一个抽象的助手类,它使您能够正确地使用UI线程,同时在不同的线程中执行后台操作,而无需真正处理线程或控制器。由于android是使用单线程模型实现的,因此每次启动应用程序时,都会创建一个新线程。
想象一下,您有一个单一的线程模型,您只需按一下按钮就可以使用Jsoup
解析网站。这在earler android版本中可以正常工作,但是在网络操作完成之前你会有一个无响应的屏幕。 AsyncTask
将在后台运行,使您的屏幕仍能响应,而另一个线程负责网络通信。
答案 1 :(得分:1)
在你的正常活动中 用这个 public static int SDK_INT = android.os.Build.VERSION.SDK_INT;
并在获取Document之前 在try块中写这个 if(SDK_INT&gt; = 10){ ThreadPolicy tp = ThreadPolicy.LAX; StrictMode.setThreadPolicy(TP); }
它对我有用
答案 2 :(得分:1)
删除所有语句,如:
System.out.println(something);
它对我有用,意识到这花了我2个小时。