2016-04-14 3 views
0

AsyncTaskのサーバーからリストをダウンロードし、それをrecyclerViewに挿入しようとしました。しかし、私はまだRecyclerViewでNullPointExceptionを取得し、理由を知りません。私はLayoutManagerと他のものを設定しましたが、まだ問題があります。 は、ここに私の断片です:RecyclerViewのNullPointException

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

    } 

} 
} 

私が間違ってやっていますか?

答えて

1
この

     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であなたの非同期クラスを開始するように自分のAsyncTaskを変更

だけでコードを交換し、期待どおりに動作するはずです。この

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

のようにそれを開始する。これを願っています助けてください

関連する問題