2016-04-14 36 views
0

AsyncTask'taki sunucudan listeyi indirmeye çalışıyorum ve bunları recyclerView içine koyuyorum. Bununla birlikte, hala RecyclerView üzerinde NullPointException alıyorum ve neden hiçbir fikrim yok. LayoutManager ve diğer şeyler ayarladım ama sorun hala var.RecyclerView öğesinde NullPointException

İşte
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(); 


    } 
    } 
} 

benim adaptör var: Yanlış

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

    } 

} 
} 

yapıyorum ne İşte benim parçası mı?

cevap

1
Bu

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


        } 
        } 

Like AsyncTask değiştirin ve onCreateView da zaman uyumsuz sınıfı başlatırken Sadece kodunu değiştirmek bu

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

gibi başlatmak ve beklendiği gibi çalışması gerekir

.. Bu umut

yardımcı olur
İlgili konular