JSoup不与AsyncTask的工作 [英] JSoup doesn't work with AsyncTask
问题描述
我注意到一件有趣的事情与我的应用程序(我用Jsoup里面的AsyncTask)
在我的应用程序崩溃。 LogCat中是:
11月12日至15日:16:43.023:I / dalvikvm(371):找不到方法org.jsoup.Jsoup.connect,从方法com.example.myexample.MainActivity引用$ MyTask.doInBackground
11月十二号至15日:16:43.033:W / dalvikvm(371):VFY:无法解析静态方法3462:Lorg / jsoup / Jsoup; .connect(Ljava /朗/字符串;)Lorg / jsoup /连接;
11月十二号至15日:16:43.033:D / dalvikvm(371):VFY:更换运code 0x71在为0x0003
11月十二号至15日:16:43.033:D / dalvikvm(371):VFY:在LCOM /例子/ myexample中/ MainActivity $ MyTask的死code 0x0006-000d; .doInBackground([Ljava /朗/字符串;)Ljava /朗/字符串;
11月十二号至15日:16:43.113:W / dalvikvm(371):主题ID = 9:线程退出与未捕获的异常(组= 0x40015560)
11月十二号至15日:16:43.133:E / AndroidRuntime(371):致命异常:AsyncTask的#1
11月12日至十五号:16:43.133:E / AndroidRuntime(371):java.lang.RuntimeException的:一个错误而执行doInBackground发生()
11月12日至十五号:16:43.133:E / AndroidRuntime(371):在android.os.AsyncTask $ 3.done(AsyncTask.java:200)
11月12日至十五号:16:43.133:E / AndroidRuntime(371):在java.util.concurrent.FutureTask中$ Sync.innerSetException(FutureTask.java:274)
11月12日至十五号:16:43.133:E / AndroidRuntime(371):在java.util.concurrent.FutureTask.setException(FutureTask.java:125)
11月12日至十五号:16:43.133:E / AndroidRuntime(371):在java.util.concurrent.FutureTask中$ Sync.innerRun(FutureTask.java:308)
11月12日至十五号:16:43.133:E / AndroidRuntime(371):在java.util.concurrent.FutureTask.run(FutureTask.java:138)
11月12日至十五号:16:43.133:E / AndroidRuntime(371):在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
11月12日至十五号:16:43.133:E / AndroidRuntime(371):在java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:581)
11月12日至十五号:16:43.133:E / AndroidRuntime(371):在java.lang.Thread.run(Thread.java:1019)
与异步连接致命异常!但我不明白为什么 我的应用程序:
公共类MainActivity延伸活动{
MyTask的山;
TextView的tvInfo;
字符串的URL =http://en.wikipedia.org/;
公共无效的onCreate(包savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.activity_main);
tvInfo =(TextView中)findViewById(R.id.tvInfo);
}
公共无效的onclick(视图v){
MT =新MyTask的();
mt.execute(URL);
}
类MyTask的扩展AsyncTask的<字符串,太虚,字符串> {
文档文档;
字符串标题= NULL;
字符串what1 = NULL;
@覆盖
在preExecute保护无效(){
super.on preExecute();
tvInfo.setText(请稍候...);
}
保护字符串doInBackground(字符串... PARAMS){
// TimeUnit.SECONDS.sleep(2);
字符串URL = PARAMS [0];
文档文档;
尝试 {
DOC = Jsoup.connect(URL)获得();
串what1 = doc.title();
}赶上(IOException异常E){
// TODO自动生成的catch块
e.printStackTrace();
}
返回what1;
}
保护无效onPostExecute(字符串结果){
super.onPostExecute(结果);
tvInfo.setText(结果);
}
}
}
如果我改变我的code(不带JSoup)异步工作的好:
公共类MainActivity延伸活动{
MyTask的山;
TextView的tvInfo;
字符串的URL =http://en.wikipedia.org/;
公共无效的onCreate(包savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.activity_main);
tvInfo =(TextView中)findViewById(R.id.tvInfo);
}
公共无效的onclick(视图v){
MT =新MyTask的();
mt.execute(URL);
}
类MyTask的扩展AsyncTask的<字符串,太虚,字符串> {
文档文档;
字符串标题= NULL;
@覆盖
在preExecute保护无效(){
super.on preExecute();
tvInfo.setText(请稍候);
}
保护字符串doInBackground(字符串... PARAMS){
// TimeUnit.SECONDS.sleep(2);
字符串URL = PARAMS [0];
// DOC = Jsoup.connect(URL)获得();
//字符串标题= doc.title();
// Log.d(AsyncTask的doInBackground,地址:+参数[0]);
返回URL;
}
保护无效onPostExecute(字符串结果){
super.onPostExecute(结果);
tvInfo.setText(结果);
}
}
}
在TextView的,我得到的Wiki的URL。 请,任何人都可以帮我这个事实。 谢谢!
PS我在清单文件上网的权限添加 PPS我用JSoup 1.7.1版本(添加为外部JAR文件)
我这样做是右键单击项目 - >建立path->添加外部档案
请撤消,然后创建一个库/
在项目目录(如的src /
的同行, RES /
等),如果你不已经有一个。然后,把JSoup JAR中的库/
目录。这都将它添加到您的构建路径的和的包括其内容的APK文件。
I noticed one interesting thing with my app ( I use Jsoup inside AsyncTask)
After that my app crashed. LogCat is:
12-15 11:16:43.023: I/dalvikvm(371): Could not find method org.jsoup.Jsoup.connect, referenced from method com.example.myexample.MainActivity$MyTask.doInBackground
12-15 11:16:43.033: W/dalvikvm(371): VFY: unable to resolve static method 3462: Lorg/jsoup/Jsoup;.connect (Ljava/lang/String;)Lorg/jsoup/Connection;
12-15 11:16:43.033: D/dalvikvm(371): VFY: replacing opcode 0x71 at 0x0003
12-15 11:16:43.033: D/dalvikvm(371): VFY: dead code 0x0006-000d in Lcom/example/myexample/MainActivity$MyTask;.doInBackground ([Ljava/lang/String;)Ljava/lang/String;
12-15 11:16:43.113: W/dalvikvm(371): threadid=9: thread exiting with uncaught exception (group=0x40015560)
12-15 11:16:43.133: E/AndroidRuntime(371): FATAL EXCEPTION: AsyncTask #1
12-15 11:16:43.133: E/AndroidRuntime(371): java.lang.RuntimeException: An error occured while executing doInBackground()
12-15 11:16:43.133: E/AndroidRuntime(371): at android.os.AsyncTask$3.done(AsyncTask.java:200)
12-15 11:16:43.133: E/AndroidRuntime(371): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274)
12-15 11:16:43.133: E/AndroidRuntime(371): at java.util.concurrent.FutureTask.setException(FutureTask.java:125)
12-15 11:16:43.133: E/AndroidRuntime(371): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308)
12-15 11:16:43.133: E/AndroidRuntime(371): at java.util.concurrent.FutureTask.run(FutureTask.java:138)
12-15 11:16:43.133: E/AndroidRuntime(371): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
12-15 11:16:43.133: E/AndroidRuntime(371): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
12-15 11:16:43.133: E/AndroidRuntime(371): at java.lang.Thread.run(Thread.java:1019)
Fatal exception connected with Async! But I don't understand why My App:
public class MainActivity extends Activity {
MyTask mt;
TextView tvInfo;
String URL="http://en.wikipedia.org/";
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvInfo = (TextView) findViewById(R.id.tvInfo);
}
public void onclick(View v) {
mt = new MyTask();
mt.execute(URL);
}
class MyTask extends AsyncTask<String, Void, String> {
Document doc;
String title=null;
String what1=null;
@Override
protected void onPreExecute() {
super.onPreExecute();
tvInfo.setText("Please wait...");
}
protected String doInBackground(String... params) {
// TimeUnit.SECONDS.sleep(2);
String url=params[0];
Document doc;
try {
doc = Jsoup.connect(url).get();
String what1=doc.title();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return what1;
}
protected void onPostExecute(String result) {
super.onPostExecute(result);
tvInfo.setText(result);
}
}
}
If I change my code (without JSoup) Async works good:
public class MainActivity extends Activity {
MyTask mt;
TextView tvInfo;
String URL="http://en.wikipedia.org/";
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvInfo = (TextView) findViewById(R.id.tvInfo);
}
public void onclick(View v) {
mt = new MyTask();
mt.execute(URL);
}
class MyTask extends AsyncTask<String, Void, String> {
Document doc;
String title=null;
@Override
protected void onPreExecute() {
super.onPreExecute();
tvInfo.setText("Please wait");
}
protected String doInBackground(String... params) {
// TimeUnit.SECONDS.sleep(2);
String url=params[0];
//doc = Jsoup.connect(url).get();
//String title = doc.title();
// Log.d("AsyncTask doInBackground","URL: " + params[0]);
return url;
}
protected void onPostExecute(String result) {
super.onPostExecute(result);
tvInfo.setText(result);
}
}
}
In TextView I get a Url of Wiki. Please, can anyone help me with this fact. Thank you!
P.S I add permission of internet in Manifest file P.P.S I use JSoup version 1.7.1 (added as external jar file)
I did so right click on project->build path-> add external archives
Please undo that, then create a libs/
directory in your project (as a peer of src/
, res/
, etc.) if you do not already have one. Then, put the JSoup JAR in the libs/
directory. This will both add it to your build path and include its contents in your APK file.
这篇关于JSoup不与AsyncTask的工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!