Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当我尝试将firebase数据库中的数据添加到firebaseViewHolder时,Android应用程序一直停止_Java_Android_Firebase - Fatal编程技术网

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 (....)
数据添加正确,但当我使用以下代码进行检索时,应用程序停止。我的模型课是食谱

  • 我需要创建一个网格结构来显示所有的菜肴。我认为这段代码应该达到这个目的,但事实并非如此。我做错了什么

  • 当用户单击某道菜时,应显示该菜的配方和其他详细信息。如何在firebase中执行这种选择性检索

    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_海报);
    }
    }
    }
    
  • LOGCAT 10-05 16:43:08.462 30349-30479/foodicious.com.foodfinal D/FA:已连接到远程服务 10-05 16:43:08.463 30349-30479/foodicious.com.foodfinal V/FA:处理排队服务任务:1 10-05 16:43:13.592 30349-30479/foodicious.com.foodfinal V/FA:不活动,正在断开与服务的连接 10-05 16:43:21.549 30349-30354/foodicious.com.foodfinal I/art:执行部分代码缓存收集,代码=29KB,数据=29KB 10-05 16:43:21.550 30349-30354/foodicious.com.foodfinal I/art:在代码缓存收集之后,代码=29KB,数据=29KB 10-05 16:43:21.550 30349-30354/foodicious.com.foodfinal I/art:将代码缓存容量增加到128KB 10-05 16:43:21.617 30349-30349/foodelicious.com.foodfinal D/AndroidRuntime:关闭虚拟机 10-05 16:43:21.625 30349-30349/foodicious.com.f
    public class Recipe ... {
    
       public Recipe() {
           //
       }
    
    
    }