【问题标题】:Appears error com.google.firebase.database.DatabaseException: Can't convert object of type java.lang.String to type出现错误com.google.firebase.database.DatabaseException: Can't convert object of type java.lang.String to type
【发布时间】:2018-05-09 02:09:17
【问题描述】:

错误我想再次发送对象并且我的代码想将其转换为String,请帮助,错误是:

com.google.firebase.database.DatabaseException:无法将 java.lang.String 类型的对象转换为 DetailRestaurant 类型

public class UploadImage extends AppCompatActivity {

FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef;
private EditText nameImageR;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_upload_image);

    myRef = database.getReference("").child("users");
    nameImageR = findViewById(R.id.nameImageR);

    Button map = findViewById(R.id.buttonUpload);
    map.setOnClickListener(new View.OnClickListener() {
        @Override

        public void onClick(View view) {
            writeNewImage();
            Intent Client= new Intent(UploadImage.this, MainRestaurantActivity.class);
            startActivity(Client);
            finish();
        }
    });
}
private void writeNewImage() {
    myRef = database.getReference("users").child("restaurant").child(FirebaseAuth.getInstance().getCurrentUser().getUid());
    ValueEventListener valueEventListener = myRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for (DataSnapshot areaSnapshot : dataSnapshot.getChildren()) {
                DetailRestaurant value1 = areaSnapshot.getValue(DetailRestaurant.class);
                value1.setImageRestaurant(nameImageR.getText().toString());
                if (value1.getUid().equals(FirebaseAuth.getInstance().getCurrentUser().getUid())) {
                    String userIDR = value1.getUid();
                    myRef = database.getReference("");
                    myRef.child("users").child("restaurant").child(userIDR).setValue(value1);
                }
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            Log.d("Eror", "Something happened");
        }
    });
}
}

public class DetailRestaurant implements Serializable {

private String name;
private String uid;
private String ImageRestaurant;
private HashMap<String, DetailPlate> plates;

public DetailRestaurant(){
    this.plates = new HashMap<String, DetailPlate>();
}

public DetailRestaurant(String ImageRestaurant){
    this();
    this.ImageRestaurant = ImageRestaurant;
}

public DetailRestaurant(String name, String uid) {
    this();
    this.name = name;
    this.uid = uid;
}

public DetailRestaurant(String name, String uid, String ImageRestaurant, HashMap<String, DetailPlate> plates) {
    this.name = name;
    this.uid=uid;
    this.ImageRestaurant = ImageRestaurant;
    this.plates = plates;
}

public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public String getUid() {
    return uid;
}
public void setUid(String uid) {
    this.uid = uid;
}
public String getImageRestaurant() {
    return ImageRestaurant;
}
public void setImageRestaurant(String imageRestaurant) {
    ImageRestaurant = imageRestaurant;
}
public void setPlates(HashMap<String, DetailPlate> plates) {
    this.plates = plates;
}
public HashMap<String, DetailPlate> getPlates(){ return plates; }
public ArrayList<DetailPlate> getPlatesList() {
    ArrayList<DetailPlate> plates = new ArrayList<DetailPlate>();
    for (DetailPlate p : this.plates.values()){
        plates.add(p);
    }
    return plates;

}
@Override
public String toString() {
    return this.getName();
}

}

E/AndroidRuntime: 致命异常: main 进程:com.example.fernandalopezcardenas.uneatfinal,PID:9713 com.google.firebase.database.DatabaseException:无法将 java.lang.String 类型的对象转换为 com.example.fernandalopezcardenas.uneatfinal.Detail.DetailRestaurant 类型 在 com.google.android.gms.internal.zzbtg.zze(未知来源) 在 com.google.android.gms.internal.zzbtg.zzb(未知来源) 在 com.google.android.gms.internal.zzbtg.zza(未知来源) 在 com.google.firebase.database.DataSnapshot.getValue(未知来源) 在 com.example.fernandalopezcardenas.uneatfinal.Restaurant.UploadImage$2.onDataChange(UploadImage.java:56) 在 com.google.android.gms.internal.zzbpx.zza(未知来源) 在 com.google.android.gms.internal.zzbqx.zzZT(未知来源) 在 com.google.android.gms.internal.zzbra$1.run(未知来源) 在 android.os.Handler.handleCallback(Handler.java:746) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:148) 在 android.app.ActivityThread.main(ActivityThread.java:5459) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)

【问题讨论】:

  • 显示发生错误的行必须在android studio中提及并说出哪一行?
  • DetailRestaurant value1 = areaSnapshot.getValue(DetailRestaurant.class);在UploadImage类的56中
  • 请添加您的数据库结构。

标签: java android firebase firebase-realtime-database


【解决方案1】:

遇到同样的问题,您需要对第一个数据快照进行另一次内部迭代。像这样试试..

 for (DataSnapshot areaSnapshotOne : dataSnapshot.getChildren())
                {
                    for (DataSnapshot areaSnapshotTwo : areaSnapshotOne.getChildren())
                    {
         DetailRestaurant value1 = areaSnapshotTwo.getValue(DetailRestaurant.class);
Log.d("details",value1.toString());

                          /*your rest code here*/
                    }
                }

【讨论】:

  • java.lang.NullPointerException: Can't pass null for argument 'pathString' in child() 这个错误出现我摆脱了这一行 if (value1.getUid().equals(FirebaseAuth.getInstance ().getCurrentUser().getUid()))
  • @Jessica Sohr 解决了这个错误Can't convert object of type java.lang.String to type DetailRestaurant
  • 放入日志并查看 value1 中是否有 String uid 值。检查我的更新答案。
  • for (DataSnapshot areaSnapshotOne : dataSnapshot.getChildren()) { Log.d("details1", areaSnapshotOne.toString()); for (DataSnapshot areaSnapshotTwo : areaSnapshotOne.getChildren()) { DetailRestaurant value1 = areaSnapshotTwo.getValue(DetailRestaurant.class); Log.d("详细信息",value1.toString());
  • D/details1: DataSnapshot { key = name, value = Juvie Jus } D/details1: DataSnapshot { key = plate, value = {-KzmCDcYsoXpayxEmLpL={uidrestaurant=taoGAfndxbcuooJuN00SuJ31Xry2, name=waffles, price= 45,uidrequest=-KzmCDcYsoXpayxEmLpL,成分={0=蜂蜜,1=草莓,2=黄油},imagePlate=assets.epicurious.com/photos/54b40ef4d5e8c3e1070b0181/master/…},-KzmCXX_7Qg6_wNiSNEY={uidrestaurant=taoGAfndxbcuooJuN00SuJ31Xry2,名称=Taco,价格=30,uidrequest_wNisnz , 成分={0=洋葱, 1= 香菜, 2= 菠萝}} } D/细节:华夫饼
猜你喜欢
  • 2020-12-12
  • 1970-01-01
  • 1970-01-01
  • 2016-12-06
  • 1970-01-01
  • 2013-09-11
  • 1970-01-01
  • 1970-01-01
  • 2014-02-08
相关资源
最近更新 更多