Android:从Firebase读取对象会导致应用程序崩溃

时间:2017-07-31 19:13:36

标签: android firebase firebase-realtime-database

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

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

的活动中添加的所有图书
url(r'^(P<user_name>\w+)/$', views.your_view),

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

当我运行应用程序并点击 CatalogActivity 时,应用程序崩溃。

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

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

- 正确获取所有BookObjects的快照(def your_view(request, user_name): user = get_object_or_404(username=user_name) context = { '':user.info } return render(request, 'your_app/template.html')

- 正确获取第一个子快照(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); } } )(无法判断第一本书是否也添加到dataSnapshot

再次压制F8:app以循环方式跳转到Looper Class,我的应用程序崩溃

可能导致应用崩溃的原因是什么?

child课程的要点:BookObject

崩溃日志:

books

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

中更改Plain Old Java Object(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;

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

答案 1 :(得分:2)

您需要做的是使用小写字母更改文件名:

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

除此之外,您还需要更改所有的定位器和吸气剂:

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ă,这种变化肯定会解决您的问题;)