RecyclerView中的NullPointException [英] NullPointException in RecyclerView

查看:70
本文介绍了RecyclerView中的NullPointException的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我尝试从AsyncTask中的服务器下载列表并将其放入recyclerView.但是,我仍然在RecyclerView上收到NullPointException,并且不知道为什么.我设置了LayoutManager和其他内容,但问题仍然存在. 这是我的片段:

I try to download list from server in AsyncTask and put it into recyclerView. However, I still get NullPointException on RecyclerView and have no idea why. I set LayoutManager and other stuff but problem still exists. Here's my fragment:

public class ChatMainFragment extends Fragment {

private static final String TAG = ChatMainFragment.class.getSimpleName() ;
private List<ChatUserListItem> userList;
private ArrayAdapter adapter;
public RecyclerView mUserListView;

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

    View view = inflater.inflate(R.layout.chat_user_list, container, false);
    mUserListView = (RecyclerView)view.findViewById(R.id.user_list);
    GetUsersAsyncTask task = new GetUsersAsyncTask(this);
    task.execute();


    return view;
}



  public class GetUsersAsyncTask extends AsyncTask<String, String, List<ChatUserListItem>> {


   public Context mContext;
   private ChatMainFragment mFragment;

   public GetUsersAsyncTask(ChatMainFragment fragment) {
       this.mFragment = fragment;
   }


   @Override
   protected List<ChatUserListItem> doInBackground(String... params) {
       List<ChatUserListItem> userList = new ArrayList<>();
       try {
           userList  = ServerConnector.getInstance(mContext).getChatUserList();
        /*requestEnds(userList);*/
       } catch (ServerConnectorException e) {
           e.printStackTrace();
       }

       return userList;
   }

   @Override
   protected void onPostExecute(List<ChatUserListItem> chatUserListItems) {
       Log.e(TAG, "onPostExecute: ");
       userList = chatUserListItems ;
       ChatMainAdapter adapter = new ChatMainAdapter(getActivity().getApplicationContext(), userList);
       mUserListView.setAdapter(adapter);
       mUserListView.setLayoutManager(new LinearLayoutManager(getActivity().getApplicationContext()));
       adapter.notifyDataSetChanged();


   }
   }
}

这是我的适配器:

public class ChatMainAdapter extends RecyclerView.Adapter<ChatMainAdapter.MyViewHolder> {
    private LayoutInflater inflater;
    private TextView mUserAvatar;

private Context mContext;
 List<ChatUserListItem> userList;

public ChatMainAdapter(Context context,List<ChatUserListItem>userList){
    this.mContext=context;
    this.userList=userList;
}

@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int i) {
    View view = inflater.inflate(R.layout.chat_user_list_item, parent, false);
    MyViewHolder holder = new MyViewHolder(view);
    return holder;
}

@Override
public void onBindViewHolder(MyViewHolder viewHolder, int position) {
        ChatUserListItem current = userList.get(position);
        viewHolder.mUserName.setText(current.getName());
}

@Override
public int getItemCount() {
    return userList.size();
}
class MyViewHolder extends RecyclerView.ViewHolder{

  TextView mUserName;

    public MyViewHolder(View itemView) {
        super(itemView);
        mUserName= (TextView)itemView.findViewById(R.id.user_name);

    }

}
}

我做错了什么?

推荐答案

像这样更改您的AsyncTask

Change Your AsyncTask Like This

                        public class GetUsersAsyncTask extends AsyncTask<String, String, List<ChatUserListItem>> {


                     public Context mContext;
                     private ChatMainFragment mFragment;
                     private RecyclerView mUserRecyclerView;

                     public GetUsersAsyncTask(ChatMainFragment fragment,RecyclerView mRListView) {
                         this.mFragment = fragment;
                         this.mUserRecyclerView=mRListView;
                     }


                     @Override
                     protected List<ChatUserListItem> doInBackground(String... params) {
                         List<ChatUserListItem> userList = new ArrayList<>();
                         try {
                             userList  = ServerConnector.getInstance(mContext).getChatUserList();
                          /*requestEnds(userList);*/
                         } catch (ServerConnectorException e) {
                             e.printStackTrace();
                         }

                         return userList;
                     }

                     @Override
                     protected void onPostExecute(List<ChatUserListItem> chatUserListItems) {
                         Log.e(TAG, "onPostExecute: ");
                         userList = chatUserListItems ;
                         ChatMainAdapter adapter = new ChatMainAdapter(getActivity().getApplicationContext(), userList);
                        mUserRecyclerView.setAdapter(adapter);
                        mUserRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity().getApplicationContext()));
                         adapter.notifyDataSetChanged();


                     }
                     }

,当您在onCreateView中初始化异步类时,就这样初始化它

and when you initiate your async class in onCreateView initiate it like this

 mUserListView = (RecyclerView)view.findViewById(R.id.user_list);
GetUsersAsyncTask task = new GetUsersAsyncTask(this,mUserListView);

只需替换代码即可,它应该可以按预期工作..希望这会有所帮助

Just replace the code and it should work as expected .. Hope this helps

这篇关于RecyclerView中的NullPointException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆