Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/205.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Firestore集合到自定义ListView_Java_Android_Firebase_Google Cloud Firestore - Fatal编程技术网

Java Firestore集合到自定义ListView

Java Firestore集合到自定义ListView,java,android,firebase,google-cloud-firestore,Java,Android,Firebase,Google Cloud Firestore,基本上,我一直在尝试从firestore集合填充自定义的ListView,但几个小时后我无法填充,因此我在Stack Overflow中搜索并发现以下问题: 我将我的适配器和型号与问题进行了比较,但它们似乎都没有错,所以剩下的唯一选项是主文件,我使用了答案中显示的相同代码,但在这一行中出现了错误: ProdAdapter MPProductAdapter=新的ProdAdapter(此,MPProductsList); 错误:不兼容的类型:匿名 OnCompleteListener(Quer

基本上,我一直在尝试从firestore集合填充自定义的
ListView
,但几个小时后我无法填充,因此我在Stack Overflow中搜索并发现以下问题:

我将我的适配器和型号与问题进行了比较,但它们似乎都没有错,所以剩下的唯一选项是主文件,我使用了答案中显示的相同代码,但在这一行中出现了错误:

ProdAdapter MPProductAdapter=新的ProdAdapter(此,MPProductsList);
错误:不兼容的类型:匿名 OnCompleteListener(QuerySnapshot)无法转换为上下文

在回答中,适配器是在get方法中创建的,因此我尝试在之后创建它,但错误仍然存在。我对Java和Firebase不太了解,但我想知道如何获取上下文,或者是否应该使用addOnCompleteListener之外的其他方法

MainActivity.java:

公共类MainActivity扩展AppCompatActivity实现ZXingScannerView.ResultHandler{
私人ZSINGSCANNERVIEW scView;
私有ListView lista;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final FirebaseFirestore db=FirebaseFirestore.getInstance();
lista=findviewbyd(R.id.mylistView);
db.collection(“tasks”).get().addOnCompleteListener(新的OnCompleteListener()){
@凌驾
未完成的公共void(@NonNull任务){
List MPProductsList=新建ArrayList();
if(task.issusccessful()){
对于(QueryDocumentSnapshot文档:task.getResult()){
产品未命中=document.toObject(Product.class);
MPProductsList.add(未命中);
}
ProdAdapter MPProductAdapter=新的ProdAdapter(此,MPProductsList);
MPProductAdapter.notifyDataSetChanged();
setAdapter(MPProductAdapter);
}
}
});
}
适配器:

公共类ProdAdapter扩展了ArrayAdapter{
语境;
ArrayList对象;
公共ProdAdapter(上下文上下文,ArrayList对象){
超级(上下文,0,对象);
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
if(convertView==null){
convertView=((活动)getContext()).GetLayoutFlater().inflate(R.layout.product\u view\u模型,父项,false);
}
产品目录=获取项目(位置);
TextView prod=(TextView)convertView.findViewById(R.id.lblName);
TextView description=(TextView)convertView.findViewById(R.id.lblDesc);
TextView代码=(TextView)convertView.findViewById(R.id.lblCode);
TextView数量=(TextView)convertView.findViewById(R.id.lblQty);
TextView价格=(TextView)convertView.findViewById(R.id.lblPrice);
prod.setText(dir.getProduct());
description.setText(dir.getDescription());
code.setText(dir.getId());
qty.setText(dir.getQty());
price.setText(dir.getPrice());
返回视图;
}
}
和项目类别:

package com.shop.shai.management\u test.model;
公共类产品{
公共字符串id;
公共字符串产品;
公共字符串价格;
公共字符串数量;
公共字符串描述;
公共产品(){}
公共产品(字符串id、字符串产品、字符串价格、字符串数量、字符串描述){
this.id=id;
本产品=产品;
这个价格=价格;
该数量=数量;
this.description=描述;
}
公共字符串getId(){
返回id;
}
公共字符串getProduct(){
退货产品;
}
公共字符串getPrice(){
退货价格;
}
公共字符串getDescription(){
返回说明;
}
公共字符串getQty(){
退货数量;
}
公共无效集合id(字符串id){
this.id=id;
}
公共产品(字符串产品){
本产品=产品;
}
公共无效设置价格(字符串价格){
这个价格=价格;
}
公共作废设置数量(字符串数量){
该数量=数量;
}
公共void集合描述(字符串描述){
this.description=描述;
}
}
在这种情况下:

ProdAdapter mProductAdapter = new ProdAdapter(this, mProductsList);
关键字“this”是指此代码所在的匿名类
OnCompleteListener
。您需要将其更改为:

ProdAdapter mProductAdapter = new ProdAdapter(MainActivity.this, mProductsList);
它将在主活动的上下文中传递,这是适配器实际期望的参数:

public ProdAdapter(Context context, ArrayList<Product> object){
        super(context,0, object);
    }
公共ProdAdapter(上下文,ArrayList对象){ 超级(上下文,0,对象); }
哦,它是有效的,我想它仍然是指MainActivity。在这种情况下,我可以问一下“this”指的是什么吗?在这种情况下,“MainActivity.this”指的是活动上下文本身,这正是您要传递给适配器的内容:)很抱歉,没有MainActivity“ProdAdapter(this,mpProductsList);”在这种情况下,关键字“this”指的是CompleteListener上的匿名类