2015-06-05 2 views
0

получил нулевое исключение poiner на cursor.getCount(); при этом ListView с помощью Cursor Loader класс адаптера, как показано нижеINT android.database.Cursor.getCount()»на ссылку на объект нулевой

public class FriendsListCursorAdapter extends CursorAdapter { 
    private Cursor cursor; 
    final VROPreferenceManager preferenceManager = new VROPreferenceManager(); 
    Context con; 
    public FriendsListCursorAdapter(Context context, Cursor c, boolean b) { 
      super(context,c,true); 
     cursor = c; 
     con=context; 
    } 


    public void addItems(Cursor newItems) { 
     if (0 == newItems.getCount()) { 
      return; 
     } 


     notifyDataSetChanged(); 
    } 

    public int getCount() { 
     // TODO Auto-generated method stub 
     return cursor.getCount(); 
    } 


    public Object getItem(int position) { 
     // TODO Auto-generated method stub 
     return position; 
    } 

    public long getItemId(int position) { 
     // TODO Auto-generated method stub 
     return position; 
    } 


    @Override 
    public View newView(Context context, Cursor cursor, ViewGroup viewGroup) { 
     LayoutInflater inflater = LayoutInflater.from(context); 
     View view = inflater.inflate(R.layout.vro_contact_view, null); 
     bindView(view, context, cursor); 
     return view; 
    } 

    @Override 
    public void bindView(View view, Context context, Cursor cursor) { 

     TextView txtID = (TextView) view.findViewById(R.id.text_fname_lname); 
     txtID.setText(cursor.getString(cursor.getColumnIndex("first_name"))); 
     // VROUser user =cursor.getColumnIndex("first_name"); 

     ///ColCode 
     TextView txtCode = (TextView) view.findViewById(R.id.text_email); 
     txtCode.setText(cursor.getString(cursor.getColumnIndex("email"))); 
     ImageView profilePic = (ImageView) view.findViewById(R.id.user_image); 

     cursor.getColumnIndex("user_profile_pic"); 
     view.findViewById(R.id.ColCountry); 
     //txtCountry.setText(cursor.getString(cursor.getColumnIndex("Country"))); 
    } 



} 

и cursorloader:

public class FindPeopleFragment extends BaseFragment implements LoaderCallbacks<Cursor> { 

    public FindPeopleFragment() { 
    } 

    private TextView advancedSearchOption; 
    private TextView saerchButton; 
    EndlessListView listUsers; 
    private EditText searchWord; 
    private EditText searchFirstName; 
    private EditText searchLastName; 
    private EditText searchEmail; 
    private EditText searchCountry; 
    private EditText searchState; 
    private int offset = 0; 
    private final int limit = 30; 
    private boolean mHaveMoreDataToLoad = true; 
    private VROAccountManager manager; 
    private ArrayList<VROUser> postsList = new ArrayList<>(); 
    private View advanced; 
    private Cursor FriendsCursor; 

    // Cursor c; 
    private TextView description; 
    Object friend_name; 
    FriendsListCursorAdapter FRIEND_ADAPTER; 
DatabaseHelper dh; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     title = "My Friends"; 
//  setSelection(0); 

    } 

    private View rootView; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 

     if (rootView != null) { 

      ((ViewGroup) rootView.getParent()).removeView(rootView); 
      return rootView; 
     } 

     rootView = inflater.inflate(R.layout.fragment_find_people, null); 
     getLoaderManager().initLoader(1, null, this); 
     progressBar = rootView.findViewById(R.id.progressBar); 
     saerchButton = (TextView) rootView.findViewById(R.id.button_search); 
     listUsers = (EndlessListView) rootView.findViewById(R.id.user_list); 
     searchWord = (EditText) rootView 
       .findViewById(R.id.editText_search_word); 
     searchFirstName = (EditText) rootView 
       .findViewById(R.id.editText_search_first_name); 
     searchLastName = (EditText) rootView 
       .findViewById(R.id.editText_search_last_name); 
     searchEmail = (EditText) rootView 
       .findViewById(R.id.editText_search_email); 
     searchCountry = (EditText) rootView 
       .findViewById(R.id.editText_search_country); 
     searchState = (EditText) rootView 
       .findViewById(R.id.editText_search_state); 
     advancedSearchOption = (TextView) rootView 
       .findViewById(R.id.advancedSearch); 
     advancedSearchOption.setVisibility(View.GONE); 
     manager = new VROAccountManager(getActivity()); 
     advanced = rootView.findViewById(R.id.layout_advanced_search); 
     description = (TextView) rootView.findViewById(R.id.description); 
     description 
       .setText("You are friends with the following users. To find new friends or to view friends request sent or received use the menu on right"); 
FRIEND_ADAPTER = new FriendsListCursorAdapter(getActivity(), 
     FriendsCursor, true); 
     // loadMoreData(); 


     saerchButton.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View arg0) { 
       listUsers.setAdapter(FRIEND_ADAPTER); 


      } 
}); 
     listUsers.setOnItemClickListener(new OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> parent, View view, 
            int position, long id) { 
       friend_name=listUsers.getSelectedItem(); 
       Toast.makeText(getActivity(), " "+friend_name, Toast.LENGTH_SHORT).show(); 
//    Intent intent = new Intent(getActivity(), ProfileViewActivity.class); 
//    intent.putExtra("userId",(int)friend_name); 
//    getActivity().startActivity(intent); 

      } 
     }); 
     return rootView; 
    } 

    private HashMap<String, String> data = new HashMap<>(); 


    private final EndlessListView.OnLoadMoreListener loadMoreListener = new EndlessListView.OnLoadMoreListener() { 

     @Override 
     public boolean onLoadMore() { 
      if (true == mHaveMoreDataToLoad) { 
       //loadMoreData(); 
      } 
      // else { 
      // Toast.makeText(getActivity(), "No more data to load", 
      // Toast.LENGTH_SHORT).show(); 
      // } 

      return mHaveMoreDataToLoad; 
     } 

     @Override 
     public void onReachedTop(boolean isTop) { 
      // TODO Auto-generated method stub 

     } 
    }; 
    private final Handler handler = new Handler(); 
    private View progressBar; 





    @Override 
    public Loader<Cursor> onCreateLoader(int id, Bundle args) { 

     String[] projection = { FriendinfoTable.Cols.ID,FriendinfoTable.Cols.FIRST_NAME, 
       FriendinfoTable.Cols.LAST_NAME,FriendinfoTable.Cols.USER_NAME,FriendinfoTable.Cols.EMAIL, 
       FriendinfoTable.Cols.USER_PROFILE_PIC,FriendinfoTable.Cols.USER_TIMELINE_PIC, 
       FriendinfoTable.Cols.COUNTRY,FriendinfoTable.Cols.STATE,FriendinfoTable.Cols.CITY, 
       FriendinfoTable.Cols.ABOUT,FriendinfoTable.Cols.GENDER,FriendinfoTable.Cols.DATEOFBIRTH, 
       FriendinfoTable.Cols.FRIENDSHIP_STATUS,FriendinfoTable.Cols.QUICKBLOX_ID}; 


     CursorLoader cursorLoader = new CursorLoader(getActivity(), 
       FriendinfoTable.CONTENT_URI, projection, null, null, null); 

     return cursorLoader; 
    } 


    @Override 
    public void onLoadFinished(Loader<Cursor> loader, Cursor data) { 
     FriendsCursor = data; 
     if (FRIEND_ADAPTER == null) { 
      FRIEND_ADAPTER = new FriendsListCursorAdapter(getActivity(), 
        FriendsCursor, true); 
      listUsers.setAdapter(FRIEND_ADAPTER); 
     } else { 
      FRIEND_ADAPTER.swapCursor(FriendsCursor); 

     } 
    }enter code here 

    @Override 
    public void onLoaderReset(Loader<Cursor> loader) { 

    } 
} 

не может найти проблему..пожалуйста, пройдите через класс загрузчика..просмотр вопроса .. и, пожалуйста, помогите мне найти проблему!

+0

, пожалуйста, помогите найти причину исключения нулевой указатель –

ответ

1

Итак ... У вас есть NullPointerException на линии

return cursor.getCount(); 

Это просто означает, что cursor является null. Откуда берутся cursor? Где он установлен? Единственное место, где я вижу конструктор:

public class FriendsListCursorAdapter extends CursorAdapter { 
    private Cursor cursor; 
    ... 
    public FriendsListCursorAdapter(Context context, Cursor c, boolean b) { 
     super(context, c, true); 
     cursor = c; 
     con = context; 
    } 
    ... 
} 

Теперь это означает, что клиент , который инстанцирование этого класса, не предоставляет экземпляр для параметра конструктора Cursor c. Чтобы избежать подобных проблем, необходимо добавить пункт в сторожевого конструктору:

public FriendsListCursorAdapter(Context context, Cursor c, boolean b) { 
    super(context, c, true); 
    cursor = Objects.requireNonNull(c); 
    con = Objects.requireNonNull(context); 
} 

Это сгенерирует NPE гораздо раньше (на время строительства) и будет вам один шаг дальше. Вы увидите, что эта линия вызывает этот NPE:

FRIEND_ADAPTER = new FriendsListCursorAdapter(getActivity(), FriendsCursor, true); 

Внимание! Эта линия существует несколько раз!

Так в чем проблема? Очевидно, FriendsCursor - null. Кстати: Пожалуйста, придерживайтесь Java naming conventions и пусть ваши переменные начинаются с нижней буквы.

Я не вижу инициализации FriendsCursor, поэтому эта переменная экземпляра по-прежнему равна null, что является причиной вашей проблемы. Инициализируйте эту переменную (в нужном месте).

+0

курсор приходит от onLoadFinished (Loader погрузчика, данные курсора) на выше code.please пройти через это –

+0

FINALLY GOT..MULTIPLE DELARATION of FriendsListCursorAdapter - ВОПРОС ... THANKS –

-1

ваш cusror равно нулю, следовательно, он выдает нулевой указатель execption попытку справиться с курсором NullPointerException

public int getCount() { 
    // TODO Auto-generated method stub 
    //try using this 
    if(cursor==null) 
     return 0; 
    return cursor.getCount(); 
} 
Смежные вопросы