마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

리사이클러뷰에 대해 질문 드립니다.

0 추천

안녕하세요. 모바일 개발자가 꿈인 학생입니다.

제가 EditText를 이용하여 EditText를 getText().toString() 해서 받은 값을 유튜브에 검색을 하는 프로젝트를 만들어 보려 합니다. 코드는 아래와 같이 입력했습니다.

하지만,, 에뮬레이터에 구동을 시켜보니,,, 텍스트를 입력하고 버튼을 누르면 비정상 종료 되진 않는데 아무런 결과도 나오지 않더라고요.. 그래서 중간 중간 Log값을 찍게 하면 Log값은 또 잘 찍어 냅니다.

코드의 어떤 부분이 문제일까요? 도와주십시오 부탁드립니다.

 

<SearchActivity.java>

public class SearchActivity extends Fragment {
    private RecyclerView recyclerView;
    private SearchAdapter adapter;
    private EditText editText;

    RequestQueue queue;

    @Override
    public View onCreateView(final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.activity_search, container, false);

        recyclerView = view.findViewById(R.id.recyclerView_view);

        Button button = view.findViewById(R.id.button);
        editText = view.findViewById(R.id.editText);

        recyclerView.setHasFixedSize(true);
        GridLayoutManager layoutManager = new GridLayoutManager(getActivity(), 2);
        recyclerView.setLayoutManager(layoutManager);

        queue = Volley.newRequestQueue(getContext());

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                String url = "https://www.googleapis.com/youtube/v3/search?"
                        + "part=snippet&q=" + editText.getText().toString()
                        + "&key=" + "유튜브 개발자 api" + "&maxResults=50";

                StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
                        new Response.Listener<String>() {
                            @Override
                            public void onResponse(String response) {
                                try {
                                    JSONObject jsonObj = new JSONObject(response);
                                    JSONArray arrayItems = jsonObj.getJSONArray("items");

                                    List<SearchData> searchData = new ArrayList<>();

                                    for (int i = 0, j = arrayItems.length(); i < j; i++) {
                                        JSONObject obj = arrayItems.getJSONObject(i);

                                        int original_rank = i + 1;

                                        String original_title = obj.getJSONObject("snippet").getString("title");
                                        String title = "#" + original_rank + " " + original_title;
                                        String thumbUrl = obj.getJSONObject("snippet").getJSONObject("thumbnails").getJSONObject("standard").getString("url");
                                        String videoId = obj.getJSONObject("snippet").getJSONObject("resourceId").getString("videoId");

                                        searchData.add(new SearchData(title, thumbUrl, videoId));
                                    }

                                    adapter = new SearchAdapter(searchData);
                                    Fresco.initialize(getContext());
                                    recyclerView.setAdapter(adapter);

                                    adapter.setOnItemClickListener(new OnSearchItemClickListener() {
                                        @Override
                                        public void onItemClick(SearchAdapter.ViewHolder holder, View view, int position) {
                                            SearchData searchData1 = adapter.getItem(position);
                                            String selectedVideoId = searchData1.getVideoId();

                                            Intent intent = new Intent(getContext(), YoutubeViewerActivity.class);
                                            intent.putExtra("videoId", selectedVideoId);
                                            startActivity(intent);
                                        }
                                    });
                                } catch (Exception e) {
                                    e.printStackTrace();
                                }
                            }
                        }, new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {

                    }
                });
                queue.add(stringRequest);
            }

        });
        return view;
    }
<SearchAdapter.java>
public class SearchAdapter extends RecyclerView.Adapter<SearchAdapter.ViewHolder> implements OnSearchItemClickListener{
    private List<SearchData> mDataset;
    OnSearchItemClickListener listener;

    public static class ViewHolder extends RecyclerView.ViewHolder {
        public TextView textView_title;
        public SimpleDraweeView imageView_thumb;

        public ViewHolder(View view, final OnSearchItemClickListener listener) {
            super(view);

            textView_title = view.findViewById(R.id.textView_title);
            imageView_thumb = view.findViewById(R.id.imageView_thumb);

            view.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    int position = getAdapterPosition();

                    if (listener != null) {
                        listener.onItemClick(ViewHolder.this, view, position);
                    }
                }
            });
        }
    }

    public SearchAdapter(List<SearchData> myDataset) {
        mDataset = myDataset;
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        LayoutInflater inflater = LayoutInflater.from(parent.getContext());
        View view = inflater.inflate(R.layout.search_item, parent, false);

        return new ViewHolder(view, this);
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        SearchData searchData = mDataset.get(position);
        holder.textView_title.setText(searchData.getTitle());

        Uri uri = Uri.parse(searchData.getThumb()); //Fresco
        holder.imageView_thumb.setImageURI(uri);
    }

    @Override
    public int getItemCount() {
        return mDataset.size();
    }

    public void setOnItemClickListener(OnSearchItemClickListener listener) {
        this.listener = listener;
    }

    @Override
    public void onItemClick(ViewHolder holder, View view, int position) {
        if (listener != null) {
            listener.onItemClick(holder, view, position);
        }
    }

    public SearchData getItem(int position) {
        return mDataset.get(position);
    }
}
<SearchData.java>
public class SearchData {
    String title;
    String thumb;
    String videoId;

    public SearchData(String title, String thumb, String videoId) {
        this.title = title;
        this.thumb = thumb;
        this.videoId = videoId;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getThumb() {
        return thumb;
    }

    public void setThumb(String thumb) {
        this.thumb = thumb;
    }

    public String getVideoId() {
        return videoId;
    }

    public void setVideoId(String videoId) {
        this.videoId = videoId;
    }
}

에뮬레이터에는 이렇게 나옵니다..

에뮬레이터에는 이렇게만 나옵니다..

realcdh (140 포인트) 님이 5월 18일 질문

2개의 답변

0 추천
Adapter에 getItemCount에서 로그를 찍어 보면 개수는 잘 나오나요?

그리고 RecyclerView가 XML 상에서 positioning을 잘 하고 있는지 확인해 보셨나요?
원더풀코딩라이프 (560 포인트) 님이 5월 24일 답변
0 추천
url도 찍어보셨나요?
hanix 님이 5월 25일 답변
...