2017-08-22 1 views
0

Je suis en train d'afficher des données de mon show base de données Firebase à Firebase Recyclerview, Cette ma base de donnéesFirebase retrive données

enter image description here

Et j'essaie d'utiliser le même code de tutoriel de

Firebase UI

Je suis essayer d'obtenir ce résultat enter image description here

Je suis assez nouveau sur Android et la programmation en général, donc toute aide serait appréciée. Voici le code pertinent.

PostlistFragment

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    mActivity = getActivity(); 

    final Dialog mDialog = new Dialog(mActivity, R.style.NewDialog); 
    mDialog.addContentView(
      new ProgressBar(mActivity), 
      new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT) 
    ); 
    mDialog.setCancelable(true); 
    mDialog.show(); 

    // Set up Layout Manager, reverse layout 
    LinearLayoutManager mManager = new LinearLayoutManager(mActivity); 
    mManager.setReverseLayout(true); 
    mManager.setStackFromEnd(true); 
    mRecycler.setLayoutManager(mManager); 

    // Set up FirebaseRecyclerAdapter with the Query 
    Query postsQuery = getQuery(mDatabase); 
    mAdapter = new FirebaseRecyclerAdapter<PostMainboard, MainboardViewHolder>(PostMainboard.class, R.layout.mainboard_list, MainboardViewHolder.class, postsQuery) { 
     @Override 
     public void onDataChanged() { 
      super.onDataChanged(); 
      mDialog.dismiss(); 
     } 

     @Override 
     protected void populateViewHolder(final MainboardViewHolder viewHolder, final PostMainboard model, final int position) { 
      final DatabaseReference postRef = getRef(position); 


      viewHolder.itemView.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        Intent intent = new Intent(mActivity, MainboardDetailActivity.class); 
        intent.putExtra(MainboardDetailActivity.EXTRA_POST_KEY, postRef.getKey()); 
        startActivity(intent); 
       } 
      }); 
     } 
    }; 
    mRecycler.setAdapter(mAdapter); 
} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    if (mAdapter != null) { 
     mAdapter.cleanup(); 
    } 
} 
public abstract Query getQuery(DatabaseReference databaseReference); 

et le résultat de mon activité de détail a obtenu même pas montrer tous

enter image description here

Voici mon détail Code d'activité

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.view_mainboard_detail); 

    mBodyView = (TextView)findViewById(R.id.post_detail); 
    mAuthorView = (TextView)findViewById(R.id.txt_author); 
    mTitleView = (TextView)findViewById(R.id.post_topic); 
    mDateView = (TextView)findViewById(R.id.post_date_time); 
    mCommentsRecycler = (RecyclerView) findViewById(R.id.recycler_comments); 
    mCommentsRecycler.setLayoutManager(new LinearLayoutManager(this)); 
    mCommentField = (EditText) findViewById(R.id.comment_field); 
    Button mCommentButton = (Button) findViewById(R.id.button_post_comment); 
    mCommentButton.setOnClickListener(this); 

    // Get post key from intent 
    String mPostKey = getIntent().getStringExtra(EXTRA_POST_KEY); 
    if (mPostKey == null) { 
     throw new IllegalArgumentException("Must pass EXTRA_POST_KEY"); 
    } 
    // Initialize Database 
    mPostReference = FirebaseDatabase.getInstance().getReference().child("mainboard").child(mPostKey); 
    mCommentsReference = FirebaseDatabase.getInstance().getReference().child("cm-mainboard").child(mPostKey); 


} 

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

    // Add value event listener to the post 
    ValueEventListener postListener = new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      // Get Post object and use the values to update the UI 
      PostMainboard post = dataSnapshot.getValue(PostMainboard.class); 
      User user = dataSnapshot.getValue(User.class); 

      mAuthorView.setText(user.uid); 
      mTitleView.setText(post.postTopic); 
      mBodyView.setText(post.postDetail); 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 
      // Getting Post failed, log a message 
      Log.w(TAG, "loadPost:onCancelled", databaseError.toException()); 
      Toast.makeText(MainboardDetailActivity.this, "Failed to load post.", Toast.LENGTH_SHORT).show(); 
     } 
    }; 
    mPostReference.addValueEventListener(postListener); 

    // Keep copy of post listener so we can remove it when app stops 
    mPostListener = postListener; 

    // Listen for comments 
    mAdapter = new CommentAdapter(this, mCommentsReference); 
    mCommentsRecycler.setAdapter(mAdapter); 
} 

@Override 
public void onStop() { 
    super.onStop(); 
    if (mPostListener != null) { 
     mPostReference.removeEventListener(mPostListener); 
    } 
    mAdapter.cleanupListener(); 
} 

post classe

public class PostMainboard{ 
public String uid; 
public String auther; 
public String postTopic; 
public String postDetail; 
public String postImageUrl; 
public String postID; 
private String postlatlon; 
public long timeCreated; 

public PostMainboard(){ 

} 

public PostMainboard(String uid, String auther , String postTopic , String postDetail,long timeCreated) 
{ 
    this.uid = uid; 
    this.auther = auther; 
    this.postTopic = postTopic; 
    this.postDetail = postDetail; 
    this.postImageUrl = postImageUrl; 
    this.postID = postID; 
    this.timeCreated = timeCreated; 
} 

@Exclude 
public Map<String, Object> toMap() { 
    HashMap<String, Object> result = new HashMap<>(); 
    result.put("mb_id", uid); 
    result.put("mb_auther" , auther); 
    result.put("mb_title", postTopic); 
    result.put("mb_body", postDetail); 
    result.put("mb_create", timeCreated); 
    return result; 
} 

classe User

public class User { 
public String uid; 
public String user_fname; 
private String user_lname; 
private String user_idcard; 
private String email; 
private String user_phone; 

public User(){ 

} 


public User(String uid ,String user_fname, String user_lname, String user_idcard, String email, String user_phone) { 
    this.uid = uid; 
    this.user_fname = user_fname; 
    this.user_lname = user_lname; 
    this.user_idcard = user_idcard; 
    this.email = email; 
    this.user_phone = user_phone; 
} 

ViewHolder

public class MainboardViewHolder extends RecyclerView.ViewHolder { 
private TextView authorView; 
private TextView bodyView; 
private TextView titleView; 
private TextView dateView; 

public MainboardViewHolder(View itemView) { 
    super(itemView); 
    authorView = (TextView)itemView.findViewById(R.id.txt_author); 
    bodyView = (TextView)itemView.findViewById(R.id.post_detail); 
    titleView = (TextView)itemView.findViewById(R.id.post_topic); 
    dateView = (TextView)itemView.findViewById(R.id.post_date_time); 
} 

public void bindToPost (PostMainboard postMainboard) 
{ 
    authorView.setText(postMainboard.auther); 
    bodyView.setText(postMainboard.postDetail); 
    titleView.setText(postMainboard.postTopic); 
    dateView.setText((int) postMainboard.timeCreated); 
} 

fragment Mainboard

public class MainboardFragment extends PostListFragment{ 


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

@Override 
public Query getQuery(DatabaseReference databaseReference) { 
    return databaseReference.child("mainboard").orderByKey(); 
} 

Je suis tout le monde beaucoup d'espoir me aider je ne comprends pas trop

Merci

Répondre

0

Il semble que vous ayez oublié de remplir le ViewHolder (MainboardViewHolder).

Dans "PostlistFragment" sous "populateViewHolder" vous devez appeler viewHolder.bindToPost (model) pour lier les données à vos textviews et ainsi de suite.

Essayez ceci:

@Override 
    protected void populateViewHolder(final MainboardViewHolder viewHolder, final PostMainboard model, final int position) { 
     final DatabaseReference postRef = getRef(position); 

     viewHolder.bindToPost(model); 

     viewHolder.itemView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent intent = new Intent(mActivity, MainboardDetailActivity.class); 
       intent.putExtra(MainboardDetailActivity.EXTRA_POST_KEY, postRef.getKey()); 
       startActivity(intent); 
      } 
     }); 
    } 

En outre, votre méthode getQuery est abstraite et vide. Il devrait probablement ressembler à ceci:

@Override 
public Query getQuery(DatabaseReference databaseReference) { 
    return databaseReference.getReference("mainboard").orderByKey(); 
} 

je dis « probablement » parce que je ne vois pas comment vous avez initialisé mDatabase. À l'avenir, s'il vous plaît coller le code complet si vous ne voulez pas de meilleures et plus rapides réponses.

+0

Je ne pense pas comme ceci monsieur je dois montrer des données im essayer à votre code mais ne peux pas –

+0

Mon code fournit juste un contexte et est intentionnellement laissé incomplet. Mais si vous postez le code pour MainboardViewHolder.java, je peux vous donner un exemple complet. – henrikenblom

+0

Désolé monsieur im poster mon observateur déjà plz vérifier à nouveau –