我是使用jsoup的新手,我只是想问我是否必须使用public static void main中的jsoup代码,就像我在网上看到的研究一样,或者我可以在任何其他方法中使用它。我也遇到了Jsoup.connect()。get()的问题。我的应用程序总是在我运行时停止。我已经将android.permission.Internet添加到我的AndroidManifest.xml中。我阅读了食谱,并决定从解析文档开始,我仍然生成相同的结果 - 不幸的是,应用程序已停止。我的minsdkversion是8,我的目标是15。请耐心等待。
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class Jsoup_2 extends Activity{
static String website_url = "http://www.google.com";
/**
* @param args
*/
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_jsoupactivity);
try{
Document doc = Jsoup.connect(website_url).get();
((TextView)findViewById(R.id.label)).setText("Loading website");
}catch (Exception e){
((TextView)findViewById(R.id.label)).setText("error");
}
}
}
答案 0 :(得分:2)
这是因为您在主线程中运行此代码。你必须放入一个AsyncTask或另一个新的Thread ...永远不要在主线程上执行繁重的操作(例如onCreate()方法)。
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_jsoupactivity);
new AsyncTask(String,Integer,Document) {
public Document doInBackground(String... params) {
Document doc = null;
try{
doc = Jsoup.connect(params[0]).get();
}catch (Exception e){
doc = null;
}
return doc;
}
public void onPostExecute(Document result) {
if (result != null) {
((TextView)findViewById(R.id.label)).setText("Loading website");
} else {
((TextView)findViewById(R.id.label)).setText("Error");
}
}
}.execute(website_url);}}
答案 1 :(得分:0)
<强>轻质强>
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_jsoupactivity);
final TextView tv = (TextView) findViewById(R.id.label);
new Thread(new Runnable() {
@Override
public void run() {
String str;
try {
Document doc = Jsoup.connect(website_url).get();
str = "";
} catch (Exception e) {
str = ",";
}
final String finalStr = str;
tv.post(new Runnable() {
@Override
public void run() {
tv.setText(finalStr);
}
});
}
}).start();
}