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

listView에서 getView 에러 : filter 사용 시 [closed]

0 추천

주석 달은 부분에서 문제가 생겼는데 도대체 어디가 문제인지 알 수가 없더군요..
동영상 검색 창에 일치하는 게 없는 영상 제목(예: a,b,c 영상만 있는데 d를 검
색할 경우)을 검색할 때 앱이 중지되버립니다 왜 그런거죠? 도와주세요!
public void searchMethod() {

    final EditText editSearch = (EditText) findViewById(R.id.searchView);

    assert editSearch != null;
    editSearch.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) { }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) { }

        @Override
        public void afterTextChanged(Editable s) {

            adapter.filter(editSearch.getText().toString());
        }
    });
}
//Adapter의 일부

@Override
public View getView(final int position, View convertView, ViewGroup parent) {

    ViewHolder holder;

    if (convertView == null) {

        holder = new ViewHolder();

        LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = inflater.inflate(R.layout.video_item, null);

        holder.icon = (ImageView) convertView.findViewById(R.id.iconView);
        holder.title = (TextView) convertView.findViewById(R.id.titleText);
        holder.route = (TextView) convertView.findViewById(R.id.routeText);
        holder.duration = (TextView) convertView.findViewById(R.id.durationText);
        holder.deleteButton = (ImageButton) convertView.findViewById(R.id.deleteButton);
        holder.memoButton = (ImageButton) convertView.findViewById(R.id.memoButton);
        holder.modifyButton = (ImageButton) convertView.findViewById(R.id.modifyButton);

        ContentResolver crThumb = getContentResolver();
        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inSampleSize = 1;

    if(videoItemList.get(position) != null) { //문제가 되는 부분
            holder.bitmap = MediaStore.Video.Thumbnails.getThumbnail(crThumb, 
videoItemList.get(position).getId(),
 MediaStore.Video.Thumbnails.MICRO_KIND, options);
            holder.icon.setImageBitmap(holder.bitmap);
        }
        convertView.setTag(holder);
    } else {
        holder = (ViewHolder)convertView.getTag();
    }

    if (videoItemList.get(position) != null) {
          .......(생략)
    }
 }

public void filter(String charText) { //호출한 필터

    videoItemList.clear();

    if(charText.length() == 0) {
        videoItemList.addAll(arrayList);
    } else {

        for(VideoItem vi : vData) {

            if(vi.getTitle().contains(charText)) {
                videoItemList.add(vi);
            }
        }
    }
    notifyDataSetChanged();
}
< LogCat >
com.example.gddjr.myapplication E/AndroidRuntime: FATAL EXCEPTION: main
질문을 종료한 이유: 제대로 된 질문을 작성하지 않음
주니어Programmer (480 포인트) 님이 2016년 6월 1일 질문
주니어Programmer님이 2016년 6월 2일 closed

1개의 답변

0 추천
 
채택된 답변

로그캣 에러내용이 다 보이지 않아서 정확한 해결방법이 아닐수도 있으나

에러가 발생했다는 라인으로만 봐서는

videoItemList가 null 일 경우 NullPointerException이 발생할 가능성이 있으므로

아래와 같이 널체크를 추가해서 해보시기 바랍니다.

if(null != videoItemList && videoItemList.get(position) != null)
Gradler (109,780 포인트) 님이 2016년 6월 1일 답변
주니어Programmer님이 2016년 6월 3일 채택됨
8000자 이내라 로그캣을 못올렸네요..위에 건 시도를 해보았는데 실패했습니다.

일단 제생각은 get(position)을 호출하는 것 자체가 문제인 것 같은데.. 해결을 못하겠네요.

06-01 18:54:21.118 7227-7227/com.example.gddjr.myapplication E/AndroidRuntime: FATAL EXCEPTION: main
                                                                               Process: com.example.gddjr.myapplication, PID: 7227
                                                                               java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
                                                                                   at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
                                                                                   at java.util.ArrayList.get(ArrayList.java:308)
                                                                                   at com.example.gddjr.myapplication.AppMainActivity$VideoAdapter.getView(AppMainActivity.java:280)
                                                                                   at android.widget.AbsListView.obtainView(AbsListView.java:2306)
                                                                                   at android.widget.ListView.measureHeightOfChildren(ListView.java:1270)
                                                                                   at android.widget.ListView.onMeasure(ListView.java:1182)
                                                                                   at android.view.View.measure(View.java:16664)
                                                                                   at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:719)
                                                                                   at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:455)
                                                                                   at android.view.View.measure(View.java:16664)
                                                                                   at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5173)
                                                                                   at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
                                                                                   at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:135)
                                                                                   at android.view.View.measure(View.java:16664)
                                                                                   at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5173)
                                                                                   at android.support.v7.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:391)
                                                                                   at android.view.View.measure(View.java:16664)
                                                                                   at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5173)
                                                                                   at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
                                                                                   at android.view.View.measure(View.java:16664)
                                                                                   at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5173)
                                                                                   at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1415)
                                                                                   at android.widget.LinearLayout.measureVertical(LinearLayout.java:706)
                                                                                   at android.widget.LinearLayout.onMeasure(LinearLayout.java:599)
                                                                                   at android.view.View.measure(View.java:16664)
                                                                                   at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5173)
                                                                                   at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
                                                                                   at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2536)
                                                                                   at android.view.View.measure(View.java:16664)
                                                                                   at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2078)
                                                                                   at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1234)
                                                                                   at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1416)
                                                                                   at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1121)
                                                                                   at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6030)
                                                                                   at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
                                                                                   at android.view.Choreographer.doCallbacks(Choreographer.java:574)
                                                                                   at android.view.Choreographer.doFrame(Choreographer.java:544)
                                                                                   at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
                                                                                   at android.os.Handler.handleCallback(Handler.java:733)
                                                                                   at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                                   at android.os.Looper.loop(Looper.java:136)
                                                                                   at android.app.ActivityThread.main(ActivityThread.java:5094)
                                                                                   at java.lang.reflect.Method.invokeNative(Native Method)
                                                                                   at java.lang.reflect.Method.invoke(Method.java:515)
                                                                                   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792)
                                                                                   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:608)
                                                                                   at dalvik.system.NativeStart.main(Native Method)
오류는 videoItemList에 아무것도 없는 뭔가 값을 꺼내려고 시도해서 발생한 것입니다.
videoItemList에 값이 왜 아무것도 없는지에 대한 부분을 검토해보셔야 합니다.
그리고 오류 나는 부분의 로직도 다음과 같이 수정하시기 바랍니다.
if(null != videoItemList && videoItemList.size() > 0 && videoItemList.get(position) != null)
...