0

シンプルな 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();
        }
    }

}

Worldpopulation.class

public class WorldPopulation {
    private String rank;
    private String country;
    private String population;

    public String getRank() {
        return rank;
    }


    public void setRank(String rank) {
        this.rank = rank;
    }


    public String getCountry() {
        return country;
    }

    public void setCountry(String country) {
        this.country = country;
    }

    public String getPopulation() {
        return population;
    }


    public void setPopulation(String population) {
        this.population = population;
    }

}

ログキャット:

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)

編集

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().execute();
    }
    public void DownloadXML(Context context) {
        this.context = context;
    }
    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) ((Activity) context).findViewById(R.id.listview);

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

}

ログキャット:

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

1 に答える 1