2014-01-08 3 views
0

CategoryFragment:Android Volley - setAdapter в фрагмент возвращает Null Pointer

public class CategoryFragment extends Fragment { 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 

     View rootView = inflater.inflate(R.layout.fragment_category, container, 
       false); 

     va = new CategoryAdapter(); 

     listView = (ListView) rootView.findViewById(R.id.catListView); 
     listView.setAdapter(va); 

     ... 

     JsonArrayRequest jr = new JsonArrayRequest(url, new Response.Listener<JSONArray>() { 
      ... 

     return rootView; 
     } 

CategoryAdapter:

public class CategoryAdapter extends BaseAdapter { 

    private ArrayList<CategoryModel> arrCategory; 
    private LayoutInflater lf; 

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

    @Override 
    public Object getItem(int i) { 
     return arrCategory.get(i); 
    } 

    @Override 
    public long getItemId(int i) { 
     return 0; 
    } 

    @Override 
    public View getView(int i, View view, ViewGroup viewGroup) { 

     ViewHolder vh; 

     if (view == null) { 
      vh = new ViewHolder(); 
      view = lf.inflate(R.layout.row_category_listview, null); 
      vh.tvTitle = (TextView) view.findViewById(R.id.txtTitle); 
      vh.tvCount = (TextView) view.findViewById(R.id.txtCount); 
      view.setTag(vh); 
     } else { 
      vh = (ViewHolder) view.getTag(); 
     } 

     CategoryModel nm = arrCategory.get(i); 
     vh.tvTitle.setText(nm.getTitle()); 
     vh.tvCount.setText(nm.getCount()); 

     return view; 
    } 

    private class ViewHolder { 
     TextView tvTitle; 
     TextView tvCount; 
    } 

} 
    } 
} 

Я использую Volley для разбора JSON из API. Основная деятельность моего проекта здесь управляет ящиком навигации, поэтому я должен использовать CategoryFragment для отображения списка категорий.

Однако, выполнив приведенный выше код, я получил эту ошибку:

01-08 17:43:37.950: E/AndroidRuntime(9897): java.lang.NullPointerException 
01-08 17:43:37.950: E/AndroidRuntime(9897):  at com.package.adapter.VolleyAdapter.getCount(VolleyAdapter.java:21) 
01-08 17:43:37.950: E/AndroidRuntime(9897):  at android.widget.ListView.setAdapter(ListView.java:462) 
01-08 17:43:37.950: E/AndroidRuntime(9897):  at com.package.fragment.CategoryFragment.onCreateView(CategoryFragment.java:54) 

Любой знает, почему она возвращается nullpointerexception при установке адаптера? Я не уверен, в чем проблема. Это потому, что он не может найти макет фрагмента?

Если что-нибудь, сообщите мне.

+1

ваш 'arrCategory.' является недействительным. –

ответ

2

вы никогда не инициализируется arrCategory. Создайте конструктор для вашего адаптера и назначить arrCategory, указанному пользователем в конструкторе

public class CategoryAdapter extends BaseAdapter { 
    private ArrayList arrCategory; 
    public CategoryAdapter(ArrayList dataSet) { 
     this.arrCategory = dataSet; 
    } 
    // other code 
} 
+0

Получил это. Забыл добавить это. Спасибо, парни :) – AimanB

2

private ArrayList<CategoryModel> arrCategory;

никогда не инициализируется.

Вам необходимо передать arraylist из вашего фрагмента в конструктор класса адаптера. Сначала вам нужно убедиться, что оно заполнено.

Получите данные, используя залп. Заполните список.

затем

new CategoryAdapter(list); 
//this should be after getting data from volley 

Тогда

public class CategoryAdapter extends BaseAdapter { 
    private ArrayList<type> arrCategory; 
    public CategoryAdapter(ArrayList<type> dataSet) { 
     this.arrCategory = dataSet; 
    } 
+2

@ Кетан, почему это должно быть? – Raghunandan

+0

это провал, поэтому его законным отправить его как ответ –

+0

@ Raghunandan извините..Я удален. –

1

arrCategory является нулевым, вы должны инициализировать его:

private ArrayList<CategoryModel> arrCategory = new ArrayList<CategoryModel>(); 
Смежные вопросы