java - AppCompatImageView 无法转换为 com.squareup.picasso.Target
问题描述
我正在尝试将 Firebase 数据库中的图像上传到帖子布局中,每当我上传图像时,应用程序就会崩溃并且出现此错误:
java.lang.ClassCastException: androidx.appcompat.widget.AppCompatImageView cannot be cast to com.squareup.picasso.Target
at com.example.app.MainActivity$3.onBindViewHolder(MainActivity.java:164)
at com.example.app.MainActivity$3.onBindViewHolder(MainActivity.java:159)
at com.firebase.ui.database.FirebaseRecyclerAdapter.onBindViewHolder(FirebaseRecyclerAdapter.java:149)
at androidx.recyclerview.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:7065)
at androidx.recyclerview.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:7107)
at androidx.recyclerview.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:6012)
at androidx.recyclerview.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:6279)
at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6118)
at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6114)
at androidx.recyclerview.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2303)
at androidx.recyclerview.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1627)
at androidx.recyclerview.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1587)
at androidx.recyclerview.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:665)
at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:4134)
at androidx.recyclerview.widget.RecyclerView.dispatchLayout(RecyclerView.java:3851)
at androidx.recyclerview.widget.RecyclerView.consumePendingUpdateOperations(RecyclerView.java:1897)
at androidx.recyclerview.widget.RecyclerView$1.run(RecyclerView.java:414)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:966)
at android.view.Choreographer.doCallbacks(Choreographer.java:790)
at android.view.Choreographer.doFrame(Choreographer.java:721)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:951)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
我不知道这意味着什么,我还没有找到有类似问题的人。这是我的styles.xml
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Base.Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="color">#0F2926</item>
<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</item>
</style>
最后,这是我认为发生错误的涉及毕加索的代码:
private void DisplayAllUsersPosts()
{
FirebaseRecyclerOptions<Posts> options =
new FirebaseRecyclerOptions.Builder<Posts>()
.setQuery(PostsRef, Posts.class)
.build();
FirebaseRecyclerAdapter<Posts, PostsViewHolder> firebaseRecyclerAdapter =
new FirebaseRecyclerAdapter<Posts, PostsViewHolder> (options)
{
@Override
protected void onBindViewHolder(@NonNull PostsViewHolder holder, int position, @NonNull Posts model)
{
holder.Description.setText(model.getDescription());
Picasso.get().load(model.getImage()).into((Target) holder.Image);
}
@NonNull
@Override
public PostsViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType)
{
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.all_posts_layout, viewGroup, false);
PostsViewHolder viewHolder = new PostsViewHolder(view);
return viewHolder;
}
};
firebaseRecyclerAdapter.startListening();
postList.setAdapter(firebaseRecyclerAdapter);
}
解决方案
您收到以下错误:
java.lang.ClassCastException: androidx.appcompat.widget.AppCompatImageView 不能转换为 com.squareup.picasso.Target
在以下代码行:
Picasso.get().load(model.getImage()).into((Target) holder.Image);
因为您试图将 type 的对象强制转换为 typeAppCompatImageView
的对象Target
,这在 Java 中实际上是不可能的。要解决此问题,只需删除不必要的强制转换:
Picasso.get().load(model.getImage()).into(holder.Image);
推荐阅读
- python - 帕拉米科谈惠普供应
- python - 无法按照我的意愿调整列表
- r - 重新排列多个 GGPLOT2 图表和移动/调整比例时遇到问题
- python - Python子进程模块等待方法
- scala - 澄清为什么我不能通过它的子类型覆盖使用泛型类参数的方法
- sql-server - SSDT - 排除某些模式以及未命名的约束
- mongodb - 使用 Go 获取 MongoDB 中的所有模型树子节点
- django-models - 从 pandas 数据框中快速更新 django 模型对象
- python - Python字符串格式中的“f”和“F”有区别吗?
- amazon-web-services - 在 AWS EMR 中运行 spark sql 查询