2016-11-11 64 views
0

我有一個Fragment類的Android項目:com.google.firebase.database.DatabaseException:無法轉換對象java.lang.String類型的輸入錯誤

package com.example.android.dtuguide; 


import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v7.widget.LinearLayoutManager; 
import android.support.v7.widget.RecyclerView; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TextView; 

import com.firebase.ui.database.FirebaseRecyclerAdapter; 
import com.google.firebase.database.DatabaseReference; 
import com.google.firebase.database.FirebaseDatabase; 


public class NoticesFragment extends Fragment { 

    private RecyclerView mNoticesList; 
    private DatabaseReference mDatabase; 


    public NoticesFragment() { 
     // Required empty public constructor 
    } 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.fragment_notices, container, false); 


     mDatabase = FirebaseDatabase.getInstance().getReference().child("notice"); 
     mNoticesList = (RecyclerView) view.findViewById(R.id.notices_list); 
     mNoticesList.setHasFixedSize(true); 
     mNoticesList.setLayoutManager(new LinearLayoutManager(getActivity())); 

     return view; 
    } 


    @Override 
    public void onStart() { 
     super.onStart(); 

     FirebaseRecyclerAdapter<Notices,NoticeViewHolder> firebaseRecyclerAdapter 
       = new FirebaseRecyclerAdapter<Notices, NoticeViewHolder>(

       Notices.class, 
       R.layout.list_view_row, 
       NoticeViewHolder.class, 
       mDatabase 

     ) { 
      @Override 
      protected void populateViewHolder(NoticeViewHolder viewHolder, Notices model, int position) { 
        viewHolder.setRefertext(model.getRefer()); 
        viewHolder.setDatetext(model.getDate()); 
      } 
     }; 

     mNoticesList.setAdapter(firebaseRecyclerAdapter); 

    } 

    public static class NoticeViewHolder extends RecyclerView.ViewHolder{ 

     View mView; 
     public NoticeViewHolder(View itemView) { 
      super(itemView); 

      mView = itemView; 
     } 
     public void setRefertext(String refertext){ 
      TextView referText = (TextView) mView.findViewById(R.id.refer_text); 
      referText.setText(refertext); 
     } 

     public void setDatetext (String datetext){ 
      TextView dateText = (TextView) mView.findViewById(R.id.date_text); 
      dateText.setText(datetext); 

     } 
    } 




} 

Notices

package com.example.android.dtuguide; 
    public class Notices { 

    private String refer , link ; 
    private String date,count; 

    public Notices(){ 

    } 

    public String getDate() { 
     return date; 
    } 

    public void setDate(String date) { 
     this.date = date; 
    } 

    public String getLink() { 
     return link; 
    } 

    public void setLink(String link) { 
     this.link = link; 
    } 

    public String getRefer() { 
     return refer; 
    } 

    public void setRefer(String refer) { 
     this.refer = refer; 
    } 
} 

當我運行的應用程序,它顯示了以下錯誤:

.example.android.dtuguide E/AndroidRuntime: FATAL EXCEPTION: main 
Process: com.example.android.dtuguide, PID: 8456 
com.google.firebase.database.DatabaseException: Can't convert object of type java.lang.String to type com.example.android.dtuguide.Notices 
    at com.google.android.gms.internal.zzanp.zze(Unknown Source) 
    at com.google.android.gms.internal.zzanp.zzb(Unknown Source) 
    at com.google.android.gms.internal.zzanp.zza(Unknown Source) 
    at com.google.firebase.database.DataSnapshot.getValue(Unknown Source) 
    at com.firebase.ui.database.FirebaseRecyclerAdapter.parseSnapshot(FirebaseRecyclerAdapter.java:147) 
    at com.firebase.ui.database.FirebaseRecyclerAdapter.getItem(FirebaseRecyclerAdapter.java:136) 
    at com.firebase.ui.database.FirebaseRecyclerAdapter.onBindViewHolder(FirebaseRecyclerAdapter.java:176) 
    at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:5471) 
    at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:5504) 
    at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4741) 
    at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4617) 
    at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:1994) 
    at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1390) 
    at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1353) 
    at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:574) 
    at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3028) 
    at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:2906) 
    at android.support.v7.widget.RecyclerView.consumePendingUpdateOperations(RecyclerView.java:1482) 
    at android.support.v7.widget.RecyclerView.access$400(RecyclerView.java:147) 
    at android.support.v7.widget.RecyclerView$1.run(RecyclerView.java:294) 
    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858) 
    at android.view.Choreographer.doCallbacks(Choreographer.java:670) 
    at android.view.Choreographer.doFrame(Choreographer.java:603) 
    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844) 
    at android.os.Handler.handleCallback(Handler.java:746) 
    at android.os.Handler.dispatchMessage(Handler.java:95) 
    at android.os.Looper.loop(Looper.java:148) 
    at android.app.ActivityThread.main(ActivityThread.java:5443) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 

我試着搜索一些修復,但沒有任何工作。如果有人能幫我理解問題是什麼,並且如果可能的話發佈修復,我會很感激。

謝謝!

+0

你的堆棧跟蹤似乎關閉屏幕完全縮進。請問你可以不要主管嗎?一個很好的問題的一部分是讓你的聽衆易於閱讀。 – halfer

+0

請在控制檯中包含您的數據庫的屏幕截圖。該代碼顯示正確,但可能會有一個額外的字符串節點在附近。 – vzsg

回答

0

可能是你的錯誤是在你的適配器,在這裏:

FirebaseRecyclerAdapter<Notices,NoticeViewHolder> firebaseRecyclerAdapter 
       = new FirebaseRecyclerAdapter<Notices, NoticeViewHolder>(

       Notices.class, 
       R.layout.list_view_row, 
       NoticeViewHolder.class, 
       mDatabase <- you are passing a DatabaseReference 

     ) 

你可能需要您的mDatabase改變後一些深層次的故障排除與Notices

+0

這很好,我經過一些深刻的故障排除之後自己解決了這個問題, theres是通知構造函數方法和我從firebase接收的JSON文件的問題, 糾正了我的JSON文件和瞧! –

0

相關的東西,那裏有與聲明的構造問題方法和JSON文件,我從firebase收到,糾正了我的JSON文件,瞧!

2

我得到的答案爲此創造DatabaseReference另一個參考,並呼籲孩子到Databasereference enter image description here

+0

感謝@Tarun的幫助,但是問題出在JSON文件上,這些文件是我提供給我的應用程序的。糾正爲我做的工作。 ! –

相關問題