所以我想在片段的 Recycler-view 中加載 Firebase 實時資料庫。這是我的片段:
public class buy extends Fragment {
// TODO: Rename parameter arguments, choose names that match
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
private static final String ARG_PARAM1 = "param1";
private static final String ARG_PARAM2 = "param2";
// TODO: Rename and change types of parameters
private String mParam1;
private String mParam2;
private RecyclerView recyler;
private DatabaseReference reference;
private ArrayList<Produce> plist;
private Produce_RecyclerViewAdapter adapter;
public buy() {
// Required empty public constructor
}
// TODO: Rename and change types and number of parameters
public static buy newInstance(String param1, String param2) {
buy fragment = new buy();
Bundle args = new Bundle();
args.putString(ARG_PARAM1, param1);
args.putString(ARG_PARAM2, param2);
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
mParam1 = getArguments().getString(ARG_PARAM1);
mParam2 = getArguments().getString(ARG_PARAM2);
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View rootView = inflater.inflate(R.layout.fragment_buy, container, false);
recyler = rootView.findViewById(R.id.recycler);
recyler.setHasFixedSize(true);
recyler.setLayoutManager(new LinearLayoutManager(rootView.getContext()));
reference = FirebaseDatabase.getInstance().getReference("Produce");
plist = new ArrayList<>();
adapter = new Produce_RecyclerViewAdapter(plist, rootView.getContext());
recyler.setAdapter(adapter);
final int count = 0;
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
for (DataSnapshot ds : snapshot.getChildren()) {
Produce produce = ds.getValue(Produce.class);
plist.add(produce);
}
adapter.notifyDataSetChanged();
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
Display();
}
});
return inflater.inflate(R.layout.fragment_buy, container, false);
}
private void Display() {
Toast.makeText(getActivity(), "Error", Toast.LENGTH_SHORT).show();
}
}
這是我的配接器類:
public class Produce_RecyclerViewAdapter extends RecyclerView.Adapter<Produce_RecyclerViewAdapter.ViewHolder>{
private List<Produce> produce_item;
private Context context;
public Produce_RecyclerViewAdapter(List<Produce> produce_item, Context context) {
this.produce_item = produce_item;
this.context = context;
}
@NonNull
@NotNull
@Override
public ViewHolder onCreateViewHolder(@NonNull @NotNull ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
View view = inflater.inflate(R.layout.produce_item, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull @NotNull ViewHolder holder, int position) {
Produce produce = produce_item.get(position);
holder.ptitle.setText(produce.getPname());
holder.pprice.setText(produce.getPprice());
Picasso.with(context)
.load(produce.getPimg())
.placeholder(R.mipmap.ic_launcher)
.fit()
.centerCrop()
.into(holder.pimage);
}
@Override
public int getItemCount() {
return produce_item.size();
}
public class ViewHolder extends RecyclerView.ViewHolder{
ImageView pimage;
TextView ptitle, pprice;
CardView view, addtocart;
public ViewHolder(@NonNull @NotNull View itemView) {
super(itemView);
pimage = itemView.findViewById(R.id.pimage);
ptitle = itemView.findViewById(R.id.ptitle);
pprice = itemView.findViewById(R.id.pprice);
view = itemView.findViewById(R.id.view);
addtocart = itemView.findViewById(R.id.addtocart);
}
}
}
這是我的 Produce.java:
public class Produce {
String pname;
String pdesc;
String pimg;
String pfarm;
String pprice;
String pcategory;
boolean instock;
public Produce(){
}
public Produce(String pname, String pdesc, String pimg, String pfarm, boolean instock, String pprice, String pcategory){
this.pname = pname;
this.pdesc = pdesc;
this.pimg = pimg;
this.pfarm = pfarm;
this.instock = instock;
this.pprice = pprice;
this.pcategory = pcategory;
}
public String getPname(){
return pname;
}
public String getPdesc(){
return pdesc;
}
public String getPimg(){
return pimg;
}
public String getPfarm() {
return pfarm;
}
public boolean isInstock() {
return instock;
}
public String getPprice(){return pprice;}
public String getPcategory(){return pcategory;}
public void setPimg(String pimg){this.pimg = pimg;}
}
這是我的資料:

即使我將 setter 添加到 pimg 我得到:堆疊跟蹤:在類 com.example.belko_fresh.Produce 上找不到 pimage 的 setter/field 我該怎么辦?
編輯:編輯firebase資料以匹配我的Produce類后,我得到堆疊跟蹤:沒有附加配接器;跳過布局。
uj5u.com熱心網友回復:
資料庫有一個名為 的屬性pimage,而您的 Java 類有一個名為 的欄位pimg。由于這兩個名稱不匹配,Firebase SDK 無法在它們之間自動映射并引發錯誤。
要消除錯誤,請確保您的 Java 代碼和資料庫對屬性使用相同的名稱,即:
public String getPimage(){
return pimg;
}
...
public void setPimage(String pimg){this.pimg = pimg;}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/515868.html
標籤:Google Cloud Collective 安卓安卓片段firebase-实时数据库
上一篇:顯示通知,但點擊通知無法跳轉頁面
下一篇:不乘以100的刻度百分比
