android - RecyclerView 没有在我的应用屏幕上显示来自 Firebase 的数据
问题描述
我想使用 recyclerview 在我的应用程序屏幕上显示 firebase 数据。我的应用程序正在运行,没有任何错误,但屏幕上没有显示数据。请帮助这是我的代码:请检查并帮助我使用recyclerview将数据从firebase显示到应用程序屏幕
场地活动.java
package com.cornicore.icccricketworldcup2019;
import android.content.Context;
import android.os.Build;
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.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
import com.firebase.ui.database.FirebaseRecyclerAdapter;
import com.firebase.ui.database.FirebaseRecyclerOptions;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.squareup.picasso.Picasso;
public class VenuesActivity extends AppCompatActivity {
private RecyclerView mBlogList;
private DatabaseReference mDatabase;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_venues);
mDatabase = FirebaseDatabase.getInstance().getReference().child("Venues");
mDatabase.keepSynced(true);
mBlogList = (RecyclerView) findViewById(R.id.myrecyclerview);
mBlogList.setHasFixedSize(true);
mBlogList.setLayoutManager(new LinearLayoutManager(this));
}
FirebaseRecyclerOptions<Blog> options =
new FirebaseRecyclerOptions.Builder<Blog>()
.setQuery(mDatabase, Blog.class)
.build();
@Override
protected void onStart() {
super.onStart();
FirebaseRecyclerAdapter adapter = new FirebaseRecyclerAdapter<Blog, BlogViewHolder>(options) {
@Override
public BlogViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.venue_row, parent, false);
return new BlogViewHolder(view);
}
@Override
protected void onBindViewHolder(BlogViewHolder holder, int position, Blog model) {
// Bind the image_details object to the BlogViewHolder
// ...
holder.setTitle(model.getTitle());
holder.setDesc(model.getDesc());
holder.setImage(getApplicationContext(),model.getImage());
}
};
// FirebaseRecyclerAdapter<Blog,BlogViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Blog, BlogViewHolder>
// (Blog.class,R.layout.venue_row,BlogViewHolder.class,mDatabase) {
// @Override
// protected void onBindViewHolder(@NonNull BlogViewHolder viewHolder, int position, @NonNull Blog model) {
//
// viewHolder.setTitle(model.getTitle());
// viewHolder.setDesc(model.getDesc());
// viewHolder.setImage(getApplicationContext(),model.getImage());
//
// }
//
// @NonNull
// @Override
// public BlogViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
// return null;
// }
// };
mBlogList.setAdapter(adapter);
}
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 = (TextView) mView.findViewById(R.id.post_title);
post_title.setText(title);
}
public void setDesc(String desc){
TextView post_desc = (TextView) mView.findViewById(R.id.post_desc);
post_desc.setText(desc);
}
public void setImage(Context ctx, String image){
ImageView post_Image = (ImageView) mView.findViewById(R.id.post_image);
Picasso.with(ctx).load(image).into(post_Image);
}
}
}
场地活动.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".VenuesActivity">
<android.support.v7.widget.RecyclerView
android:id="@+id/myrecyclerview"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v7.widget.RecyclerView>
</RelativeLayout>
博客.java
package com.cornicore.icccricketworldcup2019;
public class Blog {
private String title;
private String desc;
private String image;
public Blog(String title, String desc, String image) {
this.title = title;
this.desc = desc;
this.image = image;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image;
}
public Blog(){
}
}
场地_row.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_margin="7dp"
app:cardCornerRadius="12dp"
android:elevation="90dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="248dp"
android:orientation="vertical"
android:background="#121111">
<ImageView
android:id="@+id/post_image"
android:layout_width="match_parent"
android:layout_height="180dp"
android:scaleType="centerCrop"/>
<TextView
android:id="@+id/post_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="20dp"
android:text="POST TITLE"
android:textColor="#fff"/>
<TextView
android:id="@+id/post_desc"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="POST DESC"
android:textColor="#fff"/>
</LinearLayout>
</android.support.v7.widget.CardView>
构建.gradel
apply plugin: 'com.android.application'
android {
compileSdkVersion 27
defaultConfig {
applicationId "com.cornicore.icccricketworldcup2019"
minSdkVersion 17
targetSdkVersion 27
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support:recyclerview-v7:27.1.1'
implementation 'com.android.support:design:27.1.1'
implementation 'com.android.support:cardview-v7:27.1.1'
implementation 'com.android.support.constraint:constraint-layout:1.1.0'
implementation 'com.google.firebase:firebase-core:15.0.2'
implementation 'com.google.firebase:firebase-messaging:15.0.2'
implementation 'com.google.firebase:firebase-database:15.0.1'
implementation 'com.google.firebase:firebase-storage:15.0.2'
implementation 'com.google.firebase:firebase-auth:15.1.0'
implementation 'com.firebaseui:firebase-ui-database:3.2.2'
implementation 'com.squareup.picasso:picasso:2.5.2'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}
apply plugin: 'com.google.gms.google-services'
解决方案
设置适配器后添加这些行:
mBlogList.setAdapter(adapter);
mFirebaseAdapter.startListening();
推荐阅读
- c# - 升级后缺少 ClosedXml.Excel HasDuplicates 扩展方法
- java - 当接口自动装配与实现时会发生什么
- python - 按列计算连续行和组的距离
- javascript - 在 webpack 应用程序中使用 dist 和 public 文件夹的最佳方法是什么
- robotframework - 基于机器人框架表的测试
- laravel - Laravel 雄辩的“belongsToMany”与“belongsToMany”
- java - 抽象类方法上的Spring自定义注释切入点
- mysql - 加入相同的 Table.Field 两次,但用于不同的记录
- java - 如何窗口化kafka流事件?
- c# - Xamarin 数据绑定 MVVM 未在 UI 上呈现文本内容