안드로이드 개발 질문/답변
(글 수 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일째 밤샘 작업중인데... 아직 실마리가 안보이네요..



