首页 > 解决方案 > 从 Firestore 获取 int 数据

问题描述

在此处输入图像描述我试图从firestore获取int数据但在该应用程序崩溃之前我不知道为什么当我将它作为字符串尝试时它工作我得到它并且我可以列出它但是当我尝试它时int应用程序崩溃甚至在获取数据之前是我的代码第二部分是我的适配器 logchat 说 2 行是错误的我用楼梯标记它给你

FirebaseFirestore firestore;
ArrayList<String> useremaillist;
ArrayList<Integer> userpointlist;
SkorAdapter skorAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_skor_board);
    firestore=FirebaseFirestore.getInstance();
    useremaillist=new ArrayList<>();
    userpointlist=new ArrayList<>();
    getscore();
    RecyclerView skorboardrecyclerView=findViewById(R.id.recyclerView);
    skorboardrecyclerView.setLayoutManager(new LinearLayoutManager(this));
    skorAdapter=new SkorAdapter(useremaillist,userpointlist);
    skorboardrecyclerView.setAdapter(skorAdapter);

}
public void getscore(){
    CollectionReference collectionReference=firestore.collection("Kullanıcılar ve Skorlar");
    collectionReference.orderBy("skor", Query.Direction.DESCENDING).addSnapshotListener(new EventListener<QuerySnapshot>() {
        @Override
        public void onEvent(@Nullable  QuerySnapshot value, @Nullable  FirebaseFirestoreException error) {
            userpointlist.clear();
            useremaillist.clear();
            if(error!=null){
                Log.e("tag",error.getLocalizedMessage());
            }
            if(value!=null){
                for(DocumentSnapshot snapshot:value.getDocuments()){
                    Map<String,Object> userdatat=snapshot.getData();
                    String emailt=(String) userdatat.get("email");
                    int skor=(int) userdatat.get("skor");
                    useremaillist.add(emailt);
                    userpointlist.add(skor);
                    skorAdapter.notifyDataSetChanged();
                }

            }
        }

    });

}

  **   public class SkorAdapter extends RecyclerView.Adapter<SkorAdapter.Holder> {
private ArrayList<String> emaillistforadapter;
private ArrayList<Integer> pointlistforadapter;


public SkorAdapter(ArrayList<String> emaillistforadapter,ArrayList<Integer> pointlistforadapter ) {
    this.emaillistforadapter = emaillistforadapter;
    this.pointlistforadapter = pointlistforadapter;
}

@NonNull
@Override
public Holder onCreateViewHolder(@NonNull  ViewGroup parent, int viewType) {
    LayoutInflater layoutInflater=LayoutInflater.from(parent.getContext());
    View view=layoutInflater.inflate(R.layout.skorboard_row,parent,false);
    return new Holder(view);
}

@Override
public void onBindViewHolder(@NonNull  SkorAdapter.Holder holder, int position) {
    holder.useremailtext.setText(emaillistforadapter.get(position));
  **    holder.userpointtext.setText(pointlistforadapter.get(position));

}

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

public class Holder extends RecyclerView.ViewHolder {
    TextView useremailtext;
    TextView userpointtext;
    public Holder(@NonNull View itemView) {
        super(itemView);
        useremailtext=itemView.findViewById(R.id.kullanıcımailtext);
        userpointtext=itemView.findViewById(R.id.kullanıcıpointtext);

    }


}  

标签: javaandroidfirebasegoogle-cloud-firestore

解决方案


那么问题出在适配器上。

你有 a private ArrayList<Integer> pointlistforadapter;,问题是你正在做 holder.userpointtext.setText(pointlistforadapter.get(position));setText()接受 a CharSeq,它允许你添加一个Intin 参数,因为它也有这个签名:

在此处输入图像描述

而且由于它不是残留物,它会崩溃。

你可以做的是:

holder.userpointtext.setText(pointlistforadapter.get(position).toString());

推荐阅读