2017-07-31 115 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

相關問題