此Firebase数据库结构:
在此处输入图片说明
这是我的设备类:
public class Device {
private String title;
private Map<String,Counters> CounterNumber;
private Counters counters;
public void setCounter(Map<String,Counters> CounterNumber){
this.CounterNumber=CounterNumber;
}
public Map<String,Counters> getCounter(){
return CounterNumber;
}
public Counters getCounters(){
return counters;
}
public void setCounters(Counters counters){
this.counters=counters;
}
public Device(){
}
public Device(String title){
this.title=title;
}
public String getTitle(){
return title;
}
public void setTitle(String title){
this.title=title;
}
}
第二类是我认为的嵌套对象
第二类Counters Class我的问题是我不知道如何
Counter
使用FirebaseUI
和从数据库中读取对象RecycleView
。
public class Counters implements Serializable {
private String countername;
private String counternumber;
public Counters (){
}
public Counters(String counternumber,String countername){
this.counternumber=counternumber;
this.countername=countername;
}
public String getCounterName() {
return countername;
}
public void setCounterName(String counterName) {
this.countername = countername;
}
public String getCounterNumber() {
return counternumber;
}
public void setCounterNumber(String counternumber) {
this.counternumber = countername;
}
}
这是我的HomeActivity从Firebase对象读取的内容
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_home, container, false);
recyclerView=(RecyclerView)view.findViewById(R.id.recycler_view);
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
firebaseDatabase=FirebaseDatabase.getInstance();
databaseReference=firebaseDatabase.getReference();
mDevice=new ArrayList<Device>();
mdevices=new Device();
databaseReference.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
if (dataSnapshot != null && dataSnapshot.getValue() != null) {
try {
for (DataSnapshot eventSnapshot : dataSnapshot.getChildren()) {
ArrayList<String> counterse= (ArrayList<String>) eventSnapshot.getValue();
Log.e(TAGE, counterse.toString());
Device device = eventSnapshot.getValue(Device.class);
String id = eventSnapshot.getKey();
Counters counters = eventSnapshot.child(id).getValue(Counters.class);
device.setCounters(counters);
mDevice.add(device);
}
} catch (Exception ex) {
Log.e(TAG, ex.getMessage());
}
}
displayDevices();
}
@Override
public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
return view;
}
private void displayDevices(){
options=
new FirebaseRecyclerOptions.Builder<Device>()
.setQuery(databaseReference.child("devices").orderByChild("user_id").equalTo(userid),Device.class).build();
adapter=
new FirebaseRecyclerAdapter<Device, MyRecyclerViewHolder>(options) {
@Override
protected void onBindViewHolder(@NonNull MyRecyclerViewHolder holder, int position, @NonNull Device model) {
mdevices=mDevice.get(position);
holder.txt_title.setText(model.getTitle());
holder.txt_counter.setText(mdevices.getCounters().getCounterNumber());
Log.i(TAG,mdevices.getCounters().getCounterNumber());
}
@NonNull
@Override
public MyRecyclerViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View itemView= LayoutInflater.from(getContext()).inflate(R.layout.device_list,parent,false);
return new MyRecyclerViewHolder(itemView);
}
};
adapter.startListening();
recyclerView.setAdapter(adapter);
}
@Override
public void onStart() {
adapter.startListening();
super.onStart();
}
@Override
public void onStop() {
super.onStop();
if(adapter != null) {
adapter.stopListening();
}
}
这是我的错误代码,请 在此处输入图片描述
您收到以下错误:
无法将类型java.util.ArrayList的对象转换为com.example.smartappfirebase.Counters类型
因为你得到一个ArrayList
对象, 不是
一个Counters
对象,并没有在Java中没有办法创造这样一个演员。你counters
的内存在节点cRVh ... NHeT
节点实际上是一个数组。当您尝试在代码中读取该数组时,它将作为ArrayList读取,因此会出现该错误。正如您在屏幕截图中看到的那样,该数组包含Counters
对象。不幸的是,您不能简单地将该Counters
对象数组映射到ArrayList<Counters>
。该counters
节点实际上是HashMaps的ArrayList。因此,如果您需要一个ArrayList<Counters>
,则应该迭代并自己创建该列表。除此之外,Counters
类中属性的名称与数据库中的名称
不 匹配。看,countername
vs name
和counternumber
vscounter
。所有属性必须匹配。
我试图将值从数据库快照放入类对象的映射活动代码。 我的车站类别代码和位置类别代码。 在从firebase获取的地图上标记位置的代码。
我不能读取属性作为自定义类'Himno'。当我尝试时,即使我注释一行,我也会得到一个“运行时间异常”:。然而,我可以得到属性到相应的变量。 E/AndroidRuntime:致命异常:主进程:组织。我的应用程序,PID:10532 java。lang.RuntimeException:无法反序列化对象。无法转换com类型的对象。谷歌。火基。消防商店。文档引用类型org。我的应用程序。模型Himno
E/AndroidRuntime:致命异常:主进程:org.my.app,PID:10532 java.lang.RuntimeException:无法反序列化对象。无法将com.google.firebase.firestore.documenttype对象转换为类型org.my.app.model.himno(在“himno”字段中找到)(位于com.google.firebase.fires
这是我的数据库结构。我正试图获取订单的详细信息。 这是代码 但我得到了这个错误 这是我得到错误的线 有什么帮助或建议吗?
我有一个嵌套的JSON对象,如下所示: 我想将其转换为: 我如何使用JOLT实现这一点?感谢您的参与。
我只想扁平化嵌套JSON的属性,但仍然适用于输入数组中的所有对象 很难将这三个字段放在一个规范中(类型字段、geo字段、properties字段)。我编写了规范来单独完成每一个操作,但是当我将这些规范组合在一个对象中使用时,它会产生错误的输出--对象数组真的把它搞砸了。 期望输出: