옮겨 놓다가 보니자꾸 안되서 애먹었는데,, 이상하게 네트워크관련해서
Manifest 요부분에서
<uses-sdk
android:target~~/>어쩌구 부분을 지웠더니 된다.
xml 파싱할때도 네트워킹이니까 주의 하도록해야겠다.
xml파서를 하다보니 참이상하게도,, xml데이터가안열리네,,,,이건뭔지
나의 데이터형식은
<item>
<title>~~~~`</title>
<link>~~</link>
</item>
<item>
<title>~~~~`</title>
<link>~~</link>
</item>
<item>
<title>~~~~`</title>
<link>~~</link>
</item>
.....
이런형식이었는데 자꾸 열면 인터넷상에서 에러가났다.흠 가장상위 태그는 하나만해야되서그런건가??,,, 그래서 고쳐보니
<item>
<title>~~~</title>
<link>~~~</link>
<title>~~~</title>
<link>~~~</link>
<title>~~~</title>
<link>~~~</link>
</item>
이런식으로 고치니까 웹상에서 문제없이 잘됫다. 이것 또한 참고해야겠다. 일단 오늘은 xml파싱으로 데이터를 가져오는 연습을했는데 이것도 안되다가 되서 너무좋다 ㅜㅜ 근데 옛날꺼라 참고한 곳의 링크가 다사라져버렸네 ㅜㅜ(능력자님들죄송합니다 ㅜㅜ)
import java.io.InputStream;
import java.net.URL;
import java.util.ArrayList;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.widget.TextView;
public class XMLText extends Activity{
//여기다가 내가 파싱한것중 title만 뽑아서 가져올것이다. 후에 어레이로변환해서 데이터로 쓰기에는 너무좋은 방법인것같다.
ArrayList<String> titleList;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_xmltest);
String Buffer sb=new StringBuffer();
TextView text=(TextView) findViewById(R.id.text);
//xml파싱시작해야디!!일단 getXmlData()란메소드를 호출하여 데이터가져올것이다.
titleList=getXmlData();
for(int i=0;i<titleList.size();i++)}
sb.append(titleList.get(i)).append("\n\n");
}
text.setText(sb.toString());
}
//파싱할것들을 정의해보자
private ArrayList<String> getXmlData(){
String res="이부분은 내가가져올 서버의 xml이담긴곳의주소를입력한다.";
titleList=new ArrayList<String>();
try{//일단 PullParser 인스턴스하나먼저 가져오자
XmlPullParserFactory factory=XmlPullParserFactory.newInstance();
//이것은 네임스페이스를 인지할건지 말건지를 고른다 일단 나는인지하는것으로 했고 디폴트값은 false 이다.
참고하자.이부분에서 네임스페이스에대한내용이상세하다
blog.naver.com/hkpking?Redirec=Log&logNo=30134247888 (감사합니다.능력자님)
factory.setnamespaceAware(true);
//그뒤에 factory로하여금 pullparser를 가져온다.
XmlPullParser xpp=factory.newPullParser();
//내가지정한 유알엘로 들어가고
URL url=new URL(res);
//이부분에서 고생을 많이했는데, 역시나 문제는
Manifest에서 INTERNET허용 그리고 책에서 보면 null이 아닌 인코딩값이있는데 내컴퓨터가이상한건지 utf-8이런거하면안된다,,,그래서나는 null
xpp.setInput(url.openStream(),null);
//이것 xml로하여금 데이터를 찾기위해쓰는것이다.
int eventType=xpp.getEventType();
//만약에 데이터가 끝까지가지않았으면 그냥돌아라 라는얘기
while(eventType!=XmlPullParser.END_DOCUMENT){
//만약에 태그가 처음시작되는지점이라면
if(eventType==XmlPullParser.START_TAG){
//그리고 그태그가 title이면
if(xpp.getName().equalsIgnoreCase("title"){
//가져오자 그리고넘어가자 정말 좋은것 같다.
nextText()요녀석이 2개의 역활이나하니까 ㅋ
String title=xpp.nextText();
titleList.add(title);
}
}
//첫번째 메인 태그가 돌았으면 이제그다음태그로간다.
eventType=xpp.next();
}
}catch(Exception e){
e.printStackTrace();
Log.d("asd",e.getMessage());
}
return titleList;
}
}
오늘 xml파싱도 성공!! 아무튼 로직보면 titleList궂이 전역선언안해도 되는데,,그냥이것저것 수정하다보니,,좀무의만 코드가 되었다... 하지만 ㅋ뭐실행잘되니,,, 나중에 한꺼번에 고칠때는 더효율적인 코드로 가야지 ,,!!!
이상열정남이었습니다. 사랑합니다!!