* build.gradle
*activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<Button
android:id="@+id/btnData"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="데이터 불러오기"
android:textAllCaps="false"></Button>
<ListView
android:id="@+id/listView1"
android:layout_width="match_parent"
android:layout_height="match_parent"></ListView>
</LinearLayout>
*MainActivity.java
- 변수 선언
package com.example.open_api_2with_json;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
public class MainActivity extends AppCompatActivity {
private String key = "자신의 key 값";
private String address = "https://www.kobis.or.kr/kobisopenapi/webservice/rest/boxoffice/searchDailyBoxOfficeList.json";
private ListView listView;
private Button btnData;
ArrayAdapter adapter;
// 영화 제목을 담을 ArrayList 변수(items) 선언
ArrayList<String> items = new ArrayList<String>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView)findViewById(R.id.listView1);
// adapter 스타일 선언 및 items 적용
adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, items);
// listView에 adapter 적용
listView.setAdapter(adapter);
btnData = (Button)findViewById(R.id.btnData);
btnData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new Thread(){
@Override
public void run() {
items.clear();
Date date = new Date();
date.setTime(date.getTime()-(1000*60*60*24)); // 현재의 날짜에서 1일을 뺀 날짜
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
String dateStr = sdf.format(date); // 20210316
String urlAddress = address + "?key=" + key + "&targetDt=" + dateStr;
try {
URL url = new URL(urlAddress);
InputStream is = url.openStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader reader = new BufferedReader(isr);
StringBuffer buffer = new StringBuffer();
String line = reader.readLine();
while (line != null) {
buffer.append(line + "\n");
line = reader.readLine();
}
String jsonData = buffer.toString();
// jsonData를 먼저 JSONObject 형태로 바꾼다.
JSONObject obj = new JSONObject(jsonData);
// obj의 "boxOfficeResult"의 JSONObject를 추출
JSONObject boxOfficeResult = (JSONObject)obj.get("boxOfficeResult");
// boxOfficeResult의 JSONObject에서 "dailyBoxOfficeList"의 JSONArray 추출
JSONArray dailyBoxOfficeList = (JSONArray)boxOfficeResult.get("dailyBoxOfficeList");
for (int i = 0; i < dailyBoxOfficeList.length(); i++) {
JSONObject temp = dailyBoxOfficeList.getJSONObject(i);
String movieNm = temp.getString("movieNm");
items.add(movieNm);
}
runOnUiThread(new Runnable() {
@Override
public void run() {
adapter.notifyDataSetChanged();
}
});
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
}
}.start();
}
});
// 리스트뷰의 아이템 클릭 이벤트 > 토스트 메시지 띄우기
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String data = (String)parent.getItemAtPosition(position);
Toast.makeText(MainActivity.this, data, Toast.LENGTH_SHORT).show();
}
});
}
}
* 실행화면
'Android Studio' 카테고리의 다른 글
open Api를 이용하여 json 데이터를 recyclerview에 뿌리기 (1) | 2021.07.23 |
---|---|
searchable spinner 만들기 ( 검색가능한 spinner ) (0) | 2021.07.22 |
Android Studio - Json Parsing (mssql > json file) (0) | 2021.03.09 |
Android Studio - ListView2 (0) | 2021.03.08 |
Android Studio - ListView (0) | 2021.03.08 |