안드로이드 개발 질문/답변
(글 수 45,052)
package com.company.xmlandroid;
import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; import java.net.MalformedURLException; import java.net.URL; import java.net.URLEncoder; import java.util.ArrayList;
import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import org.xmlpull.v1.XmlPullParserFactory;
import android.app.ListActivity; import android.content.Context; import android.os.Bundle; import android.text.Html; import android.text.method.LinkMovementMethod; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast;
public class XmlAndroid extends ListActivity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button btn = (Button)findViewById(R.id.searchBtn); final EditText et = (EditText)findViewById(R.id.searchTxt); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub String searchTxt = et.getText().toString(); if(searchTxt==null) { Toast.makeText(XmlAndroid.this, "공백", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(XmlAndroid.this,"검색시작", Toast.LENGTH_SHORT).show(); searchXml(searchTxt); } } }); } public void searchXml(String searchTxt) { String m_searchTxt=""; try { m_searchTxt = URLEncoder.encode(searchTxt, "EUC-KR"); } catch(UnsupportedEncodingException e1) { e1.printStackTrace(); } String m_sConnectUrl = "http://newssearch.naver.com/search.naver?where=rss&query="+m_searchTxt+"&st=news.all&so=rel.dsc&detail=0&pd=1&start=1&display=20"; //String m_sConnectUrl = "http://twitter.com/statuses/user_timeline/132696836.rss"; Log.e("searchTxt",m_searchTxt); XmlData xmlData = null; ArrayList<XmlData> m_xmlData = new ArrayList<XmlData>(); String sTag; try { XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); factory.setNamespaceAware(true); XmlPullParser xpp = factory.newPullParser(); try { URL u = new URL(m_sConnectUrl); try { InputStream in = u.openStream(); xpp.setInput(in, "EUC-KR"); int eventType = xpp.getEventType(); while(eventType != XmlPullParser.END_DOCUMENT) { if(eventType==XmlPullParser.START_DOCUMENT) { } else if(eventType==XmlPullParser.END_DOCUMENT) { } else if(eventType==XmlPullParser.START_TAG) { Log.e("START_TAG", xpp.getName()); sTag= xpp.getName(); if(sTag.equals("title")) { xmlData = new XmlData(); xmlData.d_title = xpp.nextText(); } if(sTag.equals("link")) { xmlData.d_link = xpp.nextText(); } if(sTag.equals("author")) { xmlData.d_author = xpp.nextText(); } } else if(eventType==XmlPullParser.END_TAG) { sTag = xpp.getName(); if(sTag.equals("item")) { m_xmlData.add(xmlData); xmlData = null; } } else if(eventType==XmlPullParser.TEXT) { xmlData.d_description = xpp.nextText(); } eventType = xpp.next(); } } catch (IOException e) { // TODO Auto-generated catch block Toast.makeText(XmlAndroid.this,"catch 1", Toast.LENGTH_SHORT).show(); e.printStackTrace(); } } catch (MalformedURLException e) { // TODO Auto-generated catch block Toast.makeText(XmlAndroid.this,"catch 2", Toast.LENGTH_SHORT).show(); e.printStackTrace(); } } catch (XmlPullParserException e) { // TODO Auto-generated catch block Toast.makeText(XmlAndroid.this,"catch 3", Toast.LENGTH_SHORT).show(); e.printStackTrace(); } XmlListAdapter adapter = new XmlListAdapter(this,R.layout.row,m_xmlData); setListAdapter(adapter); } private class XmlListAdapter extends ArrayAdapter { private ArrayList items; public XmlListAdapter(Context context,int textViewResourceId,ArrayList items) { super(context,textViewResourceId,items); this.items = items; } @Override public View getView(int position,View convertView,ViewGroup parent) { View v = convertView; if(v==null) { LayoutInflater vi =(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); v = vi.inflate(R.layout.row, null); } XmlData xmlData = (XmlData)items.get(position); if(xmlData != null) { TextView tv1 = (TextView)v.findViewById(R.id.x_title); TextView tv2 = (TextView)v.findViewById(R.id.x_author); if(tv1 != null) { tv1.setText(Html.fromHtml("<a href='"+xmlData.d_link+"'>"+xmlData.d_title+"</a>")); tv1.setMovementMethod(LinkMovementMethod.getInstance()); } if(tv2 != null) { tv2.setText(xmlData.d_author); } } return v; } }
}
XmlPullParser 를 이용해서 xml을 파싱하려고 하는데요
어렵게 셈플 소스를 구해서 그대로 적용한거 같은데
try catch 문에서 자꾸 "catch 3" 문구 ( XmlPullParser 팩토리 생성하는 부분에서 발생하는듯 )가 출력이 됩니다....
2번 3번 확인해도 샘플 소스랑 차이가 없는데 ..
윗 소스가 잘못된건가요?
메니페스트에 <uses-permission android:name="android.permission.INTERNET"></uses-permission> 추가 한 상태구요
row.xml역시 만들어 져있구. XmlData.java 에 XmlData클래서 정의되어 있씁니다.
xml 읽어와서 파싱하는게 왜케 저에겐 어렵죠.. 2일째 밤샘 작업중인데... 아직 실마리가 안보이네요..