안드로이드 개발 질문/답변
(글 수 45,052)
jsp에서 서버에 있는 DB를 검사한후, name 이 있으면 failed.xml 이라는 화면을 출력해서 그 xml 파일을 파싱해서 파싱한 값을 가져오는 것을 구현하고 있습니다. 소스는 아래와 같구요.
뭐가 잘못되었는지... 파싱해서 if 문 비교하는데서 안넘어갑니다.ㅠ
failed.xml, success.xml 은 아래처럼 그냥 단순합니다. 그래서 result 를 태그로 해서 가운데 success 만 파싱하려고 합니다.
도와주세요~~
<?xml version="1.0" encoding="UTF-8"?>
<result>success</result>
jsp 소스
<%@ page language="java"%>
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.sql.*"%>
<%
request.setCharacterEncoding("utf-8");
String nickname = request.getParameter("name");
ResultSet rs = null;
int i=0;
try{
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection con = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/test", "root", "1234");
String value = "";
Statement stmt = con.createStatement();
rs = stmt.executeQuery("select * from admin");
while(rs.next()){
if(nickname.equals(rs.getString("name"))){
i=1;
}
}
if(i==1){
response.sendRedirect("failed.xml");
}else{
response.sendRedirect("success.xml");
}
}catch(Exception e){
}
%>안드로이드 소스
public String parsingData(InputStream input){ //파싱을 합니다.
String result=null;
try{
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlPullParser parser = factory.newPullParser();
parser.setInput(new InputStreamReader(input));
while(parser.next()!=XmlPullParser.END_DOCUMENT){
String name = parser.getName();
if(name != null && name.equals("result"))
result = parser.nextText();
}
}catch(Exception e){e.printStackTrace();}
return result;
}
ResponseHandler<String> mResHandler = new ResponseHandler<String>(){
public String handleResponse(HttpResponse response){
String result = null;
try{
HttpEntity entity=response.getEntity();
result = parsingData(entity.getContent()); //여기서 사이트서 처리한걸 파싱해줍니다. 근데 result를 한번 찍어봤는데 아무것도 파싱안하는것 같습니다..ㅠ
Message message = mAfterDown.obtainMessage();
Bundle bundle = new Bundle();
if(result.equals("failed")){ //이부분에서 안넘어가는것 같습니다.
bundle.putString("result", "Faliled");
}else{
bundle.putString("result", "Success");
}
message.setData(bundle);
mAfterDown.sendMessage(message);
}catch(Exception e){;}
return result;
}
};
Handler mAfterDown = new Handler(){ //화면에 표시
public void handleMessage(Message msg){
pDialog.dismiss();
String sresult = msg.getData().getString("result");
TextView result = (TextView)findViewById(R.id.checkresult);
result.setText(sresult);
}
};
2011.10.03 16:09:39
jsp 에서는 문제없이 작동이 되는데요 안드로이드소스에서
23.HttpEntity entity=response.getEntity();24.result = parsingData(entity.getContent());
이부분에서 result 값이 파싱했는데도 null 값으로 되돌아오네요..ㅠ 파싱이 제대로 안되나봐요..
어느 블로거님께서 작성하신 글 보고 파싱한건데 이런 방식으로 보낸 결과물 가지고 와서 파싱하는게 아닌가요?
2011.10.03 16:32:43
XML파일구조가 어떤지 모르겠지만 아래구문을 참조하세요. 값을 읽어 오실려면 일정한 순서를 지나셔야 하는 듯하네요. 제일 의심스러운데는 eventType을 비교하는 방법이 문제가 이닐지..
import java.io.IOException;
import java.io.StringReader;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;
public class SimpleXmlPullApp
{
public static void main (String args[])
throws XmlPullParserException, IOException
{
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
XmlPullParser xpp = factory.newPullParser();
xpp.setInput( new StringReader ( "<foo>Hello World!</foo>" ) );
int eventType = xpp.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
if(eventType == XmlPullParser.START_DOCUMENT) {
System.out.println("Start document");
} else if(eventType == XmlPullParser.START_TAG) {
System.out.println("Start tag "+xpp.getName());
} else if(eventType == XmlPullParser.END_TAG) {
System.out.println("End tag "+xpp.getName());
} else if(eventType == XmlPullParser.TEXT) {
System.out.println("Text "+xpp.getText());
}
eventType = xpp.next();
}
System.out.println("End document");
}
}
죄송합니다. 이정도 밖에 모르겠네요. 디버깅으로 루프를 돌려보시는게 제일 나을 듯합니다.




이 소스만 봐서는 잘 알 수가 없네요. 디버그 모드로 거꾸로 하나씩 하나씩 값이 제데로 들어 왔는지 보시는게 더 나으실 듯... 서버랑 통신하시는 데를 기준으로 하시면 서버가 문제인지 안드로이드 앱이 문제 인지... 알 수 있지 않을 까요?