프로그래밍/부스트코스

부스트 코스 에이스 미션 4 (volley, ViewModel, 개선사항)

돌및쓰고 2019. 8. 23. 01:49

1차 PASS

 

1. volley

    private void loadMovieInfo() {
        JSONObject json = new JSONObject();
        try {
            json.put("id", id);
        } catch (JSONException e) {
            e.printStackTrace();
        }
        JsonObjectRequest request = NetworkHelper.requestGetString("/movie/readMovie?id=" + id, json, new ResponseListener() {
            @Override
            public void sucessedResponse(JSONObject params) {
                Log.d("INFO", params.toString());
                Gson gson = new Gson();
                GetReadMovie movieList = gson.fromJson(params.toString(), GetReadMovie.class);
                setMovieInfo(movieList.result.get(0));
            }

            @Override
            public String failedResponse(String params) {
                Log.d("INFO", "fail" + params);
                return null;
            }
        });
        NetworkHelper.getRequestQueue().add(request);
    }
    
    public static JsonObjectRequest requestGetString(String url, JSONObject jsonObject, final ResponseListener listener) {
        return new JsonObjectRequest(
                Request.Method.GET,
                HOST_IP + url, jsonObject,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        println("응답 -> " + response);
                        listener.sucessedResponse(response);
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        println("에러 -> " + error.getMessage());
                        listener.failedResponse(error.getMessage());
                    }
                }
        ) {
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                Map<String, String> params = new HashMap<String, String>();
                return params;
            }
        };
    }

retrofit, okhttp만 사용하다 volley를 사용해본결과

사용법은 대체로 다비슷하지만 

retrofit이 코드정리나 기능면에서 더 사용이 간단함

volley는 자료가 적고 request나 header세팅등이 복잡한 느낌

 

2. ViewModel

ds_chanin의 코드 리뷰결과

코드를 좀더 세분화하여 정리하고

observer, ViewModel등

안드로이드에서 주로사용하는 디자인패턴을 적용해야함을 느낌

 

3. 지적사항 및 개선사항 (2차 )

1. 접근제어자 잘붙이기

 -귀찮아도 생각하고 붙이자
2. string.xml 활용

- 네이밍이 너무 어렵다.
3. 변수명에 언더바쓰지않기

- 전혀 몰랏던내용 앞으로 숙지하자

4. 액티비티간 데이터공유 방법 고민

- static으로 불러오는 방식이 맞는지 고민중

5. getInstance는 싱글톤 객체에만 사용

6, e.printstacktrace 지양 - 성능 및 보안에 취약함 관련내용 포스팅

7. 클래스를 좀더 세분화하여 코드분석시에 결과만 신경쓸 수 있도록 수정

8. getcontext or this 대신 applicationcontext를 전달하여 사용하는것이 좋음

9. gson의 typetoken메소드 방식 고려