2016-07-14 4 views
1

Может кто помочь мне узнать, что было причиной этой ошибки в My recyclerview я попытался изменить имя переменной вRecyclerView Fatal Exception: главный

Adapter1.java:48 

Но она по-прежнему дает мне ту же ошибку.

java.lang.NullPointerException 
at ke.co.clickaway.squirrel.clickawaytechnologies.adpter.Adapter1.getItemCount(Adapter1.java:48) 

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

public class MainActivity extends AppCompatActivity { 
    Toolbar toolbar; 
    ArrayList<DataList> list; 
//in the onCreate Bundle 
RecyclerView rview=(RecyclerView) findViewById(R.id.rview); 
     Adapter1 adapter1=new Adapter1(this,list); 
     rview.setAdapter(adapter1); 
     StaggeredGridLayoutManager lm=new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL); 
     rview.setLayoutManager(lm); 

информация класса

public class DataList { 
    public int imageView; 
    public String title; 

    public static List<DataList> getData(){ 
     ArrayList<DataList> mList=new ArrayList<>(); 
     int[] imag={R.drawable.web_ic,R.drawable.palette_ic,R.drawable.pencil,R.drawable.sware_ic,R.drawable.phone_ic}; 
     String[] lable={"Web Development","Branding","Graphic Design","Systems","Mobile Apps"}; 
     for(int i=0;i<lable.length&& i<imag.length;i++){ 
      DataList dataList=new DataList(); 
      dataList.title=lable[i]; 
      dataList.imageView=imag[i]; 
      mList.add(dataList); 
     } 
     return mList; 
    } 
} 

И мой адаптер

public class Adapter1 extends RecyclerView.Adapter<Adapter1.ViewHolder> { 
    private List<DataList> mList; 
    private Context mContext; 
    public Adapter1(Context context,List<DataList> list){ 
      mList=list; 
      mContext=context; 
    } 
    private Context getContext(){ 
     return mContext; 
    } 
    @Override 
    public Adapter1.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     Context context=parent.getContext(); 
     LayoutInflater inflater=LayoutInflater.from(context); 
     View customView=inflater.inflate(R.layout.custom_view,parent,false); 
     ViewHolder viewHolder=new ViewHolder(customView); 
     return viewHolder; 

    } 

    @Override 
    public void onBindViewHolder(Adapter1.ViewHolder holder, int position) { 
     DataList dataList=mList.get(position); 
     holder.imag.setImageResource(dataList.imageView); 
     holder.lable.setText(dataList.title); 
     } 

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

    public class ViewHolder extends RecyclerView.ViewHolder { 
     public ImageView imag; 
     public TextView lable; 

     public ViewHolder(View itemView) { 
      super(itemView); 
      imag= (ImageView)itemView.findViewById(R.id.imageView1); 
      lable=(TextView)itemView.findViewById(R.id.textView1); 
     } 
    } 
} 

мой заказ Просмотр

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <ImageView 
     android:id="@+id/imageView1" 
     android:layout_gravity="center" 
     android:layout_width="88dp" 
     android:layout_height="88dp" 
     android:layout_marginTop="5dp" 
     android:layout_marginBottom="5dp" 
     android:src="@drawable/one" /> 
    <TextView 
     android:id="@+id/textView1" 
     android:layout_gravity="center" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textSize="15dp" 
     android:layout_marginTop="5dp" 
     android:layout_marginBottom="5dp" 
     android:text="dummy Text" /> 
</LinearLayout> 

сниппет RecyclerView в activty_main.xml

<android.support.v7.widget.RecyclerView 
     android:layout_below="@id/appbarlayout" 
     android:id="@+id/rview" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

ответ

0

попробуйте добавить этот код:

list = Datalist.getData(); 

до этого:

Adapter1 adapter1=new Adapter1(this,list); 
+0

Wouldnt я должен иметь метод получения для данных из моего DataList –

+0

Эй Большое спасибо он работал после того, как я в сочетании ваш ответ с ответом @ casabapap .... –

0

В соответствии с вашим коде список является null, поэтому вместо использования ArrayList<DataList> list в MainActivity использование ArrayList<DataList> list = new ArrayList<>() или ArrayList<DataList> list = DataList.getData()

1

список является недействительным. Так инициализировать список, прежде чем создать свой адаптер или изменить getItemCount() в адаптере к этому:

@Override 
public int getItemCount() { 
    return mList == null ? 0 : mList.size(); 
} 
+0

Эй, я просто попробовал, но все еще давал мне ту же проблему ... –

+0

Эй, спасибо, много, после того, как я объединил свой ответ с ответом Al zills, он прошел так гладко Спасибо большое ... –

+0

in метод getData(), есть инициализация, поэтому она никогда не вернет значение null, тем хуже будет пустой список. – faruk

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