【问题标题】:Recycler view not showing any data from firebase回收站视图未显示来自 firebase 的任何数据
【发布时间】:2018-04-19 15:42:27
【问题描述】:

我正在尝试使用 firebase 数据库和 firebase 存储构建一个简单的博客应用程序。数据已添加到 firebase,但未显示在我的回收视图中。

这是我的 firebase 数据库的快照:

我试图在 PostActivity.java 文件中的 firebase 数据库中发布数据:

package naim.google.com.photographyblog;

import android.app.ProgressDialog;
import android.content.Intent;
import android.net.Uri;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.Toast;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
import com.google.firebase.storage.FirebaseStorage;
import com.google.firebase.storage.StorageReference;
import com.google.firebase.storage.UploadTask;

public class PostActivity extends AppCompatActivity {

    private ImageButton mImageButton;
    private EditText mPostTitle;
    private EditText mPostDescription;
    private Button mSubmitButton;
    private Uri imageUri = null;

    private StorageReference mStorage;
    private DatabaseReference mDatabase;


    private ProgressDialog mProgress;

    private static final int GALLERY_REQUEST = 1;



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

        mStorage = FirebaseStorage.getInstance().getReference();
        mDatabase = FirebaseDatabase.getInstance().getReference().child("Blog");


        mImageButton = findViewById(R.id.imageSelect);
        mPostTitle = findViewById(R.id.titileField);
        mPostDescription = findViewById(R.id.descriptionField);
        mSubmitButton = findViewById(R.id.submitButton);





        mProgress = new ProgressDialog(this);



        mImageButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                Intent galleryIntent = new Intent(Intent.ACTION_PICK);
                galleryIntent.setType("image/*");
                startActivityForResult(galleryIntent , GALLERY_REQUEST);
            }
        });

        mSubmitButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                startPosting();
            }
        });
    }


    private void startPosting()
    {
        final String title_val = mPostTitle.getText().toString().trim();
        final String description_val = mPostDescription.getText().toString().trim();

        mProgress.setMessage("Uploading image...");


        if(!TextUtils.isEmpty(title_val) && !TextUtils.isEmpty(description_val) && imageUri!= null)
        {

            mProgress.show();

            StorageReference filePath = mStorage.child("Blog_Images").child(imageUri.getLastPathSegment());

            filePath.putFile(imageUri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                @Override
                public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {

                    final Uri downloadUri = taskSnapshot.getDownloadUrl();
                    final DatabaseReference newPost = mDatabase.push();
                    newPost.child("title").setValue(title_val);
                    newPost.child("description").setValue(description_val);
                    newPost.child("image").setValue(downloadUri.toString());


                    mProgress.dismiss();

                    startActivity(new Intent(PostActivity.this , MainActivity.class));

                }
            });
        }

    }


    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if(requestCode == GALLERY_REQUEST && resultCode == RESULT_OK)
        {
            imageUri = data.getData();
            mImageButton.setImageURI(imageUri);
        }
    }
}

我尝试将 firebase 数据库中的数据添加到 MainActivity.java 文件中的回收站视图:

package naim.google.com.photographyblog;

import android.content.Context;
import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ImageView;
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.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
import com.squareup.picasso.Picasso;

public class MainActivity extends AppCompatActivity {

    private RecyclerView mBlogList;

    private DatabaseReference mDatabase;

    private DatabaseReference mDatabaseUsers;

    private FirebaseAuth mAuth;
    private FirebaseAuth.AuthStateListener mAuthListner;

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

        mAuth = FirebaseAuth.getInstance();
        mAuthListner = new FirebaseAuth.AuthStateListener() {
            @Override
            public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {

                if(firebaseAuth.getCurrentUser() == null)
                {
                    Intent intent = new Intent(MainActivity.this , LoginActivity.class);
                    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    startActivity(intent);

                }

            }
        };

        mDatabase = FirebaseDatabase.getInstance().getReference().child("Blog");
        mDatabaseUsers = FirebaseDatabase.getInstance().getReference().child("Users");

        mDatabase.keepSynced(true);
        mDatabaseUsers.keepSynced(true);

        mBlogList = findViewById(R.id.blog_list);

        LinearLayoutManager layoutManager = new LinearLayoutManager(this);
        layoutManager.setReverseLayout(true);
        layoutManager.setStackFromEnd(true);

        mBlogList.setHasFixedSize(true);
        mBlogList.setLayoutManager(layoutManager);

        checkUserExist();
    }


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



        mAuth.addAuthStateListener(mAuthListner);



        FirebaseRecyclerAdapter<Blog , BlogViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Blog, BlogViewHolder>(
                Blog.class,
                R.layout.blog_row,
                BlogViewHolder.class,
                mDatabase

        ) {
            @Override
            protected void populateViewHolder(BlogViewHolder viewHolder, Blog model, int position) {


                viewHolder.setTitle(model.getTitle());
                viewHolder.setDescription(model.getDescription());
                viewHolder.setImage(getApplicationContext() , model.getImage());

            }
        };
        mBlogList.setAdapter(firebaseRecyclerAdapter);

    }


    private void checkUserExist()
    {

        if(mAuth.getCurrentUser()!=null)
        {
            final String user_id = mAuth.getCurrentUser().getUid();

            mDatabaseUsers.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {

                    if(!dataSnapshot.hasChild(user_id)){

                        Intent intent = new Intent(MainActivity.this , SetupActivity.class);
                        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                        startActivity(intent);

                    }

                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });
        }

    }


    public static class BlogViewHolder extends RecyclerView.ViewHolder{

        View mView;

        public BlogViewHolder(View itemView) {
            super(itemView);
            mView = itemView;
        }

        public void setTitle(String title){

            TextView post_title = mView.findViewById(R.id.post_title);
            post_title.setText(title);

        }

        public void setDescription(String description){

            TextView post_description = mView.findViewById(R.id.post_description);
            post_description.setText(description);

        }

        public void setImage(Context ctx ,String image) {

            ImageView post_image = mView.findViewById(R.id.post_image);
            Picasso.with(ctx).load(image).into(post_image);

        }

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

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

        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {


        if(item.getItemId()==R.id.action_add)
        {
            startActivity(new Intent(MainActivity.this,PostActivity.class));
        }

        if(item.getItemId() == R.id.action_logout)
        {
            logout();
        }

        return super.onOptionsItemSelected(item);
    }


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

}

运行应用程序并添加数据后,它什么也没显示,这是快照:

【问题讨论】:

  • 并且logcat中没有显示错误或警告
  • 请使用此链接mytrendin.com/…
  • 你的模型类叫什么?
  • 我的模型类是 Blog.java
  • @MdNakibulHassan 我只是在这里猜测,但您的博客下的数据库中有标题、图像、描述吗?

标签: android firebase firebase-realtime-database android-recyclerview


【解决方案1】:

我已经解决了这个问题。问题出在我的 MainActivity.java 文件中。我刚刚从 MainActivity.java 文件中删除了以下行:

mBlogList.setHasFixedSize(true);

删除后,一切正常。

【讨论】:

  • 也适合我!
  • 有什么解释吗?为什么它不适用于该行?
  • 不知道原因,但是当我删除代码时它工作得很好
  • 当我删除它时,它也对我有用。 Android V 7.0 出现问题。 Md Nakibul Hassan,谢谢!
猜你喜欢
  • 1970-01-01
  • 2021-06-18
  • 1970-01-01
  • 2021-08-25
  • 2021-10-01
  • 1970-01-01
  • 2015-02-26
相关资源
最近更新 更多