Java com.google.firebase.database.DatabaseException:在com.sale.organicgroups.organicropsonsale.CartData类上找不到要序列化的属性
我正在开发一个Android应用程序,出现以下错误:Java com.google.firebase.database.DatabaseException:在com.sale.organicgroups.organicropsonsale.CartData类上找不到要序列化的属性,java,android,Java,Android,我正在开发一个Android应用程序,出现以下错误: 2019-05-05 18:19:35.582 9087-9087/com.sale.organiccrops.organiccropsonsale E/AndroidRuntime: FATAL EXCEPTION: main Process: com.sale.organiccrops.organiccropsonsale, PID: 9087 com.google.firebase.database.DatabaseEx
2019-05-05 18:19:35.582 9087-9087/com.sale.organiccrops.organiccropsonsale E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.sale.organiccrops.organiccropsonsale, PID: 9087
com.google.firebase.database.DatabaseException: No properties to serialize found on class com.sale.organiccrops.organiccropsonsale.CartData
at com.google.firebase.database.core.utilities.encoding.CustomClassMapper$BeanMapper.<init>(com.google.firebase:firebase-database@@16.1.0:535)
at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.loadOrCreateBeanMapperForClass(com.google.firebase:firebase-database@@16.1.0:317)
at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.serialize(com.google.firebase:firebase-database@@16.1.0:166)
at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.serialize(com.google.firebase:firebase-database@@16.1.0:152)
at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.convertToPlainJavaTypes(com.google.firebase:firebase-database@@16.1.0:60)
at com.google.firebase.database.DatabaseReference.setValueInternal(com.google.firebase:firebase-database@@16.1.0:292)
at com.google.firebase.database.DatabaseReference.setValue(com.google.firebase:firebase-database@@16.1.0:166)
at com.sale.organiccrops.organiccropsonsale.CheckoutActivity$2.onClick(CheckoutActivity.java:64)
at android.view.View.performClick(View.java:6304)
at android.view.View$PerformClick.run(View.java:24803)
at android.os.Handler.handleCallback(Handler.java:794)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:176)
at android.app.ActivityThread.main(ActivityThread.java:6635)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823)
2019-05-05 18:19:35.582 9087-9087/com.sale.organicgroups.organicropsonsale E/AndroidRuntime:致命异常:main
工艺:com.sale.organicgroups.organicropsonsale,PID:9087
com.google.firebase.database.DatabaseException:在com.sale.organicgroups.organicropsonsale.CartData类上找不到要序列化的属性
位于com.google.firebase.database.core.utilities.encoding.CustomClassMapper$BeanMapper。(com.google.firebase:firebase数据库@@16.1.0:535)
位于com.google.firebase.database.core.utilities.encoding.CustomClassMapper.loadOrCreateBeanMapperForClass(com.google.firebase:firebase数据库@@16.1.0:317)
位于com.google.firebase.database.core.utilities.encoding.CustomClassMapper.serialize(com.google.firebase:firebase数据库@@16.1.0:166)
位于com.google.firebase.database.core.utilities.encoding.CustomClassMapper.serialize(com.google.firebase:firebase数据库@@16.1.0:152)
位于com.google.firebase.database.core.utilities.encoding.CustomClassMapper.convertToPlainJavaTypes(com.google.firebase:firebase数据库@@16.1.0:60)
位于com.google.firebase.database.DatabaseReference.setValueInternal(com.google.firebase:firebase数据库@@16.1.0:292)
位于com.google.firebase.database.DatabaseReference.setValue(com.google.firebase:firebase数据库@@16.1.0:166)
在com.sale.organicgroups.organicropsonsale.CheckoutActivity$2.onClick上(CheckoutActivity.java:64)
在android.view.view.performClick上(view.java:6304)
在android.view.view$PerformClick.run(view.java:24803)
位于android.os.Handler.handleCallback(Handler.java:794)
位于android.os.Handler.dispatchMessage(Handler.java:99)
位于android.os.Looper.loop(Looper.java:176)
位于android.app.ActivityThread.main(ActivityThread.java:6635)
位于java.lang.reflect.Method.invoke(本机方法)
位于com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823)
CheckoutActivity的Java代码为:
package com.sale.organiccrops.organiccropsonsale;
import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
import java.util.ArrayList;
import java.util.Objects;
public class CheckoutActivity extends AppCompatActivity {
private EditText address;
private DatabaseReference reference;
private TextView amount;
private Double sum;
private ArrayList<CartData> data;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_checkout);
amount = findViewById(R.id.amount);
address = findViewById(R.id.address);
data = new ArrayList<>();
Button confirm = findViewById(R.id.confirm);
if (FirebaseAuth.getInstance().getCurrentUser() != null) {
reference = FirebaseDatabase.getInstance().getReference("users/" + FirebaseAuth.getInstance().getCurrentUser().getUid() + "/cart");
reference.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
data.clear();
sum = 0.0;
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
data.add(new CartData(snapshot.child("english").getValue(String.class), snapshot.child("hindi").getValue(String.class), snapshot.child("quantity").getValue(String.class), snapshot.child("image").getValue(String.class), snapshot.child("price").getValue()));
sum += snapshot.child("price").getValue(Double.class);
}
amount.setText(new StringBuilder().append("₹ ").append(sum));
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
confirm.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (address.length() == 0) {
address.requestFocus();
address.setError("This Is A Required Field");
} else {
reference = FirebaseDatabase.getInstance().getReference("admins/orders/pending").push();
reference.child("user").setValue(FirebaseAuth.getInstance().getCurrentUser().getUid());
reference.child("address").setValue(address.getText().toString());
reference.child("items").setValue(data);
reference.child("price").setValue(Double.parseDouble(amount.getText().toString().replace("₹ ", "")));
reference = FirebaseDatabase.getInstance().getReference("users/" + FirebaseAuth.getInstance().getCurrentUser().getUid() + "/orders/ongoing").child(Objects.requireNonNull(reference.getKey()));
reference.child("address").setValue(address.getText().toString());
reference.child("items").setValue(data);
reference.child("price").setValue(Double.parseDouble(amount.getText().toString().replace("₹ ", ""))).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (FirebaseAuth.getInstance().getCurrentUser() != null) {
reference = FirebaseDatabase.getInstance().getReference("users/" + FirebaseAuth.getInstance().getCurrentUser().getUid() + "/cart");
reference.removeValue().addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
Toast.makeText(getBaseContext(), "Order Placed Successfully", Toast.LENGTH_SHORT).show();
startActivity(new Intent(getBaseContext(), UserDashboardActivity.class));
finish();
}
});
}
}
});
}
}
});
}
@Override
public void onBackPressed() {
startActivity(new Intent(getBaseContext(), CartActivity.class));
finish();
}
@Override
protected void onStart() {
super.onStart();
if (FirebaseAuth.getInstance().getCurrentUser() == null) {
startActivity(new Intent(getBaseContext(), AuthenticationActivity.class));
finish();
}
}
@Override
protected void onRestart() {
super.onRestart();
if (FirebaseAuth.getInstance().getCurrentUser() == null) {
startActivity(new Intent(getBaseContext(), AuthenticationActivity.class));
finish();
}
}
@Override
protected void onResume() {
super.onResume();
if (FirebaseAuth.getInstance().getCurrentUser() == null) {
startActivity(new Intent(getBaseContext(), AuthenticationActivity.class));
finish();
}
}
}
package com.sale.organicgroups.organicropsonsale;
导入android.content.Intent;
导入android.support.annotation.NonNull;
导入android.support.v7.app.AppActivity;
导入android.os.Bundle;
导入android.view.view;
导入android.widget.Button;
导入android.widget.EditText;
导入android.widget.TextView;
导入android.widget.Toast;
导入com.google.android.gms.tasks.OnCompleteListener;
导入com.google.android.gms.tasks.Task;
导入com.google.firebase.auth.FirebaseAuth;
导入com.google.firebase.database.DataSnapshot;
导入com.google.firebase.database.DatabaseError;
导入com.google.firebase.database.DatabaseReference;
导入com.google.firebase.database.FirebaseDatabase;
导入com.google.firebase.database.ValueEventListener;
导入java.util.ArrayList;
导入java.util.Objects;
公共类签出活动扩展了AppCompatActivity{
专用文本地址;
私人数据库参考;
私有文本浏览量;
私人双和;
私有数组列表数据;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u checkout);
金额=findViewById(R.id.金额);
地址=findViewById(R.id.address);
数据=新的ArrayList();
按钮确认=findViewById(R.id.confirm);
如果(FirebaseAuth.getInstance().getCurrentUser()!=null){
reference=FirebaseDatabase.getInstance().getReference(“用户/”+FirebaseAuth.getInstance().getCurrentUser().getUid()+“/cart”);
reference.addListenerForSingleValueEvent(新的ValueEventListener()){
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot){
data.clear();
总和=0.0;
对于(DataSnapshot快照:DataSnapshot.getChildren()){
data.add(新的CartData(snapshot.child(“英语”).getValue(String.class)、snapshot.child(“印地语”).getValue(String.class)、snapshot.child(“数量”).getValue(String.class)、snapshot.child(“图像”).getValue(String.class)、snapshot.child(“价格”).getValue());
sum+=snapshot.child(“price”).getValue(Double.class);
}
amount.setText(新的StringBuilder().append(“₹ ").追加(总和);
}
@凌驾
已取消的公共void(@NonNull DatabaseError DatabaseError){
}
});
}
confirm.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
if(address.length()==0){
address.requestFocus();
address.setError(“这是必填字段”);
}否则{
reference=FirebaseDatabase.getInstance().getReference(“admins/orders/pending”).push();
reference.child(“user”).setValue(FirebaseAuth.getInstance().getCurrentUser().getUid());
reference.child(“address”).setValue(address.getText().toString());
参考。子项(“项目”)。设定值(数据);
reference.child(“price”).setValue(Double.parseDouble(amount.getText().toString().replace()₹ ", "")));
reference=FirebaseDatabase.getInstance().getReference(“users/”+FirebaseAuth.getInstance().getCurrentUser().getUid()+“/orders/consuming”).child(Objects.requirennull(reference.getKey());
reference.child(“address”).setValue(address.getText().toString());
参考。子项(“项目”)。设定值(数据);
package com.sale.organiccrops.organiccropsonsale;
import android.annotation.SuppressLint;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
import java.util.ArrayList;
import java.util.Objects;
class CartData {
private String english, hindi, quantity, url;
private Object price;
CartData(String english, String hindi, String quantity, String url, Object price) {
this.english = english;
this.hindi = hindi;
this.quantity = quantity;
this.url = url;
this.price = price;
}
String getEnglish() {
return english;
}
String getHindi() {
return hindi;
}
String getQuantity() {
return quantity;
}
String getUrl() {
return url;
}
Object getPrice() {
return price;
}
void setPrice(Object price) {
this.price = price;
}
}
public class CartActivity extends AppCompatActivity {
private ProgressBar progress;
private ArrayList<CartData> data;
private TextView products;
private RecyclerView recyclerView;
private Button checkout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_cart);
progress = findViewById(R.id.progress);
progress.setVisibility(View.VISIBLE);
products = findViewById(R.id.products);
checkout = findViewById(R.id.checkout);
data = new ArrayList<>();
if (FirebaseAuth.getInstance().getCurrentUser() != null) {
DatabaseReference reference = FirebaseDatabase.getInstance().getReference("users/" + FirebaseAuth.getInstance().getCurrentUser().getUid() + "/cart");
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
data.clear();
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
data.add(new CartData(snapshot.child("english").getValue(String.class), snapshot.child("hindi").getValue(String.class), snapshot.child("quantity").getValue(String.class), snapshot.child("image").getValue(String.class), snapshot.child("price").getValue()));
}
progress.setVisibility(View.GONE);
if (data.isEmpty()) {
products.setVisibility(View.VISIBLE);
checkout.setEnabled(false);
} else {
products.setVisibility(View.GONE);
checkout.setEnabled(true);
checkout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(getBaseContext(), CheckoutActivity.class));
finish();
}
});
}
recyclerView = findViewById(R.id.recyclerView);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(getBaseContext()));
recyclerView.setAdapter(new CartAdapter(data));
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
}
@Override
public void onBackPressed() {
startActivity(new Intent(getBaseContext(), UserDashboardActivity.class));
finish();
}
@Override
protected void onStart() {
super.onStart();
if (FirebaseAuth.getInstance().getCurrentUser() == null) {
startActivity(new Intent(getBaseContext(), AuthenticationActivity.class));
finish();
}
}
@Override
protected void onRestart() {
super.onRestart();
if (FirebaseAuth.getInstance().getCurrentUser() == null) {
startActivity(new Intent(getBaseContext(), AuthenticationActivity.class));
finish();
}
}
@Override
protected void onResume() {
super.onResume();
if (FirebaseAuth.getInstance().getCurrentUser() == null) {
startActivity(new Intent(getBaseContext(), AuthenticationActivity.class));
finish();
}
}
}
class CartAdapter extends RecyclerView.Adapter<CartAdapter.ViewHolder> {
private ArrayList<CartData> data;
private DatabaseReference reference;
private String key;
CartAdapter(ArrayList<CartData> data) {
this.data = data;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {
return new ViewHolder(LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.list_cart, viewGroup, false));
}
@Override
public void onBindViewHolder(@NonNull ViewHolder viewHolder, @SuppressLint("RecyclerView") final int i) {
viewHolder.english.setText(data.get(i).getEnglish());
viewHolder.hindi.setText(data.get(i).getHindi());
viewHolder.quantity.setText(data.get(i).getQuantity());
viewHolder.price.setText(new StringBuilder().append("₹ ").append(data.get(i).getPrice()));
GlideApp.with(viewHolder.image.getContext()).load(data.get(i).getUrl()).into(viewHolder.image);
viewHolder.delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (FirebaseAuth.getInstance().getCurrentUser() != null) {
reference = FirebaseDatabase.getInstance().getReference("users/" + FirebaseAuth.getInstance().getCurrentUser().getUid() + "/cart");
reference.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
if (Objects.equals(snapshot.child("english").getValue(), data.get(i).getEnglish()) && Objects.equals(snapshot.child("hindi").getValue(), data.get(i).getHindi()) && Objects.equals(snapshot.child("quantity").getValue(), data.get(i).getQuantity()) && Objects.equals(snapshot.child("price").getValue(), data.get(i).getPrice())) {
key = snapshot.getKey();
}
}
if (key != null) {
reference.child(key).removeValue();
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
}
});
}
@Override
public int getItemCount() {
return data.size();
}
static class ViewHolder extends RecyclerView.ViewHolder {
private TextView english, hindi, quantity, price;
private ImageButton delete;
private ImageView image;
ViewHolder(View itemView) {
super(itemView);
this.english = itemView.findViewById(R.id.english);
this.hindi = itemView.findViewById(R.id.hindi);
this.quantity = itemView.findViewById(R.id.quantity);
this.price = itemView.findViewById(R.id.price);
this.delete = itemView.findViewById(R.id.delete);
this.image = itemView.findViewById(R.id.image);
}
}
}
void setEnglish() {
this.english = english;
}