2017-12-18 77 views
-1

其firebase错误我无法获得它请帮助我解决并告诉我为什么发生它。 对不起,英语,并尝试解决它无法将java.lang.String类型的对象转换为类型 - Firebase错误

E/AndroidRuntime: FATAL EXCEPTION: main 
       Process: com.example.kunalgharate.weedon, PID: 16793 
       com.google.firebase.database.DatabaseException: Can't convert object of type java.lang.String to type com.example.kunalgharate.weedon.Friends 
        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.firebase.ui.database.ClassSnapshotParser.parseSnapshot(ClassSnapshotParser.java:22) 
        at com.firebase.ui.database.ObservableSnapshotArray.getObject(ObservableSnapshotArray.java:160) 
        at com.firebase.ui.database.CachingObservableSnapshotArray.getObject(CachingObservableSnapshotArray.java:40) 
        at com.firebase.ui.database.FirebaseRecyclerAdapter.getItem(FirebaseRecyclerAdapter.java:180) 
        at com.firebase.ui.database.FirebaseRecyclerAdapter.onBindViewHolder(FirebaseRecyclerAdapter.java:217) 
        at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:6482) 
        at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:6515) 
        at android.support.v7.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:5458) 
        at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5724) 
        at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5563) 
        at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5559) 
        at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2229) 
        at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1556) 
        at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1516) 
        at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:608) 
        at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3693) 
        at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3410) 
        at android.support.v7.widget.RecyclerView.consumePendingUpdateOperations(RecyclerView.java:1710) 
        at android.support.v7.widget.RecyclerView$1.run(RecyclerView.java:346) 
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:871) 
        at android.view.Choreographer.doCallbacks(Choreographer.java:683) 
        at android.view.Choreographer.doFrame(Choreographer.java:616) 
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:857) 
        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:6123) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:757) 

申请终止。

活动主要

import android.content.Context; 
import android.content.Intent; 
import android.os.Build; 
import android.support.design.widget.TabLayout; 
import android.support.v4.view.ViewPager; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.support.v7.widget.LinearLayoutManager; 
import android.support.v7.widget.RecyclerView; 
import android.support.v7.widget.Toolbar; 
import android.util.Log; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.TextView; 
import android.widget.Toast; 

import com.firebase.ui.database.FirebaseRecyclerAdapter; 
import com.google.firebase.auth.FirebaseAuth; 
import com.google.firebase.database.DatabaseReference; 
import com.google.firebase.database.FirebaseDatabase; 
import com.squareup.picasso.Picasso; 

import de.hdodenhof.circleimageview.CircleImageView; 

public class MainActivity extends AppCompatActivity { 
    private FirebaseAuth mAuth; 
    RecyclerView mSubsList; 
    DatabaseReference mFriendsDatabase; 
    DatabaseReference mUsersDatabase; 
    private String mCurrent_user_id; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     Toolbar toolbar = findViewById(R.id.main_page_toolbar); 
     setSupportActionBar(toolbar); 
     getSupportActionBar().setTitle("WeedON"); 
     mAuth = FirebaseAuth.getInstance(); 
     mCurrent_user_id = mAuth.getCurrentUser().getUid(); 
     mSubsList =findViewById(R.id.subscribes_list); 
     mSubsList.setHasFixedSize(true); 
     mSubsList.setLayoutManager(new LinearLayoutManager(this)); 


     mFriendsDatabase = FirebaseDatabase.getInstance().getReference().child("subscribers").child(mCurrent_user_id); 
     mFriendsDatabase.keepSynced(true); 
     mUsersDatabase = FirebaseDatabase.getInstance().getReference().child("Users"); 
     mUsersDatabase.keepSynced(true); 




    } 

    private void signOut() { 
     mAuth.signOut(); 
    } 


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

     FirebaseRecyclerAdapter<Friends,MainViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Friends,MainViewHolder>(


       Friends.class, 
       R.layout.single_service_layout, 
       MainViewHolder.class, 
       mFriendsDatabase 
       ) 
     { 
      @Override 
      protected void populateViewHolder(MainViewHolder viewHolder, Friends model, int position) { 



      } 
     }; 

     mSubsList.setAdapter(firebaseRecyclerAdapter); 
     } 





    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     super.onCreateOptionsMenu(menu); 

     getMenuInflater().inflate(R.menu.main_menu, menu); 

     return true; 
    } 


    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     super.onOptionsItemSelected(item); 

     if(item.getItemId() == R.id.main_logout_btn){ 

      // mUserRef.child("online").setValue(ServerValue.TIMESTAMP); 

      signOut(); 
      Intent intent = new Intent(this, LoginActivity.class); 
      startActivity(intent); 
      finish(); 
     // sendToStart(); 

     } 

     if(item.getItemId() == R.id.main_settings_btn){ 

      Intent settingsIntent = new Intent(MainActivity.this, SettingsActivity.class); 
      startActivity(settingsIntent); 

     } 

     if(item.getItemId() == R.id.main_all_btn){ 

      Intent settingsIntent = new Intent(MainActivity.this, AllServicesActivity.class); 
      startActivity(settingsIntent); 

     } 

     return true; 
    } 

    public static class MainViewHolder extends RecyclerView.ViewHolder{ 

     View mView; 

     public MainViewHolder(View itemView) { 
      super(itemView); 

      mView =itemView; 
     } 


    } 



} 

数据库截图

enter image description here

它不显示布局错误或代码错误我该怎么办?

回答

0

要显示这些消息,请使用以下代码:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference(); 
DatabaseReference uidRef = rootRef.child("subscribers").child(mCurrent_user_id); 
ValueEventListener eventListener = new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     for(DataSnapshot ds : dataSnapshot.getChildren()) { 
      String message = ds.getValue(String.class); 
      Log.d("TAG", message); 
     } 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) {} 
}; 
uidRef.addListenerForSingleValueEvent(eventListener); 
0

通过看你的数据库中,我可以看到你的mFriendsDatabase DatabseReference指出了一些“串”的价值观和你告诉你的firebaseRecyclerAdapter那些是类型为“朋友”,这就是抛出异常的原因。大多数情况下,您可能会在将值保存到数据库时犯了错误,而不是保存Friends对象,而是保存一些字符串值。但如果情况并非如此,则可以更改firebaseRecyclerAdapter到此...

FirebaseRecyclerAdapter<String,MainViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<String,MainViewHolder>(


      String.class, 
      R.layout.single_service_layout, 
      MainViewHolder.class, 
      mFriendsDatabase 
      ) 
    { 
     @Override 
     protected void populateViewHolder(MainViewHolder viewHolder, String mString, int position) { 
      Log.d("TAG",mString); 
     } 
    }; 

    mSubsList.setAdapter(firebaseRecyclerAdapter); 
相关问题