Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Studio-使用jsoup进行解析时抛出错误(java.lang.NullPointerException)_Java_Android_Jsoup - Fatal编程技术网

Android Studio-使用jsoup进行解析时抛出错误(java.lang.NullPointerException)

Android Studio-使用jsoup进行解析时抛出错误(java.lang.NullPointerException),java,android,jsoup,Java,Android,Jsoup,我正在尝试从网站中挖掘一个表的数据,将其存储到ArrayList中,并在ListView布局中查看它。每次我运行程序时都会出现这个错误 04-29 23:52:57.122 20095-20095/com.example.user.datamining E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.project.datamining, PID: 20095 java.lang.RuntimeException: Una

我正在尝试从网站中挖掘一个表的数据,将其存储到
ArrayList
中,并在
ListView
布局中查看它。每次我运行程序时都会出现这个错误

04-29 23:52:57.122 20095-20095/com.example.user.datamining E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.project.datamining, PID: 20095
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.user.datamining/com.example.user.DataMining}: java.lang.NullPointerException: Attempt to invoke virtual method 'org.jsoup.select.Elements org.jsoup.nodes.Document.select(java.lang.String)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2521)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2595)
at android.app.ActivityThread.access$800(ActivityThread.java:178)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1470)
at android.os.Handler.dispatchMessage(Handler.java:111)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5631)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:959)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'org.jsoup.select.Elements org.jsoup.nodes.Document.select(java.lang.String)' on a null object reference
这是我的代码:

package com.example.user.datamining;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;

import java.io.IOException;
import java.util.ArrayList;

public class DataMining extends AppCompatActivity {
    Document doc;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_data_mining);

        Thread downloadThread = new Thread() {
            public void run() {

                try {
                    doc = Jsoup.connect("http://thewebsite.html").get();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        };
        downloadThread.start();

        ArrayList<String> list = new ArrayList();
            Elements table = doc.select("table"); 
            Elements rows = table.select("tr");

            for (int i = 0; i < rows.size(); i++) { 
                org.jsoup.nodes.Element row =  rows.get(i);
                Elements cols = row.select("td");

                list.add(cols.get(i).text());


                ArrayAdapter<String> adapter = new ArrayAdapter(this, R.layout.datalayout, list);
                ListView view = (ListView) findViewById(R.id.dataListView);
                view.setAdapter(adapter);
            }

    }
}
package com.example.user.datamining;
导入android.os.Bundle;
导入android.support.v7.app.AppActivity;
导入android.widget.ArrayAdapter;
导入android.widget.ListView;
导入org.jsoup.jsoup;
导入org.jsoup.nodes.Document;
导入org.jsoup.select.Elements;
导入java.io.IOException;
导入java.util.ArrayList;
公共类数据挖掘扩展了AppCompative活动{
文件文件;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u data\u mining);
线程下载线程=新线程(){
公开募捐{
试一试{
doc=Jsoup.connect(“http://thewebsite.html).get();
}捕获(IOE异常){
e、 printStackTrace();
}
}
};
downloadThread.start();
ArrayList=新建ArrayList();
元素表=文件选择(“表”);
元素行=表。选择(“tr”);
对于(inti=0;i
您正在启动一个单独的线程来执行下载,并初始化
doc
。此线程异步运行,因此在启动线程后立即对其调用
select()
时,
doc
仍为
null

在线程的
run()
方法中将解析代码移动到下载后,并在解析后使用
Activity
runOnUiThread()
方法设置
ListView
Adapter
,因为您不能从下载线程直接触摸
View

private Document doc;
private ArrayList<String> list = new ArrayList<>();

@Override
protected void onCreat(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_data_mining);

    Thread downloadThread = new Thread() {
        public void run() {
            try {
                doc = Jsoup.connect("http://thewebsite.html").get();

                Elements table = doc.select("table"); 
                Elements rows = table.select("tr");

                for (int i = 0; i < rows.size(); i++) { 
                    org.jsoup.nodes.Element row =  rows.get(i);
                    Elements cols = row.select("td");

                    list.add(cols.get(i).text());
                }

                runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            setListAdapter();
                        }
                    }
                );
            }
            catch (IOException e) {
                e.printStackTrace();
            }
        }
    };
    downloadThread.start();
}

private void setListAdapter() {
    ArrayAdapter<String> adapter = new ArrayAdapter<>(this, R.layout.datalayout, list);
    ListView view = (ListView) findViewById(R.id.dataListView);
    view.setAdapter(adapter);
}
私人文件文档;
private ArrayList list=new ArrayList();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u data\u mining);
线程下载线程=新线程(){
公开募捐{
试一试{
doc=Jsoup.connect(“http://thewebsite.html).get();
元素表=文件选择(“表”);
元素行=表。选择(“tr”);
对于(inti=0;i
doc
在调用
select()
时,它是
null
,因为在此之前启动的
downloadThread
尚未完成,这可能是您初始化它的地方。那么我该怎么办@米肯,哦,是的,你把帖子贴在那里了。我没看见。给我一分钟,我会重新组织你的代码。非常感谢你,我刚刚完成了我想用这个类做的事情,一切都在相应地工作!!