2012-12-15 44 views
1

工作,我发现一个有趣的事情与我的应用程序(我用Jsoup里面的AsyncTask)JSoup不符合的AsyncTask

在那之后我的应用程序崩溃。 logcat的是:用异步连接

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) 

严重异常!但我不明白为什么我的 应用:

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); 
    } 
    } 
} 

如果我改变我的代码(不JSoup)异步工作良好:

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); 
    } 
    } 
} 

在TextView中我获得维基的URL。 请谁能帮助我这个事实。 谢谢!

PS我加互联网的许可清单文件 PPS我用JSoup版本1.7.1(添加外部JAR文件)

+1

您正在收到错误**找不到方法org.jsoup.Jsoup.connect **,是否包含在构建中的库? – nandeesh

+0

具体来说,是'libs /'中的JSoup JAR吗? – CommonsWare

+0

是的,我包括它。我这样做右键单击项目 - >构建路径 - >添加外部档案。 有趣的是,LogCat将其强调为绿色并继续运行我的应用程序。异常开始只与异步 –

回答

4

我这样做右键点击项目 - >构建路径 - >添加外部档案

请撤消,然后在项目中创建一个libs/目录(截至src/同行,res/等),如果你不已经有一个。然后,将JSoup JAR放入libs/目录中。这会将它添加到您的构建路径将其内容包含在APK文件中。

+0

谢谢!它帮助到我!现在我的应用运行良好! –