2015-01-21 2 views
0

Я получаю аварию в случайном порядке. Я не знаю причину, потому что в отчете журнала не отображается номер строки. Я думаю, что получаю этот крах в списке.Ошибка в ListView

Я прикрепил этот список ниже относительного макета. И я устанавливаю видимость списка в соответствии с записями.

STACK_TRACE=java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.View.setDrawingCacheBackgroundColor(int)' on a null object reference 
at android.widget.AbsListView.obtainView(AbsListView.java:2357) 
at android.widget.ListView.measureHeightOfChildren(ListView.java:1270) 
at android.widget.ListView.onMeasure(ListView.java:1182) 
at android.view.View.measure(View.java:17430) 
at android.widget.RelativeLayout.measureChild(RelativeLayout.java:697) 
at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:481) 
at android.view.View.measure(View.java:17430) 
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463) 
at android.widget.FrameLayout.onMeasure(FrameLayout.java:430) 
at android.view.View.measure(View.java:17430) 
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463) 
at android.widget.FrameLayout.onMeasure(FrameLayout.java:430) 
at android.view.View.measure(View.java:17430) 
at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:727) 
at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:463) 
at android.view.View.measure(View.java:17430) 
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463) 
at android.widget.FrameLayout.onMeasure(FrameLayout.java:430) 
at android.view.View.measure(View.java:17430) 
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463) 
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436) 
at android.widget.LinearLayout.measureVertical(LinearLayout.java:722) 
at android.widget.LinearLayout.onMeasure(LinearLayout.java:613) 
at android.view.View.measure(View.java:17430) 
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463) 
at android.widget.FrameLayout.onMeasure(FrameLayout.java:430) 
at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2560) 
at android.view.View.measure(View.java:17430) 
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2001) 
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1166) 
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1372) 
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1054) 
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5779) 
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767) 
at android.view.Choreographer.doCallbacks(Choreographer.java:580) 
at android.view.Choreographer.doFrame(Choreographer.java:550) 
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753) 
at android.os.Handler.handleCallback(Handler.java:739) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:135) 
at android.app.ActivityThread.main(ActivityThread.java:5221) 
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:372) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 

Пожалуйста, помогите мне избавиться от этой аварии.

Код:

searchEt.addTextChangedListener(new TextWatcher() { 

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

      } 

      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count, 
        int after) { 
       // TODO Auto-generated method stub 
      } 

      @Override 
      public void afterTextChanged(Editable s) { 
       if (s.toString().trim().length() > 0) { 
        placesTask = new PlacesTask(); 
        placesTask.execute(s.toString()); 
       } 
      } 
     }); 

private class ParserTask extends 
      AsyncTask<String, Integer, List<TextSearchPlace>> { 

     JSONObject jObject; 

     @Override 
     protected List<TextSearchPlace> doInBackground(String... jsonData) { 

      List<TextSearchPlace> places = null; 

      PlaceJSONParser placeJsonParser = new PlaceJSONParser(getActivity()); 

      try { 
       jObject = new JSONObject(jsonData[0]); 

       places = placeJsonParser.parse(jObject); 

      } catch (Exception e) { 
       Log.d("Exception", e.toString()); 
      } 
      return places; 
     } 

     @Override 
     protected void onPostExecute(List<TextSearchPlace> result) { 
      autocompletePlaces = result; 
      if (searchLayout.getVisibility() == View.VISIBLE) { 
       try { 
        if (result != null && result.size() > 0) { 
         rootView.findViewById(R.id.dummy_iv).setVisibility(
           View.VISIBLE); 
         suggestionLv.setAdapter(new PlaceSuggestionListAdapter(
           getActivity(), result)); 
         suggestionLv.setVisibility(View.VISIBLE); 
        } else { 
         rootView.findViewById(R.id.dummy_iv).setVisibility(
           View.GONE); 
         suggestionLv.setVisibility(View.GONE); 
        } 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
    } 

Я показываю список, если я получаю результат и скрытие списка, если результат не найден.

Мой адаптер -

public class PlaceSuggestionListAdapter extends BaseAdapter { 

    Context mContext; 
    List<TextSearchPlace> places; 

    public PlaceSuggestionListAdapter(Context mContext, 
      List<TextSearchPlace> places) { 
     this.mContext = mContext; 
     this.places = places; 
    } 

    @Override 
    public int getCount() { 
     return places.size(); 
    } 

    @Override 
    public Object getItem(int arg0) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    @Override 
    public long getItemId(int arg0) { 
     // TODO Auto-generated method stub 
     return 0; 
    } 

    @Override 
    public View getView(int pos, View convertView, ViewGroup parent) { 
     final ViewHolder holder; 
     if (mContext != null) { 
      if (convertView == null) { 
       convertView = ((Activity) mContext).getLayoutInflater() 
         .inflate(R.layout.place_list_item, null); 

       holder = new ViewHolder(); 
       holder.nameTv = (TextView) convertView 
         .findViewById(R.id.name_tv); 
       convertView.setTag(holder); 
      } else { 
       holder = (ViewHolder) convertView.getTag(); 
      } 

      UtilFunction.labelTypeFace(holder.nameTv, mContext.getAssets()); 
      holder.nameTv.setText(places.get(pos).getName()); 
     } 

     return convertView; 
    } 

    private static class ViewHolder { 
     public TextView nameTv; 
    } 

} 
+0

'java.lang.NullPointerException: попытка вызвать виртуальный метод 'void android.view.View.setDrawingCacheBackgroundColor (int)' в ссылке на нулевой объект. Когда вы вызываете' setDrawingCacheBackgroundColor() 'в свой код? – shkschneider

+0

Показать свой код ... – Piyush

+0

Пожалуйста, разместите соответствующий код. – humblerookie

ответ

1

вы решить эту проблему? Я получаю именно свалку logcat save. В моем случае, когда я пытаюсь иметь более 3 записей в архаристе, используемом адаптером. Попытка изменилась на разные типы макетов. Не повезло.

Но я нашел свою собственную очень, очень неловкую ошибку, прав 5 минут назад. My Adapter.getView() вернул null (тестовая строка отладки на три дня оставлена ​​...), но logcat начинается с Main и останавливается в AbsListView.obtainView(), поэтому не было слишком много указаний на мой getView().

+3

На самом деле это не ответ. Если у вас есть вопрос, пожалуйста, оставьте на комментарии к OP вместо этого, если у вас на самом деле нет решения. – tux3

+4

Эй, извините, я попробовал, но мне сказали, что мне нужно 50 репутаций для комментариев. – Maria

2

Я подозреваю, что вы возвращаете нулевой вид в getView, mContext может быть нулевым. Не храните ссылки на контекст. Используйте View.getContext() в getView() в адаптере.

-1

Необходимо внимательно изучить проблему. У меня есть причина этой проблемы.

getView() return null.

Смежные вопросы