2012-12-15 42 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

謝謝!它幫助到我!現在我的應用運行良好! –