Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.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/0/xml/12.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 Xml解析空异常_Android_Xml - Fatal编程技术网

Android Xml解析空异常

Android Xml解析空异常,android,xml,Android,Xml,我正在尝试构建一个简单的xml解析应用程序。但不幸的是,运行代码时似乎出现了错误。谁能帮我一下吗?谢谢 MainActivity.java public class MainActivity extends Activity { Button button; ListView listView; List<WorldPopulation> employees = null; ProgressDialog mProgressDialog; st

我正在尝试构建一个简单的xml解析应用程序。但不幸的是,运行代码时似乎出现了错误。谁能帮我一下吗?谢谢

MainActivity.java

public class MainActivity extends Activity {
    Button button;
    ListView listView;
    List<WorldPopulation> employees = null;
    ProgressDialog mProgressDialog;

    static final String RANK = "rank";
    static final String COUNTRY = "country";
    static final String POPULATION = "population";

    ListView listview;
    ArrayAdapter<WorldPopulation> adapter;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.listview);
        new DownloadXML().execute();
    }

    private class DownloadXML extends AsyncTask<Void, Void, Void> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();

            mProgressDialog = new ProgressDialog(MainActivity.this);

            mProgressDialog.setMessage("Loading...");
            mProgressDialog.setIndeterminate(false);

            mProgressDialog.show();
        }

        @Override
        protected Void doInBackground(Void... params) {
            employees = new ArrayList<WorldPopulation>();

            XMLParser parser = new XMLParser();

            String xml = parser
                    .getXmlFromUrl("My Secret URL");

            Document doc = parser.getDomElement(xml);
            try {
                NodeList nl = doc.getElementsByTagName("ranking");
                for (int i = 0; i < nl.getLength(); i++) {
                    Element e = (Element) nl.item(i);
                    WorldPopulation employee = new WorldPopulation();
                    employee.setRank(parser.getValue(e, RANK));
                    employee.setCountry(parser.getValue(e, COUNTRY));
                    employee.setPopulation(parser.getValue(e, POPULATION));

                    employees.add(employee);
                }
            } catch (Exception e) {
                Log.e("Error", e.getMessage());
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void args) {


            listview = (ListView) findViewById(R.id.listview);
            adapter = new ArrayAdapter<WorldPopulation>(MainActivity.this,
                    R.layout.list_item, employees);
            listView.setAdapter(adapter);
            mProgressDialog.dismiss();
        }
    }

}
Logcat:

06-18 14:26:16.377: E/AndroidRuntime(22886): FATAL EXCEPTION: main
06-18 14:26:16.377: E/AndroidRuntime(22886): java.lang.NullPointerException
06-18 14:26:16.377: E/AndroidRuntime(22886):    at com.example.exampleparse.MainActivity$DownloadXML.onPostExecute(MainActivity.java:89)
06-18 14:26:16.377: E/AndroidRuntime(22886):    at com.example.exampleparse.MainActivity$DownloadXML.onPostExecute(MainActivity.java:1)
06-18 14:26:16.377: E/AndroidRuntime(22886):    at android.os.AsyncTask.finish(AsyncTask.java:602)
06-18 14:26:16.377: E/AndroidRuntime(22886):    at android.os.AsyncTask.access$600(AsyncTask.java:156)
06-18 14:26:16.377: E/AndroidRuntime(22886):    at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:615)
06-18 14:26:16.377: E/AndroidRuntime(22886):    at android.os.Handler.dispatchMessage(Handler.java:99)
06-18 14:26:16.377: E/AndroidRuntime(22886):    at android.os.Looper.loop(Looper.java:137)
06-18 14:26:16.377: E/AndroidRuntime(22886):    at android.app.ActivityThread.main(ActivityThread.java:4507)
06-18 14:26:16.377: E/AndroidRuntime(22886):    at java.lang.reflect.Method.invokeNative(Native Method)
06-18 14:26:16.377: E/AndroidRuntime(22886):    at java.lang.reflect.Method.invoke(Method.java:511)
06-18 14:26:16.377: E/AndroidRuntime(22886):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:980)
06-18 14:26:16.377: E/AndroidRuntime(22886):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:747)
06-18 14:26:16.377: E/AndroidRuntime(22886):    at dalvik.system.NativeStart.main(Native Method)
编辑


问题是您必须从上下文中调用findViewById,否则它将找不到视图

尝试更改onPostExecute()中的行,如下所示:

listview = (ListView) MainActivity.this.findViewById(R.id.listview);
new DownloadXML(MainActivity.this).execute();

我建议为需要上下文的AsyncTask实现一个构造函数,并将其保存到私有字段中

public DownloadXML(Context context) {
    this.context = context;
}
然后你就可以简单地

listview = (ListView) context.findViewById(R.id.listview);
在“活动”中,按如下方式创建异步任务:

listview = (ListView) MainActivity.this.findViewById(R.id.listview);
new DownloadXML(MainActivity.this).execute();

这是一种方法。您需要实现一个构造函数。以下是解决方案:

public class MainActivity extends Activity {
Button button;
ListView listView;
List<WorldPopulation> employees = null;

ProgressDialog mProgressDialog;

static final String RANK = "rank";
static final String COUNTRY = "country";
static final String POPULATION = "population";

ListView listview;
ArrayAdapter<WorldPopulation> adapter;
private Context context;

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

    new DownloadXML(MainActivity.this).execute();
}

private class DownloadXML extends AsyncTask<Void, Void, Void> {

    private Context context;

    public void DownloadXML(Context context) {
        this.context = context;
    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();

        mProgressDialog = new ProgressDialog(MainActivity.this);

        mProgressDialog.setMessage("Loading...");
        mProgressDialog.setIndeterminate(false);

        mProgressDialog.show();
    }

    @Override
    protected Void doInBackground(Void... params) {
        employees = new ArrayList<WorldPopulation>();

        XMLParser parser = new XMLParser();

        String xml = parser
                .getXmlFromUrl("MY Secret URL");

        Document doc = parser.getDomElement(xml);
        try {
            NodeList nl = doc.getElementsByTagName("ranking");
            for (int i = 0; i < nl.getLength(); i++) {
                Element e = (Element) nl.item(i);
                WorldPopulation employee = new WorldPopulation();
                employee.setRank(parser.getValue(e, RANK));
                employee.setCountry(parser.getValue(e, COUNTRY));
                employee.setPopulation(parser.getValue(e, POPULATION));

                employees.add(employee);
            }
        } catch (Exception e) {
            Log.e("Error", e.getMessage());
            e.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onPostExecute(Void args) {

        listview = (ListView) ((Activity) context).findViewById(R.id.listview);

        adapter = new ArrayAdapter<WorldPopulation>(MainActivity.this,
                R.layout.list_item, employees);
        listView.setAdapter(adapter);
        mProgressDialog.dismiss();
    }
}
}
公共类MainActivity扩展活动{
按钮;
列表视图列表视图;
列出员工=空;
进程对话框;
静态最终字符串RANK=“RANK”;
静态最终字符串COUNTRY=“COUNTRY”;
静态最终字符串POPULATION=“POPULATION”;
列表视图列表视图;
阵列适配器;
私人语境;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.listview_main);
新的下载XML(MainActivity.this).execute();
}
私有类下载XML扩展异步任务{
私人语境;
public void DownloadXML(上下文){
this.context=上下文;
}
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
mProgressDialog=新建ProgressDialog(MainActivity.this);
设置消息(“加载…”);
mProgressDialog.setUndeterminate(false);
mProgressDialog.show();
}
@凌驾
受保护的Void doInBackground(Void…参数){
employees=newarraylist();
XMLParser=新的XMLParser();
字符串xml=语法分析器
.getXmlFromUrl(“我的秘密URL”);
Document doc=parser.getdoElement(xml);
试一试{
NodeList nl=doc.getElementsByTagName(“排名”);
对于(int i=0;i
尝试在oncreate方法开始时将listview初始化。我认为,这不是错误。这将停止您的应用程序对不起,我收到了相同的错误。
public class MainActivity extends Activity {
Button button;
ListView listView;
List<WorldPopulation> employees = null;

ProgressDialog mProgressDialog;

static final String RANK = "rank";
static final String COUNTRY = "country";
static final String POPULATION = "population";

ListView listview;
ArrayAdapter<WorldPopulation> adapter;
private Context context;

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

    new DownloadXML(MainActivity.this).execute();
}

private class DownloadXML extends AsyncTask<Void, Void, Void> {

    private Context context;

    public void DownloadXML(Context context) {
        this.context = context;
    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();

        mProgressDialog = new ProgressDialog(MainActivity.this);

        mProgressDialog.setMessage("Loading...");
        mProgressDialog.setIndeterminate(false);

        mProgressDialog.show();
    }

    @Override
    protected Void doInBackground(Void... params) {
        employees = new ArrayList<WorldPopulation>();

        XMLParser parser = new XMLParser();

        String xml = parser
                .getXmlFromUrl("MY Secret URL");

        Document doc = parser.getDomElement(xml);
        try {
            NodeList nl = doc.getElementsByTagName("ranking");
            for (int i = 0; i < nl.getLength(); i++) {
                Element e = (Element) nl.item(i);
                WorldPopulation employee = new WorldPopulation();
                employee.setRank(parser.getValue(e, RANK));
                employee.setCountry(parser.getValue(e, COUNTRY));
                employee.setPopulation(parser.getValue(e, POPULATION));

                employees.add(employee);
            }
        } catch (Exception e) {
            Log.e("Error", e.getMessage());
            e.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onPostExecute(Void args) {

        listview = (ListView) ((Activity) context).findViewById(R.id.listview);

        adapter = new ArrayAdapter<WorldPopulation>(MainActivity.this,
                R.layout.list_item, employees);
        listView.setAdapter(adapter);
        mProgressDialog.dismiss();
    }
}
}