【问题标题】:How to debug this runtime error?如何调试此运行时错误?
【发布时间】:2018-01-03 16:09:38
【问题描述】:

这是一个带有函数loadMenu的部分java文件,当相应的意图打开时,应用程序意外关闭。

private void loadMenu() {
    FirebaseRecyclerAdapter<Category,MenuViewHolder> adapter = new                                     FirebaseRecyclerAdapter<Category, MenuViewHolder>    (Category.class,R.layout.item_menu,MenuViewHolder.class,category) {
            @Override
            protected void populateViewHolder(MenuViewHolder viewHolder, Category model, int position) {

                viewHolder.txtMenuname.setText(model.getName());
                Picasso.with(getBaseContext()).load(model.getImage())
                        .into(viewHolder.imageView);
                final Category clickItem = model;
                viewHolder.setItemClickListener(new ItemClickListener() {
                    @Override
                    public void OnClick(View view, int position, boolean isLongClick) {
                        Toast.makeText(navi.this,""+clickItem.getName(),Toast.LENGTH_SHORT).show();
                }

                    @Override
                    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                    }
                });

            }
        };
          recycle_menu.setAdapter(adapter);
    }

这是我的 MenuviewHolder 类:我刚刚为 firebase 中的图像创建了一个数据库并将其链接到我的应用程序,但它并没有仅显示背景图像。

public class MenuViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

public TextView txtMenuname;
public ImageView imageView;
private ItemClickListener itemClickListener;
public MenuViewHolder(View itemView) {
    super(itemView);

    txtMenuname = (TextView)itemView.findViewById(R.id.menu_name);
    itemView = (ImageView)itemView.findViewById(R.id.menu_image);
    itemView.setOnClickListener(this);
}

public void setItemClickListener(ItemClickListener itemClickListener){
    this.itemClickListener = itemClickListener;
}

@Override
public void onClick(View view) {
    itemClickListener.OnClick(view,getAdapterPosition(),false);

}

}

使用 firebaseUI 将图像和名称链接到应用的适配器代码

public class Category {

    private String Name;
    private String Image;

       public Category(){
        }
        public Category(String name, String image){
            Name = name;
            Image = image;
        }

    public String getName() {
       return Name;
    }

    public void setName(String name) {
        Name = name;
    }


    public String getImage() {
        return Image;
    }

    public void setImage(String image) {
        Image = image;
    }
}

【问题讨论】:

  • viewHolder.imageView 为空..
  • @ItzikSamara 你能建议我如何纠正它吗!!!
  • @AdityaSonel 先生,恕我直言,您可以更新我的代码并发布它
  • 首先使用getContext而不是getBaseContext,因为你必须使用当前运行activitycontext,所以这里getBaseContext是不必要的。其次你得到Exception,因为model.getImage()正在返回null,所以不是通过毕加索加载图像,而是model.getImage()的第一个日志值并检查你为什么得到null值。

标签: java android


【解决方案1】:
private void loadMenu() {
FirebaseRecyclerAdapter<Category,MenuViewHolder>
                          adapter = new                                     
FirebaseRecyclerAdapter <Category, MenuViewHolder>    

 (Category.class,R.layout.item_menu, 
 MenuViewHolder.class,category) {
        @Override
        protected void      


 populateViewHolder(MenuViewHolder   viewHolder,     

 Category model, int position) {


  viewHolder.txtMenuname.setText(model.getName());
  If (model.getimage() != null){          

 Picasso.with(getapplicationcontext()). 
 load (model.getImage())
                    .into(viewHolder.imageView);}
  else {//Toast here}
            final Category clickItem = model;
            viewHolder.setItemClickListener(new      

ItemClickListener() {
                @Override
                public void OnClick(View view, int position,     

boolean isLongClick) {


Toast.makeText(navi.this,""+clickItem.getName(), 
Toast.LEN
 GTH_SHORT).show();
            }

                @Override
                public void onItemClick(AdapterView<?> parent,       

 View view, int position, long id) {

                }
            });

        }
     };
      recycle_menu.setAdapter(adapter);
   }

【讨论】:

  • 当我运行应用程序时,它不会从 firebase 填充图像,但会从 firebase 填充文本。但保存在 firebase 数据库中的 url 是正确的。任何想法。
  • 在这一点上附加调试器 .... if (model.getimage() != null){ // 并检查即将到来的值?
  • 01-01 19:09:11.667 23241-23241/com.k.menu W/ClassMapper:在 com.k.menu.model.Category 类(字段/ setter 区分大小写!)
  • 你在哪里设置图像?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-10
  • 1970-01-01
相关资源
最近更新 更多