【问题标题】:RecyclerView: Null Object Reference at onBindViewHolder item.get(position) [duplicate]RecyclerView:onBindViewHolder item.get(位置)的空对象引用[重复]
【发布时间】:2017-02-16 14:09:14
【问题描述】:

我得到一个空指针异常,我认为这可能与 onBindViewHolder() 方法有关,因为我认为在调用 mItemAddFriends.get(position); 时我得到一个空对象;你可以在下面看到我的代码和类。

错误日志:

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)

...

我的课程:

  • RVAdapter 类:

    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 类:

    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 类:

    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;
            }
        }
    }
    

我认为除了 ItemViewHolder 类 name_textView.setText(itemAddFriends.getName()) 中的方法 bind() 的问题之外,一切正常。导致空指针异常。 我不知道如何解决它。

感谢您的帮助!!

【问题讨论】:

    标签: java android database nullpointerexception android-recyclerview


    【解决方案1】:
    itemAddFriends
    

    在您的 ItemViewHolder 类的绑定方法中为空。尝试从初始化“List mItemAddFriends”的位置进行调试,看看为什么它有一个空值。

    【讨论】:

      猜你喜欢
      • 2020-12-13
      • 1970-01-01
      • 1970-01-01
      • 2018-12-31
      • 2016-10-04
      • 2015-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多