【发布时间】:2018-02-11 22:03:03
【问题描述】:
这是我第一次在这里提问,所以我需要帮助。
我看到了相关的主题,但它并没有解决我的问题。
我在d.setName(ds.getValue(Dog.class).getName()); 行中遇到错误
这是相关代码:
public void getupdates(DataSnapshot dataSnapshot){
dogies.clear();
if (dataSnapshot.getChildren() == null) {
Toast.makeText(c, "No category", Toast.LENGTH_LONG).show();
}else {
Toast.makeText(c, "they are category", Toast.LENGTH_LONG).show();
}
for (DataSnapshot ds : dataSnapshot.getChildren()) {
Dog d = new Dog();
d.setName(ds.getValue(Dog.class).getName());
d.setUrl(ds.getValue(Dog.class).getUrl());
dogies.add(d);
}
if(dogies.size()>0)
{
customAdapter=new CustomAdapter(c, dogies);
listView.setAdapter((ListAdapter) customAdapter);
}else
{
Toast.makeText(c, "No data", Toast.LENGTH_SHORT).show();
}
}
我得到的输出是 they are category 和 No data 。
这是引用类Dog的来源
public class Dog {
private String name;
private String url;
public Dog() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
}
跟踪 02-11 22:33:04.709 1631-1631/truckstationsa.truckstation E/ActivityThread: 找不到 com.google.android.gms.chimera 的提供商信息 02-11 22:33:04.727 1631-1648/truckstationsa.truckstation E/FirebaseInstanceId:Google Play 服务丢失或没有正确的许可。 02-11 22:33:05.571 1631-1657/truckstationsa.truckstation E/libEGL:load_driver(/system/lib/egl/libGLES_emulation.so):dlopen 失败:库“/system/lib/egl/libGLES_emulation.so”不是成立 02-11 22:33:05.658 1631-1657/truckstationsa.truckstation E/EGL_emulation: tid 1657: eglSurfaceAttrib(1174): 错误 0x3009 (EGL_BAD_MATCH) 02-11 22:33:05.704 1631-1657/truckstationsa.truckstation E/EGL_emulation: tid 1657: eglSurfaceAttrib(1174): 错误 0x3009 (EGL_BAD_MATCH) 02-11 22:33:07.072 1631-1631/truckstationsa.truckstation E/AndroidRuntime: 致命异常: main 进程:truckstationsa.truckstation,PID:1631 com.firebase.client.FirebaseException:无法反弹输入 在 com.firebase.client.DataSnapshot.getValue(DataSnapshot.java:185) 在卡车站sa.truckstation.FirebaseClient.getupdates(FirebaseClient.java:98) 在卡车站sa.truckstation.FirebaseClient$1.onChildAdded(FirebaseClient.java:62) 在 com.firebase.client.core.ChildEventRegistration.fireEvent(ChildEventRegistration.java:61)
完成类 公共类 FirebaseClient {
Context c;
String DB_URL;
ListView listView;
Firebase firebase;
ArrayList<Dog> dogies= new ArrayList<>();
CustomAdapter customAdapter;
public FirebaseClient(Context c, String DB_URL, ListView listView)
{
this.c= c;
this.DB_URL= DB_URL;
this.listView= listView;
Firebase.setAndroidContext(c);
firebase=new Firebase(DB_URL);
}
public void savedata(String name, String url)
{
Dog d= new Dog();
d.setName(name);
d.setUrl(url);
firebase.child("dog").push().setValue(d);
//Toast.makeText(this, "hi", Toast.LENGTH_SHORT).show();
}
public void refreshdata()
{
firebase.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
getupdates(dataSnapshot);
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
getupdates(dataSnapshot);
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});
}
public void getupdates(DataSnapshot dataSnapshot){
dogies.clear();
if (dataSnapshot.getChildren() == null) {
Toast.makeText(c, "No category", Toast.LENGTH_LONG).show();
}else {
Toast.makeText(c, "they are category", Toast.LENGTH_LONG).show();
}for (DataSnapshot ds : dataSnapshot.getChildren()) {
Dog d = new Dog();
d.setName(ds.getValue(Dog.class).getName());
d.setUrl(ds.getValue(Dog.class).getUrl());
dogies.add(ds.getValue(Dog.class));
}
if(dogies.size()>0)
{
customAdapter=new CustomAdapter(c, dogies);
listView.setAdapter((ListAdapter) customAdapter);
}else
{
Toast.makeText(c, "No data", Toast.LENGTH_SHORT).show();
}
}
}
【问题讨论】:
-
错误是无法弹回输入
-
要获得帮助,请更新您的问题以包括:1) 完整的错误消息和堆栈跟踪,2) 加载
DataSnapshot的代码,3) 来自数据库中的位置的 JSON您从(作为文本,没有屏幕截图)阅读。您可以通过单击Firebase Database console 中的“导出 JSON”链接来获取此信息。 -
您也可以在 forEach 循环中使用
dogies.add(ds.getValue(Dog.class));而不是dogies.add(d); -
@RosárioPereiraFernandes 感谢,但未修复):
标签: android firebase firebase-realtime-database