我尝试从 AsyncTask 中的服务器下载列表并将其放入 recyclerView 中。但是,我仍然在 RecyclerView 上收到 NullPointException 并且不知道为什么。我设置了 LayoutManager 和其他东西,但问题仍然存在。
这是我的片段:
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
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 中启动异步类时,像这样启动它
mUserListView = (RecyclerView)view.findViewById(R.id.user_list);
GetUsersAsyncTask task = new GetUsersAsyncTask(this,mUserListView);
只需替换代码,它应该按预期工作..希望这有帮助
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)