Search code examples
android-studioretrofitadapter

how to fix error 'int java.util.List.size()'



I am all time worked by one source! but now get error

int java.util.List.size()


now my adapter source its :

public class MessagesAdapter extends RecyclerView.Adapter<MessagesAdapter.msgsViewHoler> {

List<QueryMessages> queryMessages;
Context mtContext;
public MessagesAdapter(List<QueryMessages> queryMessages, MainActivity mainActivity){

    this.queryMessages=queryMessages;

}

@NonNull
@Override
public msgsViewHoler onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

    View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.message_row,parent,false);
    return new msgsViewHoler(view);

}

@Override
public void onBindViewHolder(@NonNull msgsViewHoler holder, int position) {

    final QueryMessages queryMessageses=queryMessages.get(position);
    Picasso.get()
            .load(queryMessageses.getMpic())
            .error(R.mipmap.ic_launcher)
            .fit()
            .into(holder.mpic);
    holder.mname.setText(queryMessageses.getMname());
    holder.message.setText(queryMessageses.getMessage());
    holder.tarikh.setText(queryMessageses.getTarikh());

}

@Override
public int getItemCount() {

    return queryMessages.size();

}

public class msgsViewHoler extends RecyclerView.ViewHolder{

    int id;
    CardView parent;
    ImageView mpic;
    TextView mname,message,tarikh;

    public msgsViewHoler(View itemView) {
        super(itemView);
        parent=itemView.findViewById(R.id.message_row);
        mpic=itemView.findViewById(iv_profile);
        mname=itemView.findViewById(R.id.tv_mastername);
        message=itemView.findViewById(R.id.tv_msg);
        tarikh=itemView.findViewById(R.id.tv_date);
    }
}

and give this error :

java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference at ir.arvandit.channeleto.adapter.MessagesAdapter.getItemCount(MessagesAdapter.java:62)

thats line is :

return queryMessages.size();

my Activity Main its :

    RecyclerView rvmsg;
CardView message_row;
List<QueryMessages> queryMessages;
MessagesAdapter adapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    cast();
    onClick();

    ApiService service=ApiClient.getClient().create(ApiService.class);
    Call<List<QueryMessages>> call=service.getQueryMessages();
    call.enqueue(new Callback<List<QueryMessages>>() {
        @Override
        public void onResponse(Call<List<QueryMessages>> call, Response<List<QueryMessages>> response) {

            pros.setVisibility(View.GONE);
            queryMessages=response.body();
            adapter=new MessagesAdapter(queryMessages,MainActivity.this);
            rvmsg.setAdapter(adapter);

        }

        @Override
        public void onFailure(Call<List<QueryMessages>> call, Throwable t) {

            pros.setVisibility(View.GONE);
            nonet.setVisibility(View.VISIBLE);

        }
    });

}

public void cast(){


    rvmsg=findViewById(R.id.rv_message);
    rvmsg.setLayoutManager(new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false));

}

now I need help for fix this error!


Solution

  • in new version retrofit if in your json have free parameter , get this error
    for example i need id,name,number
    but in my json have id,name,number,date ....
    i give this error! and some time if in ApiService have false url!
    tanks for help all