OpenAPI
서버에서 API불러오기
① activity_mail.xml 작업한다
LinearLayout
대량의 데이터를 끌고다닌다. 리사이클러뷰로 만들자.
영화진흥위원회에서 데이터를 가져와서 보여주자.
rank, movieNm, openDt,audiAcc 만 가져온다.
아답터가 뭐냐 ? 대량의 데이터를 뷰로 만들어주는 녀석이다.
<?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:orientation="vertical"
android:padding="16dp"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@+id/btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="load data from OpenAPI"/>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
android:orientation="vertical"/>
</LinearLayout>
②이제 데이터를 가져와서 보여준다.
불러온 데이터가 잘 보이는지 먼저 확인하는 습관을 갖는게 중요하다. 리사이클러뷰에 들어갈 데이터를 수동으로 만들어두고 잘 돌아가는지 먼저 확인해보자.
MovieItem설계한다. 여기에 들어가는 변수들은 내가 써야할 변수들이다. 데이터를 받아올때는 다 글씨로 받아온다.
변수의 이름은 가급적 똑같이 쓴다.
💡 저 친구가 만들어질때 값을 주고싶다면? 생성자를 만들어야한다.
③MainActivity.java에서 대량의 데이터를 만든다.
원래 서버에서 데이터를 가져와야하지만 동작 Test를 위해 수동으로 add해서 데이터를 넣어주자
파라미터를 안줘도 되거나, 파라미터 4개 있거나 (내가 생성자를 두 종류 만들었으니까)
값을 안주면 String이니까 기본값이 null null null null이 된다. null찍으면 이상하니까 테스트로 대충 넣어주자.
④이제 아이템뷰의 모양을 만들자 layout
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto"
app:contentPadding="16dp"
app:cardCornerRadius="16dp">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/tv_rank"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="no."
android:textStyle="bold"
android:textSize="18sp"
android:textColor="@color/black"/>
<TextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="title"
android:textStyle="bold"
android:textSize="18sp"
android:textColor="@color/purple_200"
android:layout_toRightOf="@id/tv_rank"
android:layout_marginLeft="16dp"/>
<TextView
android:id="@+id/tv_open_date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="23231225"
android:textStyle="bold"
android:textSize="18sp"
android:textColor="@color/purple_200"
android:layout_below="@id/tv_title"/>
<TextView
android:id="@+id/tv_audi"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="1233"
android:textStyle="bold"
android:textSize="18sp"
android:textColor="@color/purple_700"
android:layout_alignParentRight="true"
android:layout_alignBaseline="@id/tv_open_date"/>
</RelativeLayout>
</androidx.cardview.widget.CardView>
⑤이제 아답터를 만들어서 대량의 데이터를 뷰로 만들어주자
이제 MainActivity에서 연결하기.
수동 입력한 데이터는 잘 나온다. 이제부터는 진짜 서버에 있는 데이터를 불러오자.
⑥버튼을 누르면 서버에 있는 데이터를 가져와보자.
버튼 참조변수를 만들고 버튼을 누르면 실행하는 메소드르 만들자
영화진흥위원회에 있는 API정보를 가져와서 리사이클러뷰에 보여주자
그리고 네트워크 작업은 오래걸리므로 별도스레드가 필요하다.
스레드작업은 상당히 복잡하므로 이해하는데 시간이 걸린다. 천천히 살펴보자.
⑦ 메인액티비티.java에서 작업
일단 서버 url을 가져온 후, 스트림을 열어줄 객체(URL)을 만들어서 주소를 넣어준다.
(해당키는 영화진흥위원회에서 주는 샘플키이다. )
Stream을 연다
스트림을 열어줬으니 xml(영화정보)을 읽어오는 분석가를 준비하자
풀파서는 new해서 만들지못하고 공장에서 만들어줘야한다.
이제 분석을 시키자! xml을 next next next next 해서 데이터를 불러와야한다. 처음위치가 리소스파서는 0줄부터 시작해서 첨부터 next를 해줬어야했다 그러나 풀파서는 시작부터 이미 START_DOCUMENT 시작이다!
스위치문을 돌려서 xml의 이벤트타입별로 데이터를 가져온다.
int eventType=xpp.getEventType();// 시작부터 스타트 도큐먼트, 이벤트타입을불러온다
while(eventType!=XmlPullParser.END_DOCUMENT){//이게 아니면 계속 돌려라
switch (eventType){
case XmlPullParser.START_DOCUMENT:
break;
case XmlPullParser.END_DOCUMENT:
break;
case XmlPullParser.START_TAG:
break;
case XmlPullParser.TEXT:
break;
case XmlPullParser.END_TAG:
break;
}
}
넥스트 넥스트 넥스트는 START_TAG만 만나는게 아니라 중간에 TEXT도 만나게된다.
while문 밖에 MovieItem 참조변수 만들자
시작은 null이고, 내려가면 START_TAG가 dailyBoxOffice될때
MovieItem에 new해준다.
그러다가 rank를 만나게되면?
우리의 xml은 넥스트 하면 스타트 옆에 값이 써져있다.
처음에 movieItem은 null이었는데 next하면서 계속 그 옆에 있는 글씨를 하나씩 넣는다.
이제 두번째 영화를 훑어야하는데 그전에 기차에 데이터를 추가하자.
기차에 추가했으면 리사이클러뷰로 만들어준다.
반복문이 도는 동안 값을 가져오므로 TEXT는 필요없다.
'Android Studio(Java)' 카테고리의 다른 글
Android Studio BackEnd (0) | 2023.03.10 |
---|---|
Android Studio Fragment랑 FragmentActivity 차이점 (0) | 2023.03.06 |
Android RecyclerView 10분 따라하기(총 7 STEP) ! (0) | 2023.02.26 |
Android Studio ViewPager2 (0) | 2023.02.20 |
Android Studio Fragment (0) | 2023.02.20 |