-2

I am getting a Null Pointer Exception that in my opinion might have to do with the method onBindViewHolder() because I think I am getting a null object when calling mItemAddFriends.get(position); You can see my code and classes below.

error log:

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.pmp_vip.personachat.ItemAddFriends.getUsername()' on a null object reference
                  at com.pmp_vip.personachat.ItemViewHolder.bind(ItemViewHolder.java:19)
                  at com.pmp_vip.personachat.RVAdapter$override.onBindViewHolder(RVAdapter.java:31)

...

my classes:

  • RVAdapter class:

    public class RVAdapter extends RecyclerView.Adapter<ItemViewHolder> {
        private List<ItemAddFriends> mItemAddFriends;
    
        public RVAdapter(List<ItemAddFriends> mItemAddFriends) {
            this.mItemAddFriends = mItemAddFriends;
        }
    
        public void setmItemAddFriends(List<ItemAddFriends> mItemAddFriends{
            this.mItemAddFriends = mItemAddFriends;
        }
    
        @Override
        public ItemViewHolder onCreateViewHolder(ViewGroup parent, int        viewType) {
            View view =        LayoutInflater.from(parent.getContext()).inflate(R.layout.item_add_friends,   parent, false);
            return new ItemViewHolder(view);
        }
    
        @Override
        public void onBindViewHolder(ItemViewHolder itemViewHolder, int   position) {
            final ItemAddFriends item = mItemAddFriends.get(position);
            itemViewHolder.bind(item);
        }
    
        @Override
        public int getItemCount() {
            return mItemAddFriends.size();
        }   
    
        public void setFilter(List<ItemAddFriends> itemAddFriends) {
            mItemAddFriends = new ArrayList<>();
            mItemAddFriends.addAll(itemAddFriends);
            notifyDataSetChanged();
        }
    }
    
  • ItemViewHolder class:

    public class ItemViewHolder extends RecyclerView.ViewHolder {
        public TextView username_textView;
        public TextView name_textView;
    
        public ItemViewHolder(View view) {
            super(view);
    
            username_textView = (TextView)   view.findViewById(R.id.item_username);
            name_textView = (TextView) view.findViewById(R.id.item_name);
        }
    
        public void bind(ItemAddFriends itemAddFriends) {
            username_textView.setText(itemAddFriends.getUsername());
            name_textView.setText(itemAddFriends.getName());
        }
    }
    
  • AddFriendsActivity class:

    public class AddFriendsActivity extends AppCompatActivity implements     SearchView.OnQueryTextListener {
    
        private RecyclerView recyclerView;
        private List<ItemAddFriends> mItemAddFriends;
        private RVAdapter adapter;
    
        private static final String SERVER_ADDRESS = "http://10.0.2.2/";
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_add_friends);
    
           getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    
            mItemAddFriends = new ArrayList<>();
    
            recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
            LinearLayoutManager layoutManager = new LinearLayoutManager(this);
            layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
            recyclerView.setLayoutManager(layoutManager);
            adapter = new RVAdapter(mItemAddFriends);
            recyclerView.setAdapter(adapter);
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            getMenuInflater().inflate(R.menu.add, menu);
            final MenuItem item = menu.findItem(R.id.action_add);
            final SearchView searchView = (SearchView)       MenuItemCompat.getActionView(item);
            searchView.setMaxWidth(Integer.MAX_VALUE);
             searchView.setQueryHint(getResources().getString(R.string.e_username));
            searchView.setIconified(false);
            searchView.setOnQueryTextListener(this);
            searchView.setOnCloseListener(new SearchView.OnCloseListener() {
                @Override
                public boolean onClose() {
                    finish();
                    return true;
                }
            });
    
            MenuItemCompat.setOnActionExpandListener(item,
                    new MenuItemCompat.OnActionExpandListener() {
                        @Override
                        public boolean onMenuItemActionCollapse(MenuItem item) {
                            adapter.setFilter(mItemAddFriends);
                            return true;
                        }
    
                        @Override
                        public boolean onMenuItemActionExpand(MenuItem item)   {
                            return true;
                        }
                    });
            return true;
        }
    
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            switch (item.getItemId()) {
                case android.R.id.home:
                    finish();
                    return true;
                default:
                    return super.onOptionsItemSelected(item);
            }
        }
    
        @Override
        public boolean onQueryTextSubmit(String query) {
            return false;
        }
    
        @Override
        public boolean onQueryTextChange(String newText) {
            final List<ItemAddFriends> filteredItemList =  filter(mItemAddFriends, newText);
            adapter.setmItemAddFriends(filteredItemList);
            adapter.setFilter(filteredItemList);
            return true;
        }
    
        private List<ItemAddFriends> filter(List<ItemAddFriends> list,  String query) {
            query = query.toLowerCase();
            final List<ItemAddFriends> filteredItemList = new ArrayList<>();
    
            SearchUser searchUser = new SearchUser(query);
            searchUser.execute();
            filteredItemList.add(searchUser.getItemAddFriends());
    
           return filteredItemList;
        }
    
        private class SearchUser extends AsyncTask<Void, Void, Void> {
    
            String query;
            ItemAddFriends itemAddFriends;
    
            public SearchUser(String query) {
                this.query = query;
            }
    
            public ItemAddFriends getItemAddFriends() {
                return itemAddFriends;
            }
    
            @Override
            protected Void doInBackground(Void... params) {
                String jsonData = "";
                String result = "";
                JSONObject object = null;
    
                try {
                    OkHttpClient client = new OkHttpClient();
    
                    FormBody.Builder builder = new FormBody.Builder()
                            .add("query", query);
    
                    RequestBody formBody = builder.build();
    
                    Request request = new Request.Builder()
                            .url(SERVER_ADDRESS + "search.user.php")
                            .post(formBody)
                            .build();
    
                    Response responses = null;
    
                    try {
                        responses = client.newCall(request).execute();
                        jsonData = responses.body().string();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
    
                    try {
                        JSONObject Jobject = new JSONObject(jsonData);
                        JSONArray Jarray = Jobject.getJSONArray("users");
    
                        for (int i = 0; i < Jarray.length(); i++) {
                            object = Jarray.getJSONObject(i);
                            result = object.getString("firstname");
                       }
    
                   } catch (JSONException e) {
                        e.printStackTrace();
                   }
                } catch (Exception e){
                   e.printStackTrace();
                }
    
                itemAddFriends = new ItemAddFriends(result, result);
    
                return null;
            }
        }
    }
    

I think everything works except for the issue that the method bind() in the ItemViewHolder class name_textView.setText(itemAddFriends.getName()); causes a Null Pointer Exception. I don't know how to fix it.

Thank you for your help!!

Phantômaxx
  • 37,901
  • 21
  • 84
  • 115
hacmat11
  • 1
  • 1

1 Answers1

0
itemAddFriends

in your bind method of your ItemViewHolder class is null. Try debugging from where you initialize the "List mItemAddFriends", and see why it has a null value.

Helder De Baere
  • 420
  • 1
  • 4
  • 19