【问题标题】:abstract method "void com.squareup.picasso.Callback.onError(java.lang.Exception)抽象方法“void com.squareup.picasso.Callback.onError(java.lang.Exception)
【发布时间】:2018-07-04 07:15:49
【问题描述】:

我是新的 Devoloper,我想使用 Picasso 从 FirebaseDatabase 加载图像。但是我收到了这个错误;

抽象方法“void com.squareup.picasso.Callback.onError(java.lang.Exception)

我不明白这是什么意思。因为我已经在使用回调方法。这是我的适配器;

 private void myAdapter() {
        Query query = FirebaseDatabase.getInstance()
                .getReference().child("Category");
        FirebaseRecyclerOptions<Category> options = new FirebaseRecyclerOptions.Builder<Category>().setQuery(query, Category.class).build();
        adapter = new FirebaseRecyclerAdapter<Category, MenuViewHolder>(options) {
            @NonNull
            @Override
            public MenuViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
                View view = LayoutInflater.from(parent.getContext())
                        .inflate(R.layout.menu_item, parent, false);
                return new MenuViewHolder(view);
            }

            @Override
            protected void onBindViewHolder(@NonNull MenuViewHolder viewHolder, int position, @NonNull Category model) {
                viewHolder.txtMenuName.setText(model.getName());
                Picasso p = Picasso.get();
                p.load(model.image).tag(this).into(viewHolder.menu_image, new Callback() {
                    @Override
                    public void onSuccess() {
                        Toast.makeText(Home.this, "Welcome", Toast.LENGTH_SHORT).show();
                    }

                    @Override
                    public void onError(Exception e) {
                        Toast.makeText(Home.this, "Failed", Toast.LENGTH_SHORT).show();
                        e.getMessage();
                    }
                });


                final Category clickItem = model;
                viewHolder.setItemClickListener(new ItemClickListener() {
                    @Override
                    public void onClick(View view, int position, boolean isLongClick) {
                        Toast.makeText(Home.this, "" + clickItem.getName(), Toast.LENGTH_SHORT).show();
                        Intent food_intent = new Intent(Home.this, FoodList.class);
                        //Because categoryId is key , so we just get key of this item
                        food_intent.putExtra(getCategoryId, adapter.getRef(position).getKey());
                        food_intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        startActivity(food_intent);
                    }
                });
            }
        };
      adapter.startListening();
    }

我从互联网上搜索过,但找不到任何有用的事情要做。请帮助我,谢谢:)

这是我的模型课;

public class Category {

    private String name;
    public String image;

    public Category() {
    }

    public Category(String name, String image) {
        this.name = name;
        this.image = image;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setImage(String image) {
        this.image = image;
    }
}

这是我的FirebaseDatabase constructor

【问题讨论】:

    标签: android callback adapter picasso onerror


    【解决方案1】:

    您的回调工作正常,但无法加载图像。你能告诉我们更多关于“model.image”的信息吗?尝试用硬编码的 URL 替换它,你确定它可以工作。

    【讨论】:

    • 我想是的,它工作正常。我有模型,它包含图像 URL 和名称。我正在从 FirebaseDatabase 加载。我已经为这个项目工作了 1 个月。直到最后 3 天我一直面临这个问题。通常它工作正常。我将编辑有关模型类的问题,并在再次检查后请
    • 已添加先生请检查
    • 您是否手动检查过 URL 在浏览器中是否仍然有效?如果没有,请这样做。或者你最近更新了毕加索的版本?然后你可能想把它改回来,因为你可以在这里看到毕加索的最新版本之一似乎在某些设备上导致了这个错误。 github.com/square/picasso/issues/1928
    • sir 更新了所有 url 但得到相同的错误:( 使用毕加索的最新版本。get() 不适用于以前的版本。我已经检查过你提到的链接,但我以前见过。让我告诉你在应用程序运行时发生了什么。首先,所有图像都出现了,正如你所看到的 onSucces 方法,我可以得到 Toast 消息。“欢迎”。几秒钟后运行 onError 方法并再次得到 toast 消息和“失败!”。应用程序崩溃出去!
    • 由于链接中描述的问题是最新版本,我建议尝试旧版本。回调只能是成功或错误,不能两者兼而有之。由于您使用的是适配器,我猜有些图像无法加载,即。某些 URL 必须无效或为空。这两个我不知道,对不起。
    【解决方案2】:

    我希望这对你有用。

    这样试试,

    Picasso.with(this).load(model.image).resize(400,400).into(viewHolder.menu_image, new Callback() {
                @Override
                public void onSuccess() {
    
                }
    
                @Override
                public void onError() {
                   // onError Load Default Image.
                }
            });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-13
      • 1970-01-01
      • 1970-01-01
      • 2012-09-21
      • 1970-01-01
      • 1970-01-01
      • 2013-09-12
      相关资源
      最近更新 更多