Java 当我尝试将firebase数据库中的数据添加到firebaseViewHolder时,Android应用程序一直停止
我正在开发一个食谱应用程序。 我的数据结构如下:Java 当我尝试将firebase数据库中的数据添加到firebaseViewHolder时,Android应用程序一直停止,java,android,firebase,Java,Android,Firebase,我正在开发一个食谱应用程序。 我的数据结构如下: Reference - users -53 -movies -id1 (-name -rating -ingredients(list) -recipe -photo) -id2 (....) 数据添加正确,但当我使用以下代码进行检索时,应用程序停止。我的模型课是食谱 我需要创建一个网格结构
Reference
- users
-53
-movies
-id1
(-name
-rating
-ingredients(list)
-recipe
-photo)
-id2 (....)
数据添加正确,但当我使用以下代码进行检索时,应用程序停止。我的模型课是食谱
package foodelicious.com.foodfinal;
public class MainActivity extends AppCompatActivity {
private FloatingActionButton fab;
ScaleAnimation shrinkAnim;
private RecyclerView mRecyclerView;
private StaggeredGridLayoutManager mLayoutManager;
private TextView tvNoRecipes;
private ImageView DPoster;
private TextView DMovieName,DIngredients,DRecipeTitle,DRecipe;
private RatingBar Drate;
//Getting reference to Firebase Database
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference mDatabaseReference = database.getReference();
private static final String userId = "53";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Initializing our Recyclerview
mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
tvNoRecipes = (TextView) findViewById(R.id.tv_no_recipes);
DPoster=(ImageView) findViewById(R.id.Dposter);
DIngredients=(TextView) findViewById(R.id.Ding);
//scale animation to shrink floating actionbar
shrinkAnim = new ScaleAnimation(1.15f, 0f, 1.15f, 0f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
if (mRecyclerView != null) {
//to enable optimization of recyclerview
mRecyclerView.setHasFixedSize(true);
}
//using staggered grid pattern in recyclerview
mLayoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
mRecyclerView.setLayoutManager(mLayoutManager);
//Say Hello to our new FirebaseUI android Element, i.e., FirebaseRecyclerAdapter
FirebaseRecyclerAdapter<Recipe,RecipeViewHolder> adapter = new FirebaseRecyclerAdapter<Recipe, RecipeViewHolder>(
Recipe.class,
R.layout.recipe_board_item,
RecipeViewHolder.class,
//referencing the node where we want the database to store the data from our Object
mDatabaseReference.child("users").child(userId).child("movies").getRef()
) {
@Override
protected void populateViewHolder(final RecipeViewHolder viewHolder, Recipe model, int position) {
if(tvNoRecipes.getVisibility()== View.VISIBLE){
tvNoRecipes.setVisibility(View.GONE);
}
viewHolder.tvRecipeName.setText(model.getRecipeName());
viewHolder.ratingBar.setRating(model.getRecipeRating());
Picasso.with(MainActivity.this).load(model.getRecipePoster()).into(viewHolder.ivRecipePoster);
viewHolder.ivRecipePoster.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
setContentView(R.layout.recipe_details);
}
});
}
};
mRecyclerView.setAdapter(adapter);
fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
getSupportFragmentManager().beginTransaction()
.replace(R.id.frame_container, new AddRecipeFragment())
.addToBackStack(null)
.commit();
//animation being used to make floating actionbar disappear
shrinkAnim.setDuration(400);
fab.setAnimation(shrinkAnim);
shrinkAnim.start();
shrinkAnim.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
//changing floating actionbar visibility to gone on animation end
fab.setVisibility(View.GONE);
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
}
});
}
@Override
public void onBackPressed() {
super.onBackPressed();
if (fab.getVisibility() == View.GONE)
fab.setVisibility(View.VISIBLE);
}
//ViewHolder for our Firebase UI
public static class RecipeViewHolder extends RecyclerView.ViewHolder{
TextView tvRecipeName;
RatingBar ratingBar;
ImageView ivRecipePoster;
public RecipeViewHolder(View v) {
super(v);
tvRecipeName = (TextView) v.findViewById(R.id.iv_dish_name);
ratingBar = (RatingBar) v.findViewById(R.id.rating_bar);
ivRecipePoster = (ImageView) v.findViewById(R.id.iv_dish_poster);
}
}
}
package foodicious.com.foodfinal;
公共类MainActivity扩展了AppCompatActivity{
私人浮动按钮制造厂;
规模化收缩动物;
私人回收视图mRecyclerView;
私人部门经理mLayoutManager;
私有文本视图tvNoRecipes;
私用影像浏览者;
private TextView DMovieName、DingElements、DrecipeTle、DRecipe;
私人评级杆;
//获取对Firebase数据库的引用
FirebaseDatabase=FirebaseDatabase.getInstance();
DatabaseReference mDatabaseReference=database.getReference();
私有静态最终字符串userId=“53”;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化我们的回收视图
mRecyclerView=(RecyclerView)findViewById(R.id.my\u recycler\u视图);
tvNoRecipes=(文本视图)findViewById(R.id.tv\u no\u食谱);
DPoster=(ImageView)findViewById(R.id.DPoster);
dingElements=(TextView)findViewById(R.id.Ding);
//缩放动画以缩小浮动动作栏
收缩动画=新缩放动画(1.15f,0f,1.15f,0f,Animation.RELATIVE\u TO\u SELF,0.5f,Animation.RELATIVE\u TO\u SELF,0.5f);
if(mRecyclerView!=null){
//启用recyclerview的优化
mRecyclerView.setHasFixedSize(true);
}
//在recyclerview中使用交错网格模式
mLayoutManager=新的StaggedGridLayoutManager(2,StaggedGridLayoutManager.VERTICAL);
mRecyclerView.setLayoutManager(mllayoutmanager);
//向我们新的FirebaseUI android元素问好,即FirebaseRecyclerAdapter
FirebaseRecyclerAdapter适配器=新的FirebaseRecyclerAdapter(
配方类,
R.布局。配方板项目,
RecipeViewer.class,
//引用希望数据库存储来自对象的数据的节点
mDatabaseReference.child(“用户”).child(用户ID).child(“电影”).getRef()
) {
@凌驾
受保护的空白填充视图支架(最终RecipeView支架,配方模型,内部位置){
if(tvNoRecipes.getVisibility()==View.VISIBLE){
tvNoRecipes.setVisibility(View.GONE);
}
viewHolder.tvripeName.setText(model.getRecipeName());
viewHolder.ratingBar.setRating(model.getRecipeRating());
Picasso.with(MainActivity.this).load(model.getRecipePoster())到(viewHolder.ivRecipePoster)中;
viewHolder.ivRecipePoster.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
setContentView(R.layout.recipe_详细信息);
}
});
}
};
mRecyclerView.setAdapter(适配器);
fab=(FloatingActionButton)findViewById(R.id.fab);
fab.setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图v){
getSupportFragmentManager().beginTransaction()
.更换(R.id.frame_容器,新添加RecipeFragment())
.addToBackStack(空)
.commit();
//用于使浮动动作栏消失的动画
收缩动物集期(400);
制作setAnimation(ShrinkAniman);
shrinkAnim.start();
shrinkAnim.setAnimationListener(新建Animation.AnimationListener()){
@凌驾
onAnimationStart上的公共无效(动画){
}
@凌驾
onAnimationEnd上的公共无效(动画){
//将浮动动作栏可见性更改为动画结束时的状态
工厂设置可见性(视图已消失);
}
@凌驾
onAnimationRepeat上的公共无效(动画){
}
});
}
});
}
@凌驾
public void onBackPressed(){
super.onBackPressed();
if(fab.getVisibility()==View.GONE)
工厂设置可见性(视图可见);
}
//Firebase用户界面的视图持有者
公共静态类RecipeViewHolder扩展了RecyclerView.ViewHolder{
TextView-tRecipeName;
比率杆比率杆;
ImageView-ivRecipePoster;
公共RecipeView文件夹(视图五){
超级(五);
tRecipeName=(TextView)v.findViewById(R.id.iv_dish_name);
ratingBar=(ratingBar)v.findViewById(R.id.rating_bar);
ivRecipePoster=(ImageView)v.findViewById(R.id.iv_dish_海报);
}
}
}
public class Recipe ... {
public Recipe() {
//
}
}