2012-11-17 95 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