【问题标题】:Android: Reading objects from Firebase causes application to crashAndroid:从 Firebase 读取对象会导致应用程序崩溃
【发布时间】:2018-01-07 11:34:50
【问题描述】:

简介:我正在尝试构建一个显示书籍信息的 android 应用程序(使用 Google 书籍 API)。我最近在应用程序中添加了 firebase。 此时我可以登录或注册到应用程序,我可以搜索书籍(带有搜索视图),并且我为从查询创建的 ListView 中列出的每本书添加了一个按钮。我为按钮添加了功能它遵循:按钮(如果按下)应该将当前书籍(在 Listview 中)添加到 FireBase。

我的下一步是检索用户在另一个名为 CatalogActivity

的活动中添加的所有书籍
public class CatalogActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState)
{
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_catalog);
  GridView catalogListView = (GridView) findViewById(R.id.CatalogGridList);

  final List<BookObject> books = new ArrayList<BookObject>();

    FirebaseDatabase database = FirebaseDatabase.getInstance();
    DatabaseReference databaseReference = database.getReference();
    databaseReference.child("books").addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            Iterable<DataSnapshot> children = dataSnapshot.getChildren();
            for (DataSnapshot child : children) {
                BookObject book = child.getValue(BookObject.class);
                books.add(book);
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

    CatalogAdapter catalogAdapter = new CatalogAdapter(this, books);
    catalogListView.setAdapter(catalogAdapter);

    }
 }

为了更好地理解,这是 Firebase 数据标签:

当我运行应用并单击 CatalogActivity 时,应用会崩溃。

我使用过断点调试,得出以下结论:

-正确获取数据库实例和引用

-正确获取所有BookObjects的快照(dataSnapshot

-第一个子快照(child)正确获取(无法判断第一本书是否也添加到books

-再次按 F8:应用程序在循环方法处跳转到 Looper 类,我的 应用程序崩溃

什么可能导致应用崩溃?

BookObject 类的要点:BookObject

崩溃日志:

07-31 22:40:38.308 15567-15567/com.example.android.booktrade_v10 E/AndroidRuntime: FATAL EXCEPTION: main
                                                                               Process: com.example.android.booktrade_v10, PID: 15567
                                                                               com.google.firebase.database.DatabaseException: Found two getters or fields with conflicting case sensitivity for property: authors
                                                                                   at com.google.android.gms.internal.zh.zzhe(Unknown Source)
                                                                                   at com.google.android.gms.internal.zh.<init>(Unknown Source)
                                                                                   at com.google.android.gms.internal.zg.zzf(Unknown Source)
                                                                                   at com.google.android.gms.internal.zg.zzb(Unknown Source)
                                                                                   at com.google.android.gms.internal.zg.zza(Unknown Source)
                                                                                   at com.google.firebase.database.DataSnapshot.getValue(Unknown Source)
                                                                                   at com.example.android.booktrade_v10.CatalogActivity$1.onDataChange(CatalogActivity.java:40)
                                                                                   at com.google.android.gms.internal.to.zza(Unknown Source)
                                                                                   at com.google.android.gms.internal.vj.zzHX(Unknown Source)
                                                                                   at com.google.android.gms.internal.vp.run(Unknown Source)
                                                                                   at android.os.Handler.handleCallback(Handler.java:751)
                                                                                   at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                                   at android.os.Looper.loop(Looper.java:154)
                                                                                   at android.app.ActivityThread.main(ActivityThread.java:6316)
                                                                                   at java.lang.reflect.Method.invoke(Native Method)
                                                                                   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:872)
                                                                                   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:762)

非常感谢任何帮助。

【问题讨论】:

  • Firebase causes application to crash,firebase 没有。
  • 发布您的崩溃日志?
  • 现在发布。
  • 请加你pojo类

标签: android firebase firebase-realtime-database


【解决方案1】:

将您在普通旧 Java 对象 (POJO) 类中的声明从

public String Title;
public String Subtitle;
public String Authors;
public String ImageURL;

到这里

public String title;
public String subtitle;
public String authors;
public String imageURL;

如果它不起作用,请告诉我。

【讨论】:

  • 谢谢@UmarZaii
  • @CatalinGhita 没问题 :)
【解决方案2】:

你需要做的是将你的文件名改为小写,如下所示:

public String title;
public String subtitle;
public String authors;
public String imageURL;
private String pushId;

除此之外,您还需要像这样更改所有 setter 和 getter:

public String getTitle() {return title;}
public void setTitle(String title) {this.title = title;}

public String getSubtitle() {return subtitle;}
public void setSubtitle(String subtitle) {this.subtitle = subtitle;}

public String getAuthors() {return authors;}
public void setAuthors(String authors) {this.authors = authors;}

public String getImageURL() {return imageURL;}
public void setImageURL(String imageURL) {this.imageURL = imageURL;}

public String getPushId() {return pushId;}
public void setPushId(String pushId) {this.pushId = pushId;}

Cătă,此更改肯定会解决您的问题;)

【讨论】:

  • 感谢 Alex,抱歉回复晚了。我终于自己解决了,我不得不说我完全按照你说的做了,所以即使我在你回复之前就做了,我也必须接受你的回答。感谢您的宝贵时间。
  • 我可以在聊天中问你一个问题吗?谢谢@AlexMamo
  • 当然。让我们使用聊天。
  • 我的代表不允许我创建新的聊天室。如果您愿意创建一个并发送邀请
猜你喜欢
  • 2018-09-23
  • 2018-02-11
  • 2015-08-13
  • 1970-01-01
  • 2014-05-08
  • 2013-12-02
  • 2014-09-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多