졸업작품 준비하는데 비전공분야라 힘드네요ㅜㅜ
여하튼 지금 하려고 하는게 웹DB에 있는 자료를 php로 받아와서 그 php에서 특정 값을 안드로이드로 파싱하려고 합니다
http://stardomy.nayana.com/xmlview.php
일단 웹DB의 자료를 php로 xml화 (이런 용어가 맞는건지는 모르겠습니다만..;;) 시키는 것까진 성공한것 같은데요
자바 소스는 다음과 같습니다
public class xmlpar extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ArrayList<String> titleList = getXmlData();
TextView text = (TextView) findViewById(R.id.text1);
StringBuffer sb = new StringBuffer();
for (int i = 0; i < titleList.size(); i++) {
sb.append(titleList.get(i)).append("\n\n");
}
text.setText(sb.toString());
}
public ArrayList<String> getXmlData(){
String rss = "http://stardomy.nayana.com/xmlview.php";
ArrayList<String> titleList = new ArrayList<String>();
try {
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
XmlPullParser xpp = factory.newPullParser();
URL url = new URL("rss);
InputStream is = url.openStream();
xpp.setInput(is, "utf-8");
int eventType = xpp.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
if (eventType == XmlPullParser.START_TAG) {
Toast.makeText(this, "dong", Toast.LENGTH_LONG).show();
// 이 토스트는 로그캣(?) 사용법을 몰라서 대용으로 사용하는 겁니다;;
if (xpp.getName().equals("phone")) {
String title = xpp.nextText();
if(title.equals("01091879783"))
titleList.add(title);
// 실질적인 데이터 파싱 부분인데 아직 미완성 입니다
}
}
eventType = xpp.next();
}
} catch (Exception e) {
e.printStackTrace();
}
return titleList;
}
}
이렇게 했으면 파싱은 제대로 안되더라도 START_TAG 판별이 되면 토스트라도 떠야 정상아닌가요?
근데 토스트도 안뜨네요;; 다른 php 파일로 시도해보면 토스트가 뜨는데 위의 주소의 php로 시도하면 안됩니다
이런 경우는 php의 시작 태그를 인식 못하는거 맞나요? 그럼 제가 php 소스코딩을 잘못한건가요?
아무리 찾아도 시작 태그 인식 자체를 못하는 사례는 없어 이렇게 질문 올립니다
왜 그럴까요.. 고수분들의 조언을 좀 듣고싶습니다
참고로 웹DB는 나야나닷컴(http://www.nayana.com/)의 무료 호스팅을 사용했고
위에 사용된 php 코드는 다음과 같습니다.
<?
include "connect.php";
// connect.php 에서 db주소/ID/PW/테이블 모두 설정 해줬습니다.
$sql = "select * from eat ";
$result = mysql_query($sql, $connect);
$content = $row[content];
$content = $content;
$content = $row[content];
$total_record = mysql_num_rows($result); // 전체 글 수
echo "<?xml version=\"1.0\" encoding=\"euc-kr\"?>\n";
echo "<channel>\n";
echo "\t<ttl>";
echo $total_record;
echo "</ttl>\n";
for ($i=0; $i<$total_record; $i++)
{
mysql_data_seek($result, $i);
$row = mysql_fetch_array($result);
echo "\t<item>\n";
echo "\t\t<phone>";
echo $row[phone];
echo "</phone>\n";
echo "\t\t<name>";
echo iconv("utf-8", "euc-kr", $row[name]);
echo "</name>\n";
echo "\t\t<money>";
echo $row[money];
echo "</money>\n";
echo "\t\t<total>";
echo $row[total];
echo "</total>\n";
echo "\t</item>\n";
}
echo "</channel>\n";
?>
(php 소스 수정했습니다)
도와주세요ㅜㅜ
답변 감사합니다
제가 이거저거 해보다가 php파일 수정을 좀 했는데 이젠 아예 xml도 제대로 안나오네요
다른 db에 적용하면 잘 나오는데 (http://findpet.nayana.com/xmlview.php)
왜 안되는지 도무지 알수가 없네요
사용하는 웹db도 같은 호스팅업체 것을 사용하고 설정도 똑같고 모든 조건이 같은데 말이죠;;
http://stardomy.nayana.com/xmlview.php XML을 잘 반환하고 있는 것 같습니다. 저 같은 경우는 우선 xml을 문자열로 받아와서 StringReader로 XPP에 Input을 제공하는 방법인데요. URL에 접근하면 바로 XML문서가 나오는 게 아니라 앱에서 특정 조건을 전송하면 그 조건에 맞는 XML이 돌아오기 때문입니다.
url = new URL(""http://*********.**.**/******/read_list.php");
con = (HttpURLConnection)url.openConnection();
con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
con.setDoOutput(true);
con.setDoInput(true);
con.setRequestMethod("POST");
String postBody = "device_id=" + deviceid;
postBody += "&table_name=" + GlobalData.getInstance().baseData().getString("hospitalID");
//POST방식으로 특정 값을 서버로 날립니다.
OutputStreamWriter wr = new OutputStreamWriter(con.getOutputStream());
wr.write(postBody);
wr.flush();//서버로 전송 완료
BufferedReader rd = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8"));
//서버에서 전송하는 값을 받기 위한 BufferedReader입니다. (XML값)
String line = null;
while ((line = rd.readLine()) != null) {
receivedXML += line; //들어오는 값을 모두 하나의 문자열 변수에 더합니다.
}
line = null;
rd.close();
wr.close();
//그러면 recievedXML에는 받아온 XML문서가 줄바꿈없이 들어갑니다. 상관없음~
//이때, 이 곳에 Break Point를 찍고 receivedXML 변수를 확인하면 제대로 들어왔는지 알 수 있습니다.
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
XmlPullParser xpp = factory.newPullParser();
xpp.setInput(new StringReader(receivedXML));//문자열을 Input으로 설정합니다. 이후 파싱하시면 됩니다~



아.. 이런작업에는 전 주로 jsp를 사용하는지라 php는 잘 모르겠지만...
토스트 뜨는곳 위에 로그 함 찍어보세요.
url이 잘못돼서 아예 START_TAG로 못넘어가는 경우일지도 모릅니다.
php의 for 문 안에도 함 찍어보세요.