Android Studio

안드로이드 스튜디오 api요청-TMDB api를 통하여 인기 영화 정보 받아오기(volley, gson)

리콜 2022. 11. 17. 04:11

먼저 http통하여 통신을해야 하므로 Volley라는 라이브러리를 사용하였습니다.
Volley에 관한 설명은 좀더 공부하여 다음에 올리도록 예정입니당.

간단히 말하자면 웹요청과 응답을 단순화하고 핸들러를 제공해줍니당.

volley를 사용하기 위하여 build.gradle(app) 의 dependencies에 라이브러리를추가합니다.

dependencies {
	//web request
    implementation 'com.android.volley:volley:1.2.1'
}

 

 그리고 웹요청을 하므로 인터넷 권한이 추가되어 있어야 한다는 점, 그리고 useCleartextTraffic을 manifests폴더의 AndroidMainfest.xml에  추가해줍니다. 

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.akj.패키지이름">

    <uses-permission android:name="android.permission.INTERNET" /> <!-- 인터넷 권한 -->
     <application

        android:usesCleartextTraffic="true"

 

저는 fragment의 onCreate()에서 스레드로 요청을 하고  요청한 것을 volley의 RequestQueue의 큐에 넣어 받아 오도록 하였습니다.  

 public class Fragment01 extends Fragment {
     static RequestQueue requestQueue;

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            // Inflate the layout for this fragment
            view = inflater.inflate(R.layout.activity_board, container, false);

            firebaseUser = FirebaseAuth.getInstance().getCurrentUser(); // 파이어베이스에서 유저정보를 받아오는데

            new Thread(new Runnable() {
                @Override
                public void run() {
                    makeRequest("https://api.themoviedb.org/3/trending/all/week?api_key=키값&page=1&language=ko-KR");
                }
            }).start();


            if(requestQueue == null)
            {

                requestQueue = Volley.newRequestQueue(getActivity().getApplicationContext());
            }

먼저 RequestQueue객체를 static으로 선언하고 Thread에서 url을 받아 요청하는 함수인 makeRequest를 실행합니다.

그리고 밑에 request객체를 생성합니다.

 

makeRequest함수

public void makeRequest(String url)
    {
        StringRequest request = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                Log.v("output popular", response); //요청 출력해보기
                Gson gson = new Gson();  //gson라이브러리 선언

                MovieList movieList = gson.fromJson(response, MovieList.class); //gson으로 Json파일 object로 변환
                Movie movie = movieList.results.get(0);
                Log.v("movie name", movie.title.toString());
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.e("error ", error.getMessage());
            }
        }
        ){
            protected  Map<String, String> getParams() throws AuthFailureError{
                Map<String, String> params = new HashMap<String, String>();

                return params;
            }
        };
        request.setShouldCache(false);
        Log.v("SendRequest","요청 보냄");

        requestQueue.add(request);  //리퀘스트 큐에 넣어 요청

만약 요청이 오는지만 확인한다면 첫줄의 onResponse()에서 첫번째줄인 Log.v()만 남겨두고  나머지는 지워서 확인 하면 된다.

Logcat에 출력

Gson을 통하여 Movie객체들에 넣는것은 다음 포스트에서 작성하겠습니다.

 

 

 

 

  

반응형