2017-07-31 78 views
2

Intro:我正尝试构建一个显示有关图书信息的Android应用程序(使用Google books API)。我最近向应用程序添加了firebase。 在这一刻我可以登录或注册到应用程序,我可以搜索图书(使用搜索视图),并且我已经为查询中创建的ListView中列出的每本图书添加了一个按钮。我在按钮中添加了功能如下所示:按钮(如果按下)应该将当前书籍(在Listview中)添加到FireBase中。Android:从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); 

    } 
} 

为了更好地理解这是火力地堡数据标签: enter image description here

当我运行的应用程序,我点击CatalogActivity该应用程序崩溃。

我已经使用的调试与磨合点,我得到了以下结论:

-database实例和参考得到正确

所有BookObjects的-snapshot正确地获得(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) 

任何帮助,高度赞赏。

+0

“Firebase导致应用程序崩溃”,firebase没有。 – Ibrahim

+0

发布您的崩溃日志? –

+0

现在发布。 –

回答

2

你需要做的是用小写像这样的改变你的Fileds的名字:

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

除此之外,你也需要改变所有的getter和setter方法是这样的:

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

+0

谢谢Alex,对于迟到的回复感到抱歉。我终于自己解决了这个问题,我不得不说我的确如你所说的那样做了,即使我在你的回答之前做了,我必须接受你的回答。感谢您的时间。 –

+0

不客气!干杯! –

+0

我可以在聊天中问你一个问题吗?谢谢@AlexMamo –

2

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

改变你在普通Java对象(PO​​JO)类声明本

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

让我知道,如果它不工作。

+0

谢谢@UmarZaii –

+0

@CatalinGhita没问题:) – UmarZaii

相关问题