2015-11-23 4 views
0

Приложение сбой при попытке заполнения изображений в ImageView для владельца или когда я пытаюсь настроить прослушиватель onclick на изображение владельца. Это действительно сбой, если я попытаюсь сделать что-нибудь, связанное с изображением владельца.Android ListView Adapter возвращает NullPointerException

URL-адрес изображения не является нулевым, я проверил

ImageView существует, я проверил

код адаптера (Важные биты этого):

public class FeedAdapter extends BaseAdapter { 

    static private Activity activity; 
    private static LayoutInflater inflater = null; 
    ArrayList<ActivityTable> actList = new ArrayList<ActivityTable>(); 
    Holder holder; 

    public FeedAdapter(Activity a, ArrayList<ActivityTable> actList) { 
      activity = a; 
      inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      this.actList = actList; 
    } 

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

      View vi = convertView; 
      final ActivityTable act = actList.get(position); 

      if (vi == null) { 
        vi = inflater.inflate(R.layout.feed_single_picture, parent, false); 
        holder = new Holder(); 
        holder.media = (ImageView) vi.findViewById(R.id.postphoto); 
        //can't set an image to it either. it crashes. 
      } 
      else { 
        holder = (Holder) vi.getTag(); 
      } 

      //This is where it crashes 
      holder.media.setOnClickListener(new View.OnClickListener() { 
         @Override 
         public void onClick(View v) { 

           //other on Click related Code 

         } 
      }); 
     return vi; 
    } 

    public static class Holder { 
      ImageView media; 
    } 
} 

Почему происходит ли сбой владельца ImageView? Я попытался добавить TextView, ImageButton и т. Д., И все они работают нормально. Только это конкретное изображение обращается. Что я делаю не так?

EDIT: Краш Log

FATAL EXCEPTION: main 
    Process: com.metalproject.metalprojectmobile, PID: 5737 
    java.lang.NullPointerException 
      at Adapter.FeedAdapter.getView(FeedAdapter.java:456) 
      at android.widget.AbsListView.obtainView(AbsListView.java:2689) 
      at android.widget.ListView.makeAndAddView(ListView.java:1801) 
      at android.widget.ListView.fillDown(ListView.java:697) 
      at android.widget.ListView.fillGap(ListView.java:661) 

выше линии: 456 точек на -> holder.media.setOnClickListener (новый View.OnClickListener() {

+1

Показать краш журналы –

+0

Конечно. Держать на @ ρяσѕρєяK – Dinuka

+0

@ ρяσѕρєяK Отредактировано – Dinuka

ответ

0

вы должны изменить код как указано ниже:

if (vi == null) { 
    vi = inflater.inflate(R.layout.feed_single_picture, parent, false); 
    holder = new Holder(); 
    holder.media = (ImageView) vi.findViewById(R.id.postphoto); 
} 

, а также удалять их из внешнего кода if else

+0

Извините, что я проверил, и мой плохой, код был в том же формате, который вы мне дали. Отредактировав вопрос – Dinuka

+0

, вы добавили vi.setTag (держатель); в if block? –

+0

да У меня есть помощник – Dinuka

0

Fix будет выглядеть следующим образом:

public View getView(int position, View convertView, ViewGroup parent) { 
    View vi = convertView; 
    final ActivityTable act = actList.get(position); 

    if (vi == null) { 
     vi = inflater.inflate(R.layout.feed_single_picture, parent, false); 
     holder = new Holder(); 
     vi.setTag(holder); 
    }else { 
     holder = (Holder) vi.getTag(); 
    } 

    holder.media.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
     } 
    }); 
    return vi; 
} 

static class Holder { 

    private ImageView media; 

    Holder(View view){ 
     this.media = (ImageView) view.findViewById(R.id.postphoto); 
    } 

} 
+0

Как установить URL и весь этот код? Куда мне их поместить? – Dinuka

+0

После if/else block вы будете иметь все определенные виды, и вы можете установить там. Примечание: используйте Picasso или Glide – adnbsr

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