0
RecyclerView recyclerView = findViewById(R.id.recyclerView);
                recyclerView.setHasFixedSize(true);
                recyclerView.setLayoutManager(new LinearLayoutManager(NoticeMngActivity.this));
                RecyclerView.Adapter mAdapter = new noticeListAdapter(NoticeMngActivity.this, noticeList);
                recyclerView.setAdapter(mAdapter);

I did this code in the main activity and there was error java.lang.NullPointerException: Attempt to invoke virtual method 'int java.util.ArrayList.size()' on a null object reference This error pointed to

    public int getItemCount() {
    return noticeset.size();
}

But I checked noticeList size is 4 by log.d()...before passing to Adapter. why doesn't it work.... And there was more error above this error E/RecyclerView: No adapter attached; skipping layout I'm stuck with this problem a day....

This Adapter.java

public class noticeListAdapter extends RecyclerView.Adapter<noticeListAdapter.NoticeViewHolder> {
private Activity activity;
private ArrayList<notice> noticeset = null;

public static class NoticeViewHolder extends RecyclerView.ViewHolder{
    public CardView cardView;
    public NoticeViewHolder(CardView v){
        super(v);
        cardView = v;
    }
}


public noticeListAdapter(Activity activity, ArrayList<notice> noticeset){
    this.activity = activity;
    noticeset = noticeset;
}

@NonNull
@Override
public NoticeViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    CardView cardView = (CardView) LayoutInflater.from(parent.getContext()).inflate(R.layout.item_notice, parent, false);
    final NoticeViewHolder noticeViewHolder = new NoticeViewHolder(cardView);
    cardView.setOnClickListener(view -> {
        Intent resultIntent = new Intent();
        resultIntent.putExtra("ProfilePath", (CharSequence) noticeset.get(noticeViewHolder.getAdapterPosition()));
        activity.setResult(Activity.RESULT_OK, resultIntent);
        activity.finish();
    });
    return noticeViewHolder;
}

@Override
public void onBindViewHolder(@NonNull NoticeViewHolder holder, int position) {
    CardView cardView = holder.cardView;
    TextView titletextView = cardView.findViewById(R.id.titletextView);
    TextView datetextView = cardView.findViewById(R.id.datetextView);
    titletextView.setText(noticeset.get(position).gettitle());
    datetextView.setText(noticeset.get(position).getdate());
}

@Override
public int getItemCount() {
    return noticeset.size();
}

And this is main

public class NoticeMngActivity extends AppCompatActivity {
private ListView listView;
private noticeListAdapter adapter;
private List<notice> noticeList = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_notice_mng);
    Intent intent = getIntent();
    Button writeBtn = findViewById(R.id.writeButton);
    writeBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {//Write버튼 누르면 writeactivity로 이동
            Intent intent = new Intent(getApplicationContext(), NoticeWriteActivity.class);
            startActivity(intent);
        }
    });
    createNoticeGroups();
}

private void createNoticeGroups()
{
    FirebaseFirestore db = FirebaseFirestore.getInstance();
    db.collection("notice").get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
        @Override
        public void onComplete(@NonNull Task<QuerySnapshot> task) {
            if(task.isSuccessful()){
                final ArrayList<notice> noticeList = new ArrayList<>();
                for(QueryDocumentSnapshot document : task.getResult()){
                    noticeList.add(new notice(document.getData().get("title").toString(),
                            (ArrayList<String>)document.getData().get("content"),
                            document.getData().get("date").toString()));
                    //Log.d("로그:", "데이터 : "+document.getData().get("title").toString());
                }

                RecyclerView recyclerView = findViewById(R.id.recyclerView);
                recyclerView.setHasFixedSize(true);
                recyclerView.setLayoutManager(new LinearLayoutManager(NoticeMngActivity.this));
                RecyclerView.Adapter mAdapter = new noticeListAdapter(NoticeMngActivity.this, noticeList);
                recyclerView.setAdapter(mAdapter);
            } else{
                Log.d(TAG, "Error getting documents: ", task.getException());
            }
        }
    });
이소다
  • 1
  • 1
  • That single method of the adapter doesn't suffice to understand the cause of the problem; however, `noticeList` obviously isn't the same as `noticeset` and you might not be setting it in the adapter's constructor. – Martin Zeitler May 15 '22 at 19:59
  • @MartinZeitler I added more codes! – 이소다 May 16 '22 at 05:08

0 Answers0