2012-11-17 94 views
2

我對Android有點新,我試圖從一個網站使用Jsoup檢索一些數據。 這是我在Java項目中使用的確切代碼,它工作正常。但是,當我將其轉移到Android並將「println」更改爲「setText()」時,應用程序「意外停止」。Android應用程序使用jsoup庫意外停止

package com.ex.myschoolapp; 
import java.io.IOException; 
import org.jsoup.Jsoup; 
import org.jsoup.nodes.Document; 
import org.jsoup.select.Elements; 
import android.app.Activity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.widget.TextView; 
public class MainActivity extends Activity { 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

Document doc = null; 

    try { 
     doc = Jsoup.connect("http://moisilonesti.licee.edu.ro/concursuri.php").get(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    Elements sElem = doc.select("div#olimpiade table tbody tr th"); 

    String str = sElem.text(); 
    TextView stv = (TextView) findViewById(R.id.textView2); 
    stv.setText(str);}} 

這裏是logcat的痕跡:

11-17 17:37:59.145: E/AndroidRuntime(23601): FATAL EXCEPTION: main 
11-17 17:37:59.145: E/AndroidRuntime(23601): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.ex.myschoolapp/com.ex.myschoolapp.MainActivity}: java.lang.NullPointerException 
11-17 17:37:59.145: E/AndroidRuntime(23601): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1659) 
11-17 17:37:59.145: E/AndroidRuntime(23601): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1675) 
11-17 17:37:59.145: E/AndroidRuntime(23601): at android.app.ActivityThread.access$1500(ActivityThread.java:121) 
11-17 17:37:59.145: E/AndroidRuntime(23601): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:943) 
11-17 17:37:59.145: E/AndroidRuntime(23601): at android.os.Handler.dispatchMessage(Handler.java:99) 
11-17 17:37:59.145: E/AndroidRuntime(23601): at android.os.Looper.loop(Looper.java:123) 
11-17 17:37:59.145: E/AndroidRuntime(23601): at android.app.ActivityThread.main(ActivityThread.java:3701) 
11-17 17:37:59.145: E/AndroidRuntime(23601): at java.lang.reflect.Method.invokeNative(Native Method) 
11-17 17:37:59.145: E/AndroidRuntime(23601): at java.lang.reflect.Method.invoke(Method.java:507) 
11-17 17:37:59.145: E/AndroidRuntime(23601): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:862) 
11-17 17:37:59.145: E/AndroidRuntime(23601): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620) 
11-17 17:37:59.145: E/AndroidRuntime(23601): at dalvik.system.NativeStart.main(Native Method) 
11-17 17:37:59.145: E/AndroidRuntime(23601): Caused by: java.lang.NullPointerException 
11-17 17:37:59.145: E/AndroidRuntime(23601): at com.ex.myschoolapp.MainActivity.onCreate(MainActivity.java:67) 
11-17 17:37:59.145: E/AndroidRuntime(23601): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
11-17 17:37:59.145: E/AndroidRuntime(23601): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1623) 
11-17 17:37:59.145: E/AndroidRuntime(23601): ... 11 more 

我不知道如何使用的AsyncTask尚未但是從我在Jsoup食譜看見我應該不需要任何thred使它工作。

+1

你能從LogCat發佈堆棧跟蹤嗎? – antew

+0

考慮使用異步任務,Jsoup#connect將在UI線程上執行網絡連接,這可以暫停您的應用程序。如果將try-catch放在「簡單」線程中,由於TextView#setText調用,它可能會崩潰,因爲您不應該篡改除UI線程以外的任何其他線程上的視圖。 – Jens

回答

0

您的代碼對我的作品,我也能在TextView的打印數據。

你得到了空指針,因爲你的findViewById返回null,因爲你沒有正確設置setContentView ..,。

setContentView(R.layout.your_activity_xml); 
+2

所有接縫現在都可以工作。坦克。 – user1831468

0

試試這個代碼:

Document doc = Jsoup.connect("http://example.com/").get(); 
Elements divs = doc.select("div#test"); 
for(Element div : divs) 
    System.out.println(div.text()); 
+0

你好Bartosz Ciechanowski,代碼你已經給了我想在這個代碼元素已經在查詢中定義。 – zapbuild