TableLayout과 Parsing을 같이 하려니 소스가 꼬여서 질문드립니다.
<TableLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#999999"
android:stretchColumns="*">
<View
android:layout_width="match_parent"
android:layout_height="1dp" />
<TableRow
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:background="#666666"
android:padding="3dp"
android:layout_marginBottom="1dp"
android:layout_marginLeft="1dp"
android:text="자료명"/>
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:background="#666666"
android:padding="3dp"
android:layout_marginBottom="1dp"
android:layout_marginLeft="1dp"
android:text="저자"/>
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:background="#666666"
android:padding="3dp"
android:layout_marginBottom="1dp"
android:layout_marginLeft="1dp"
android:text="출판사"/>
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:background="#666666"
android:padding="3dp"
android:layout_marginBottom="1dp"
android:layout_marginLeft="1dp"
android:text="소장처명"/>
</TableRow>
</TableLayout>

화면구성은 현재 이렇게 되어있는 상태입니다.
Spinner는 안에 item 집어넣기 전이라 저렇게 나왔는데, (자료명, 저자, 출판사) 이렇게 선택 가능합니다.
자료명 선택하고 EditText에 텍스트를 입력해서 검색을 누르면 해당하는 자료명의 정보를 검색하고 싶어요.
openAPI는 서울 공공데이터 이용했습니다.
http://data.seoul.go.kr/openinf/openapiview.jsp?infId=OA-2239&tMenu=11
여기 참고하시면 됩니다.
화면 자체는 Navigation Drawer를 이용하느라 extends Fragment(프래그먼트 사용)한 상태입니다.
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
getActivity().setTitle("소장자료 현황");
View view = inflater.inflate(R.layout.have_fragment, container, false);
spin = (Spinner) view.findViewById(R.id.spinner);
String data[] = {"자료명", "저자", "출판사"};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item, data);
spin.setAdapter(adapter);
assert view != null;
return view;
}
public void clickSearch(View v) {
String selData = spin.getSelectedItem().toString();
editText = (EditText) getView().findViewById(R.id.editText);
String str_text = editText.getText().toString();
String serviceKey = "인증키부분입니다.";
String serviceUrl = "http://openAPI.seoul.go.kr:8088/";
String strUrl = serviceUrl + serviceKey + "/xml/SeoulLibraryBookSearch/1/5/%20/";
String title = "";
String author = "";
String publer = "";
if (selData == "자료명") {
strUrl = strUrl + str_text;
}
if (selData == "저자") {
strUrl = strUrl + "%20/" + str_text;
}
if (selData == "출판사") {
strUrl = strUrl + "%20/%20/" + str_text;
}
new DownloadWeb().execute(strUrl);
}
public class DownloadWeb extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
try {
return (String)downloadUrl((String)params[0]);
} catch (IOException e) {
return "다운로드 실패";
}
}
@Override
protected void onPostExecute (String result) {
try {
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
XmlPullParser xpp = factory.newPullParser();
xpp.setInput(new StringReader(result));
int eventType = xpp.getEventType();
boolean bSet = false;
while (eventType != XmlPullParser.END_DOCUMENT) {
if (eventType == XmlPullParser.START_DOCUMENT) {
;
} else if(eventType == XmlPullParser.START_TAG) {
String tag_name = xpp.getName();
if (tag_name.equals("TITLE") || tag_name.equals("AUTHOR") || tag_name.equals("PUBLER") || tag_name.equals("LOCA_NAME"))
bSet = true;
} else if (eventType == XmlPullParser.TEXT) {
if (bSet) {
String content = xpp.getText();
tv.append(content + "\n");
bSet = false;
}
} else if(eventType == XmlPullParser.END_TAG) {
;
}
eventType = xpp.next();
}
} catch (Exception e) {
tv.setText(e.getMessage());
}
}
}
private String downloadUrl(String myurl) throws IOException {
HttpURLConnection conn = null;
try {
URL url = new URL(myurl);
conn = (HttpURLConnection) url.openConnection();
BufferedInputStream buf = new BufferedInputStream(conn.getInputStream());
BufferedReader bufreader = new BufferedReader(new InputStreamReader(buf, "utf-8"));
String line = null;
String page = "";
while ((line = bufreader.readLine()) != null) {
page += line;
}
return page;
} finally {
conn.disconnect();
}
}
소스가 이런 식인데, 예전에 parsing 간단한 예제 만들면서 사용했던 소스랑 짜집기한거구요..
이걸 고쳐야 하는데 보시다시피 TableRow 동적 생성 부분은 못 한 상태입니다.
tv는 원래 전에 예제하면서 썼던 textview인데, 저 부분을 TableRow 생성하는 부분으로 바꿔야 합니다.
그러니까 정확히 제가 구현하고 싶은 게 뭐나면,
ex) Spinner - '자료명' 선택, EditText - '빗방울처럼 나는 혼자였다' -> 검색 버튼 클릭
-> 자료명이 '빗방울처럼 나는 혼자였다'에 대한 자료명, 저자, 출판사, 소장처명이 Table로 표시됨.
이렇게 구현하고 싶어요. 그래서 if 조건문으로 Spinner에서 선택한 값을 받아와서 그것에 따른 결과를 표시하고 싶은데..
소스를 어떻게 고쳐야 할지 모르겠습니다. 도와주세요..ㅠㅠ