【发布时间】:2018-04-18 00:47:45
【问题描述】:
我正在尝试手动将微调器数据手动添加到 Firebase,但是当我尝试在微调器下拉列表中显示它时,我收到错误:
无法将 java.lang.String 类型的对象转换为 com.appname.appname.ListItem 类型。
这是我从 firebase 检索微调器数据并将其显示在下拉微调器中的方法:
proffRefspin.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Log.e("Spinner Data", "Spinner data is changed!");
Iterable<DataSnapshot> temp = dataSnapshot.getChildren();
ArrayList<String> list = new ArrayList<>();
for (DataSnapshot lists : temp){
Log.d("ddd","Array List: "+lists.getValue().toString());
list.add(lists.getValue().toString());
textView.setText(lists.getValue().toString());
}
showDataInSpinner(list);
}
@Override
public void onCancelled(DatabaseError error) {
// Failed to read value
Log.e("Error", "Failed to read user", error.toException());
}
});
//在微调器中显示数据
public void showDataInSpinner(ArrayList<String> data) {
ArrayAdapter<String> adapter = new ArrayAdapter<>(
this, android.R.layout.simple_spinner_item, data
); //Create the Adapter to set the data
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); //Set the layout resource to create the drop down views.
catSpinner.findViewById(R.id.defaultCats);
catSpinner.setAdapter(adapter); //Set the data to your spinner
}
这是我的 POJO(ListItem 模型)
public class ListItem {
private static final String TAG = "ListItem";
@Exclude
String userid;
private String username,summary,status,details,profession;
private String imageurl;
public ListItem(){}
public ListItem(String username, String summary, String status, String details, String profession, String imageurl) {
this.username = username;
this.summary = summary;
this.status = status;
this.details = details;
this.profession = profession;
this.imageurl = imageurl;
//this.userid = userid;
}
public String getUserid() {
return userid;
}
public void setUserid(String id) {
this.userid = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getSummary() {
return summary;
}
public void setSummary(String summary) {
this.summary = summary;
}
public String getDetails() {
return details;
}
public void setDetails(String details) {
this.details = details;
}
public String getProfession() {
return profession;
}
public void setProfession(String profession) {
this.profession = profession;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getImageurl() {
return imageurl;
}
public void setImageurl(String imageUrl) {
this.imageurl = imageUrl;
}
}
当我在我的 firebase 数据库中手动添加我的职业列表时,我收到了错误消息。但是当firebase db为空时,没有显示错误。我在这里做错了什么?我希望能够显示来自 firebase 的微调器数据。
这就是我尝试检索数据的方式
myRef = mFirebaseDatabase.getReference("Users").child("Professions").child("profession");
myRef.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
ListItem data = dataSnapshot.getValue(ListItem.class);
listItems.add(data);
adapter.notifyDataSetChanged();
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
这是用于显示来自 firebase 的职业的 Category Fragment 方法:
private void getFirebaseData() {
myRef = mFirebaseDatabase.getReference("Users").child("Professions").child("profession");
myRef.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
ProfessionsList data = dataSnapshot.getValue(ProfessionsList.class);
proffItems.add(data);
adapter.notifyDataSetChanged();
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
但我得到了错误:
Can't convert object of type java.lang.String to typecom.appname.appname.ListItem.
Firebase 数据结构的图像截图: Firebase Data screenshot
【问题讨论】:
-
你手动添加什么?
-
我将职业添加为根节点,职业作为子节点,然后在职业子节点中:["SoftwareEngineer","Data Scientists"]....
-
所以我正在尝试检索此数据并将其显示在微调器中。但我的类别片段被拒绝手动添加的数据,错误无法将字符串对象转换为.......
-
你需要单独检索每一个,所以你不会得到那个错误
标签: java android firebase firebase-realtime-database