일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 빗버킷 #bitbucket #authorization failed #깃
- 키스토어
- 제플린
- #리사이클러뷰
- #android #안드로이드 #glide #gif #이미지다운로드
- 안드로이드 아키텍쳐
- #리사이클러뷰 어댑터
- 안드로이드 메모리릭
- #ContentProvider #App DataShare
- #안드로이드 개발자 #안드로이드 신입 #개발자 이직 #안드로이드 면접 #신입 개발자
- retrofit2
- 안드로이드
- 클린아키텍쳐
- retrofit
- 메모리릭
- 구글맵안돼요
- 리사이클러뷰 체크박스
- 레트로핏
- 안드로이드 익명클래스
- #SMS API #안드로이드 SMS #SMS Retriever
- 안드로이드해상도
- zeplin
- #안드로이드
- 사용법
- MVVM
- retrofi
Archives
- Today
- Total
땀이 삐질삐질 나는 개발 일기
RecyclerView 와 Retrofit2를 사용해 영화 목록 얻어오기 본문
개요
영화진흥위원회 오픈 API를 이용해 리사이클러뷰 Item ADD
Base Url:http://www.kobis.or.kr/
Path : kobisopenapi/webservice/rest/movie/searchMovieList.xml?key
Query : key = 430156241533f1d058c603178cc3ca0e(테스트 키)
Lib :Recyclerview , Retrofit2
*Reference URL : *http://www.kobis.or.kr/kobisopenapi/homepg/apiservice/searchServiceInfo.do
사용
안드로이드 X 기준으로 gradle 세팅되었습니다.
*기존 support 라이브러리를 이용하실 분은 *
https://developer.android.com/jetpack/androidx/migrate**해당 URL에서 대체되는 라이브러리를 추가하시면 됩니다.**
Gradle Dependency
//recyclerview
implementation 'androidx.recyclerview:recyclerview:1.0.0'
//retrofit2
implementation 'com.squareup.retrofit2:retrofit:2.5.0'
implementation 'com.squareup.retrofit2:converter-gson:2.5.0'
main_activity.xml
<LinearLayout xmlns:android="[http://schemas.android.com/apk/res/android](http://schemas.android.com/apk/res/android)"
xmlns:tools="[http://schemas.android.com/tools](http://schemas.android.com/tools)"
android:layout\_width="match\_parent"
android:layout\_height="match\_parent"
tools:context=".test.recyclerview.MainActivity">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerview"
android:layout\_width="match\_parent"
android:layout\_height="match\_parent" />
item_movie.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android\="[http://schemas.android.com/apk/res/android](http://schemas.android.com/apk/res/android)"
android:layout\_width="match\_parent"
android:layout\_height="wrap\_content"
android:orientation="vertical"\>
<TextView
android:id="@+id/txtTitle"
android:layout\_width="match\_parent"
android:layout\_height="wrap\_content"
android:text="123123123"
android:textColor="#000000" />
</LinearLayout>
*자바 코드 *
MainActivity.java
public class MainActivity extends AppCompatActivity {
private RecyclerView recyclerView;
private Adapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\_main);
init();
}
public void init() {
adapter \= new Adapter(this,R.layout.item\_movie);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
linearLayoutManager.setOrientation(RecyclerView.VERTICAL);
recyclerView \= findViewById(R.id.recyclerview);
recyclerView.setLayoutManager(linearLayoutManager);
recyclerView.setAdapter(adapter);
getMovieList();
}
public void getMovieList(){
Call<ResponseBody> call =NetworkHelper.getInstance().getApiService().getMovieList(Const.KEY);
call.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
if(response.code()==200){
ResponseBody responseBody = response.body();
try {
JsonParser parser= new JsonParser();
JsonObject jsonObject = parser.parse(responseBody.string())
.getAsJsonObject().get("movieListResult").getAsJsonObject();
JsonArray array = jsonObject.get("movieList").getAsJsonArray();
List<String> items = new ArrayList<>();
for(int i =0 ; i<array.size(); i++){
JsonObject insideObject = array.get(i).getAsJsonObject();
String movieNm =insideObject.get("movieNm").getAsString();
items.add(movieNm);
}
adapter.addItem(items);
adapter.notifyDataSetChanged();
} catch (IOException e) {
e.printStackTrace();
}
}
else{
Log.e("리스폰 코드",""+response.code());
}
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
Log.e("리스폰 코드",""+t.getMessage());
}
});
}
}
Adapter.java
public class Adapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private Context context;
private int layoutId;
private List<String> items;
public Adapter(Context context, int layoutId) {
this.context \= context;
this.layoutId \= layoutId;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(layoutId, parent, false);
return new ItemViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
String item = items.get(position);
if (holder instanceof ItemViewHolder) {
((ItemViewHolder) holder).textView.setText(item);
}
}
@Override
public int getItemCount() {
return items \== null ? 0 : items.size();
}
public void addItem(List<String> item) {
if (items \== null)
items \= new ArrayList<>();
items.addAll(item);
}
public static class ItemViewHolder extends RecyclerView.ViewHolder {
private TextView textView;
public ItemViewHolder(@NonNull View itemView) {
super(itemView);
textView \= itemView.findViewById(R.id.txtTitle);
}
}
}
apiService.interface
public interface ApiService {
@GET("kobisopenapi/webservice/rest/movie/searchMovieList.json")
Call<ResponseBody> getMovieList(@Query("key") String key);
}
**Const.java**
public class Const {
public static final String BASEURL \="[http://www.kobis.or.kr/](http://www.kobis.or.kr/)";
public static final String KEY \="430156241533f1d058c603178cc3ca0e";
}
NetwrokHelper.java
public class NetworkHelper {
private Retrofit retrofit;
private ApiService apiService;
public static NetworkHelper networkHelper \= new NetworkHelper();
public NetworkHelper() {
retrofit \= new Retrofit.Builder()
.baseUrl(Const.BASEURL)
.addConverterFactory(GsonConverterFactory.create())
.build();
apiService \=retrofit.create(ApiService.class);
}
public static NetworkHelper getInstance() {
return networkHelper;
}
public ApiService getApiService() {
return apiService;
}
}
'개발 Tip' 카테고리의 다른 글
다른 앱과 Data Share하는 방법 Feat. ContentProvider (0) | 2019.05.17 |
---|---|
여러개의 EditText의 String 값을 깔끔하게 Null & Empty 검사하는 방법 (0) | 2019.05.16 |
안드로이드 RecyclerView Item Delete (0) | 2019.04.21 |
LinkedTreeMap 을 DTO로 변환 시 발생하는 문제 (1) | 2019.03.21 |
SMS Retriever API 사용 (0) | 2019.03.12 |
Comments