Json 실습
영화 박스오피스 App
영화진흥위원회 DATA 가져오기
원하는 정보를 가져오자
나는 일별 박스오피스 API 서비스를 이용했다.
맨 하단 응답 예시에서 원하는 데이터 형태의 url을 복사한 후 주소창에 입력 해 보면
json 형태의 데이터를 확인할 수 있다.
날짜를 변경하고 싶다면 url 맨 뒤 날짜를 변경해주자
링크에 접속 후 json 형태의 데이터를 넣어주면 좀 더 보기 편한 형태로 json 데이터를 확인할 수 있다.
안드로이드 스튜디오
이제 안드로이드 스튜디오로 접속 후 res -> layout에 새로운 레이아웃 파일을 만들어주자
새로만든 layout 설정
가운데 정렬 : gravity -> center
java 클래스 내에 movieVO 와 Movieadapter를 만들어준다
movieVO.java
- layout에 담을 데이터에 관한 vo
- 생성자, getter setter 만드는 단축키 : alt + insert
public class movieVO {
// 영화 정보에 필요한 데이터들 정리하기
private String rank;
private String old_new;
private String movie_title;
private String count;
private String open;
public movieVO(String rank, String old_new, String movie_title, String count, String open) {
this.rank = rank;
this.old_new = old_new;
this.movie_title = movie_title;
this.count = count;
this.open = open;
}
public String getRank() {
return rank;
}
public void setRank(String rank) {
this.rank = rank;
}
public String getOld_new() {
return old_new;
}
public void setOld_new(String old_new) {
this.old_new = old_new;
}
public String getMovie_title() {
return movie_title;
}
public void setMovie_title(String movie_title) {
this.movie_title = movie_title;
}
public String getCount() {
return count;
}
public void setCount(String count) {
this.count = count;
}
public String getOpen() {
return open;
}
public void setOpen(String open) {
this.open = open;
}
}
Movieadapter.java
BaseAdapter를 상속받는 adapter를 만들어 주자
package com.example.ex_0718;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import java.util.ArrayList;
public class Movieadapter extends BaseAdapter {
// 1. Adapter 기능을 가질 수 있는 Movie Adapter 클래스 만들기
// - 필수적으로 구현해야 하는 메소드들 불러올 수 있도록
private Context context;
private int layout;
private ArrayList<movieVO> dataset;
// 2. Adapter에 필요한 객체 선언
// - 어플의 정보를 담을 수 있는 객체, 레이아웃을 담기 위한 객체, 데이터셋을 담기위한 객체
// - 레이아웃 템플릿을 xml -> view타입으로 변환이 가능한 객체
private LayoutInflater inflater;
public Movieadapter(Context context, int layout, ArrayList<movieVO> dataset) {
this.context = context;
this.layout = layout;
this.dataset = dataset;
inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return dataset.size();
}
@Override
public Object getItem(int i) {
return dataset.get(i);
}
@Override
public long getItemId(int i) {
// 0이라고 입력해도 상관 x
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
view = inflater.inflate(layout, null);
TextView rank = view.findViewById(R.id.rank);
TextView old_new = view.findViewById(R.id.old_new);
TextView movie_title = view.findViewById(R.id.movie_title);
TextView count = view.findViewById(R.id.count);
TextView open = view.findViewById(R.id.open);
rank.setText(dataset.get(i).getRank());
old_new.setText(dataset.get(i).getOld_new());
movie_title.setText(dataset.get(i).getMovie_title());
count.setText(dataset.get(i).getCount());
open.setText(dataset.get(i).getOpen());
return view;
}
}
Activity_main.xml
layout을 불러올 Activity_main에 btn과 llistview를 만들어준다
- 클릭 시 영화데이터 불러올 예정!
MainActivity.java
package com.example.ex_0718;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Adapter;
import android.widget.Button;
import android.widget.ListView;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
Button btn;
ListView listView;
// Volley 사용시 필요한 객체
RequestQueue requestQueue; // 요청을 보내주는 객체
StringRequest request; // 요청시 필요한 정보를 담아주는 객체
// Adpater 연결 시 필요한 객체
Movieadapter adapter;
ArrayList<movieVO> dataset;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn = findViewById(R.id.btn);
listView = findViewById(R.id.listview);
requestQueue = Volley.newRequestQueue(getApplicationContext());
dataset = new ArrayList<>();
adapter = new Movieadapter(getApplicationContext(), R.layout.movie_item, dataset);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
request = new StringRequest(
Request.Method.GET,
"https://kobis.or.kr/kobisopenapi/webservice/rest/boxoffice/searchDailyBoxOfficeList.json?key=f5eef3421c602c6cb7ea224104795888&targetDt=20220717",
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
JSONObject json = new JSONObject(response);
// 내가 가지고 오고싶은 key값 입력
JSONObject json2 = json.getJSONObject("boxOfficeResult");
JSONArray movies = json2.getJSONArray("dailyBoxOfficeList");
for (int i = 0; i < movies.length(); i++) {
JSONObject movie = (JSONObject) movies.get(i);
Log.d("checK", movie.getString("movieNm"));
String rank = movie.getString("rank");
String old_new = movie.getString("rankOldAndNew");
String movie_title = movie.getString("movieNm");
String count = movie.getString("audiAcc");
String open = movie.getString("openDt");
dataset.add(new movieVO(rank, old_new,movie_title,count,open));
} // for문 종료
listView.setAdapter(adapter);
// JSONObject data = json.getJSONObject("boxOfficeResult").getJSONArray("dailyBoxOfficeList")
} catch (JSONException e) {
e.printStackTrace();
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("error", error.toString());
}
}
);
requestQueue.add(request);
}
});
}
}
짠 완성
'Android' 카테고리의 다른 글
[Android Studio] 안드로이드 스튜디오 Event 실습 02 (0) | 2022.07.22 |
---|---|
[Android Studio] Volley 사용하기 & Volley 예제/ 통신하기 (0) | 2022.07.15 |
[Android Studio] 안드로이드 스튜디오 Event & Event 실습 (0) | 2022.07.08 |
[Android Studio] Layout이란? Layout 기본예제 (0) | 2022.07.07 |
[Android Studio] 안드로이드 스튜디오 프로젝트 만들기 & 기본 예제 (0) | 2022.07.07 |