오피넷에서 얻은 유가 API를 적용하려하는데 xmlpullparser를 아무리 사용해도 적용이 안됩니다.
조회수 992회
저는 안드로이드 스튜디오를 전혀 사용해본적이 없었는데, 프로젝트 사정 상 급하게 프로토타입을 만들게 되었습니다. 그래서 모든것을 하나하나 검색하면서 하려니 굉장히 속도도 느리고 어려움이 많습니다.
여차저차 해서 어떻게든 만들고 있는데, 오피넷에서 얻은 유가 API 키를 받아 xml을 통해 적용시키려 하고 있는데 아무리 인터넷을 검색해 나온 방법대로 사용해도 되지가 않습니다.
이런 식으로 xml파일을 받아서 적용을 해봤습니다. 이 xml파일은 좌표 5000m 반경의 주유소들의 정보를 거리순, 가격순으로 나열해주는 파일입니다. 그래서 2개의 버튼을 만들어 거리순 가격순을 나오면 각각 나오게 하고 싶었습니다. 출력은 스크롤뷰를 만들고 거기에 TextView를 넣어서 하나씩 나오게 하고 싶었습니다.
<?xml version="1.0" encoding="utf-8"?>
<Button
android:id="@+id/button_distance"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginLeft="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:layout_marginRight="8dp"
android:layout_marginBottom="8dp"
android:text="거리순"
android:fontFamily="@font/yun320"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.778"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.011" />
<Button
android:id="@+id/button_price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginLeft="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:layout_marginRight="8dp"
android:fontFamily="@font/yun320"
android:text="가격순"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.188"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ScrollView
android:layout_width="395dp"
android:layout_height="652dp"
android:layout_marginStart="8dp"
android:layout_marginLeft="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:layout_marginRight="8dp"
android:layout_marginBottom="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="1.0">
<TextView
android:id="@+id/result"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</ScrollView>
이런식으로 xml파일을 만들고
public class GasStationActivity extends AppCompatActivity {
TextView text;
String data;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_gas_station);
text = (TextView) findViewById(R.id.result);
}
public void mOnclick(View v) {
switch (v.getId()) {
case R.id.button_distance:
new Thread(new Runnable() {
@Override
public void run() {
data = getXmlData();
runOnUiThread(new Runnable() {
@Override
public void run() {
text.setText(data);
}
});
}
}).start();
break;
}
}
String getXmlData() {
StringBuffer buffer = new StringBuffer();
String queryUrl = "http://www.opinet.co.kr/api/aroundAll.do?code=????????&x=311923&&y=551192&radius=5000&sort=2&prodcd=B027&out=xml";
try {
URL url = new URL(queryUrl);
InputStream is = url.openStream();
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlPullParser xpp = factory.newPullParser();
xpp.setInput(new InputStreamReader(is, "UTF-8"));
String tag;
xpp.next();
int eventType = xpp.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
switch (eventType) {
case XmlPullParser.START_DOCUMENT:
buffer.append("파싱 시작..\n\n");
break;
case XmlPullParser.START_TAG:
tag = xpp.getName();
if (xpp.getName().equals("OIL")) ;
if (xpp.getName().equals("UNI_ID")) {
buffer.append("주유소 ID: ");
xpp.next();
buffer.append(xpp.getText());
buffer.append("\n");
}
if (xpp.getName().equals("OS_NM")) {
buffer.append("주유소 이름: ");
xpp.next();
buffer.append(xpp.getText());
buffer.append("\n");
}
if (xpp.getName().equals("PRICE")) {
buffer.append("휘발유 가격: ");
xpp.next();
buffer.append(xpp.getText());
buffer.append("\n");
}
if (xpp.getName().equals("DISTANCE")) {
buffer.append("거리: ");
xpp.next();
buffer.append(xpp.getText());
buffer.append("m\n");
}
break;
case XmlPullParser.TEXT:
break;
case XmlPullParser.END_TAG:
tag = xpp.getName();
if(tag.equals("OIL")) buffer.append("\n");
break;
}
eventType = xpp.next();
}
} catch (Exception e) {
}
buffer.append("파싱 끝");
return buffer.toString();
}
} 인터넷에 검색하여 나온대로 했는데 도저히 나오지가 않습니다 (key부분은 ????로 가렸습니다.)
이대로 에물레이터를 통해 실행을 하면
아예 while문은 돌아가지도 않고 파싱끝만 나와버리네요..그리고 분명 TextView를 아래쪽으로 해놨는데 왜 맨 왼쪽 위로 가는걸까요..?
안드로이드 고수 형님들 부디 불쌍한 중생에게 한마디 부탁드립니다 ㅠㅠㅠ manifest에서 인터넷 허용은 했습니다!
-
(•́ ✖ •̀)
알 수 없는 사용자
댓글 입력