마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 리스트뷰 출력에 관한 질문입니다.

0 추천

 xml 파싱을 하고 그 파싱한 값을 받아와 그 값들을  ArrayList<listmap> titlevec = new ArrayList<listmap>();에 붙이고 난 이후에 커스텀 리스트뷰를 통해 출력 하려고 하는데요

개발환경이 안드로이드 4.0인 관계로 xml파싱을 해주는 MainActivity가 AsyncTask를 extends 하고 있어서 밑에 start함수를 사용하여 값을 하나로 묶어 커스텀 리스트뷰를 사용 출력하려고 하는데요.. 
밑에와 같은 로그가 뜨면에 안드로이드 화면이 검게된 상태로 됩니다.
계속 고민하다가 올리게 되었는데 답해주시면 감사하겠습니다.
selectmap.java
package kr.hansung.bus_app;

import java.util.ArrayList;
import java.util.Vector;


import android.app.Activity;
import android.app.ListActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.AdapterView.OnItemClickListener;

public class selectmap extends ListActivity implements OnItemClickListener  {
ArrayList<listmap> titlevec = new ArrayList<listmap>();
    MainActivity newscontent = new MainActivity();
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.busmap);
        ListView lv = (ListView) findViewById(android.R.id.list);
newscontent.seturl("01199");
   newscontent.execute(null,null,null);
   start();
        while(true){
            
            try {
                Thread.sleep(1000); 
                if(newscontent.flag == true){
                titlevec = newscontent.contacts2;
                    break; }
            } catch (Exception e) { }       
        }        
        customadp adapter = new customadp(this, 
                                        android.R.layout.simple_expandable_list_item_1,
                                        titlevec);
        lv.setAdapter(adapter);
        lv.setOnItemClickListener(this);
    }
public void start(){
    for(int i=0;i<newscontent.rtNm.size();i++){
    newscontent.contacts2.add(new listmap(newscontent.rtNm.get(i),newscontent.staOrd.get(i),newscontent.stid1.get(i),newscontent.traTime1.get(i),newscontent.traTime2.get(i)));
    }
}
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {


}
}
-------------------------------Mainactivity.java
package kr.hansung.bus_app;

import java.net.URL;
import java.util.ArrayList;
import java.util.Vector;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;

import android.os.AsyncTask;
import android.util.Log;
import android.widget.Toast;

public class MainActivity extends AsyncTask<Void, Void, Void> {
	String max1;
	String max2;
	String max3;
	String max4;
	String max5;
	ArrayList<String> stid1;
	ArrayList<String> rtNm;
	ArrayList<String> staOrd;
	ArrayList<String> traTime1;
	ArrayList<String> traTime2;
	ArrayList<listmap> contacts2;
	String ext = "http://ws.bus.go.kr/api/rest/stationinfo/getStationByUid?ServiceKey=eBhJk6Zx39J/XqJMY2RqoK0Bq44pza4uFjZoj25dbRmswGxI5f3JCRdGT6hC4gfgAQvVwAqkNge65H59iyAgkg==&arsId=";
	boolean flag = false;
	public void seturl(String s1) {
		ext = ext + s1;
	}

	@SuppressWarnings("unused")
	protected Void doInBackground(Void... params) {

		stid1 = new ArrayList<String>();
		rtNm = new ArrayList<String>();
		staOrd = new ArrayList<String>();
		traTime1 = new ArrayList<String>();
		traTime2 = new ArrayList<String>();
		contacts2 = new ArrayList<listmap>();
		try {
			URL text = new URL(ext);
			XmlPullParserFactory parserCreator = XmlPullParserFactory
					.newInstance();
			parserCreator.setNamespaceAware(true);
			XmlPullParser parser = parserCreator.newPullParser();
			parser.setInput(text.openStream(), null);
			int parserEvent = parser.getEventType();
			String tag;
			boolean inTitle = false, inTitle2 = false, inTitle3 = false, inTitle4 = false, inTitle5 = false;
			if (text == null);
			else {
				while (parserEvent != XmlPullParser.END_DOCUMENT) {
			
					switch (parserEvent) {

					case XmlPullParser.TEXT:
						tag = parser.getName();
						if (inTitle) {
							max1 = parser.getText();
							stid1.add(max1);
						} else if (inTitle2) {
							max2 = parser.getText();
							rtNm.add(max2);
						} else if (inTitle3) {
							max3 = parser.getText();
							staOrd.add(max3);
						} else if (inTitle4) {
							max4 = parser.getText();
							traTime1.add(max4);
						} else if (inTitle5) {
							max5 = parser.getText();
							traTime2.add(max5);
						}
						
						break;

					case XmlPullParser.END_TAG:
						tag = parser.getName();
						if (tag.compareTo("stid") == 0) {
							inTitle = false;
						} else if (tag.compareTo("rtNm") == 0) {
							inTitle2 = false;
						} else if (tag.compareTo("staOrd") == 0) {
							inTitle3 = false;
						} else if (tag.compareTo("traTime1") == 0) {
							inTitle4 = false;
						} else if (tag.compareTo("traTime2") == 0) {
							inTitle5 = false;
						}

						break;

					case XmlPullParser.START_TAG:
						tag = parser.getName();
						if (tag.compareTo("stid") == 0) {
							inTitle = true;
						} else if (tag.compareTo("rtNm") == 0) {
							inTitle2 = true;
						} else if (tag.compareTo("staOrd") == 0) {
							inTitle3 = true;
						} else if (tag.compareTo("traTime1") == 0) {
							inTitle4 = true;
						} else if (tag.compareTo("traTime2") == 0) {
							inTitle5 = true;
						}


						break;
					}
					parserEvent = parser.next();
				}
			}
			flag = true;
		} catch (Exception e) {
			Log.e("dd", "Error network", e);
		}
	
			    return null;
		
	}
}

 

12-15 20:10:18.752: E/AndroidRuntime(10320): FATAL EXCEPTION: main
12-15 20:10:18.752: E/AndroidRuntime(10320): java.lang.RuntimeException: Unable to start activity ComponentInfo{kr.hansung.bus_app/kr.hansung.bus_app.selectmap}: java.lang.NullPointerException
 
익명사용자 님이 2013년 12월 15일 질문

1개의 답변

0 추천

NullPointerException 

객체가 제대로 생성되지 않았는데 사용하려해서 에러가 났습니다.

에러 로그가 적어주신거 말고 더 있을텐데 몇번째라인에서 에러가난건지 나올겁니다

해당 라인에서 객체가 제대로 생성된건지 확인해보세요.

특히 파싱하는부분은 원하는대로 파싱이 제대로 안되는 경우가 많습니다.

 

얼룩돼지 (15,720 포인트) 님이 2013년 12월 16일 답변
...