Android应用无法启动活动组件信息

Ash*_*til 0 java android listview exception xmlpullparser

我是一名新的Android程序员,最近,我在列表视图中使用pull解析器解析xml文件.在listview中解析时,我得到了这个异常.

09-13 05:37:00.401: E/AndroidRuntime(1167): FATAL EXCEPTION: main
09-13 05:37:00.401: E/AndroidRuntime(1167): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.simplexmlpullapp/com.example.simplexmlpullapp.MainActivity}: java.lang.NullPointerException
Run Code Online (Sandbox Code Playgroud)

那下一步该怎么办?这样就会删除此异常.我的代码是:

MainActivity.java

 package com.example.simplexmlpullapp;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.util.ArrayList;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;


import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;

public class MainActivity extends Activity {
    ListView list;
    String str;
    ArrayList<Data> arrdata;
    ArrayList<String> arrayofString, parcedCountry;
    String textforinput = "<foo>Hello World!</foo>";
    String parsedData = "";
    XmlPullParser xmlPullParser;
    ArrayAdapter<String>adapter;

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

        list=(ListView)findViewById(R.id.li);

        adapter=new ArrayAdapter<String>(MainActivity.this, 
                android.R.layout.simple_list_item_1,android.R.id.text1,arrayofString);
        list.setAdapter(adapter);
         try
         {
                 InputStream is;
                 is=getAssets().open("countries.xml");
                 BufferedReader r = new BufferedReader(new InputStreamReader(is));
                 StringBuilder total = new StringBuilder();
                 String line;
                 while ((line = r.readLine()) != null)
                 {
                         total.append(line);
                 }

                 //Log.e("File",""+total.toString()); 
                 parseCountries(total.toString());
         }
         catch (Exception e) 
         {
                 // TODO: handle exception
         }
}

private void parseCountries(String string)
{

        int eventType=0;
        String countries = null;
        boolean countryFlag=false;
        ArrayList<String>parsedCountry=new ArrayList<String>();
        try 
        {
                xmlPullParser=XmlPullParserFactory.newInstance().newPullParser();
                xmlPullParser.setInput(new StringReader(string));
                eventType = xmlPullParser.getEventType();
        }
        catch (XmlPullParserException e) {
                e.printStackTrace();
        }

        while(eventType!=XmlPullParser.END_DOCUMENT)
        {
                switch (eventType) 
                {
                case XmlPullParser.START_DOCUMENT:
                        break;

                case XmlPullParser.START_TAG:
                        if(xmlPullParser.getName().equalsIgnoreCase("country"))
                        {

                                countryFlag=true;        
                        }
                        break;
                case XmlPullParser.TEXT:

                        if(countryFlag)
                        {
                                countries=xmlPullParser.getText().toString().trim();
                                Log.i("parse_example", "country"+countries); 
                        }        
                        break;

                case XmlPullParser.END_TAG:
                        if(xmlPullParser.getName().equalsIgnoreCase("country"))
                        {
                                parsedCountry.add(countries);
                                countryFlag=false;        
                        }
                        break;
                        //end of switch        
                }

                try {
                    eventType=xmlPullParser.next();

                } catch (XmlPullParserException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

        }

//        arrayofString=new ArrayList<String>();
//        for(int i=0;i<arrdata.size();i++)
//        {
//            Data data=arrdata.get(i);
//            arrayofString.add(data.getCountry());
//            Log.i("parse_example", "country"+countries);
//        }

}
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
}
Run Code Online (Sandbox Code Playgroud)

MainActivity.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Lodge Names"
        tools:context=".MainActivity" />

    <ListView
        android:id="@+id/li"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="#000000" >
    </ListView>

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

Bir*_*dia 6

请在onCreate()中执行此操作;

在创建适配器之前初始化

arrayofString = new ArrayList<String>();
parcedCountry = new ArrayList<String>();
Run Code Online (Sandbox Code Playgroud)

更新以显示列表

adapter=new ArrayAdapter<String>(MainActivity.this, 
                android.R.layout.simple_list_item_1,android.R.id.text1,parcedCountry); //UPDATE HERE
        list.setAdapter(adapter);
         try
         {
                 InputStream is;
                 is=getAssets().open("countries.xml");
                 BufferedReader r = new BufferedReader(new InputStreamReader(is));
                 StringBuilder total = new StringBuilder();
                 String line;
                 while ((line = r.readLine()) != null)
                 {
                         total.append(line);
                 }

                 //Log.e("File",""+total.toString()); 

                 parseCountries(total.toString());

                 adapter.notifyDataSetChanged(); //UPDATE HERE

         }
         catch (Exception e) 
         {
                 // TODO: handle exception
         }
Run Code Online (Sandbox Code Playgroud)