Glide在Recyclerview Adapter crash app中的实现,
Implementation of Glide in Recyclerview Adapter crash app,
尝试在 recyclerView 应用内实现 Glide 时崩溃。
Logcat 说
W/ResourceType: No package identifier when getting name for resource number 0x00000000
V/studio.deploy: Package broadcast exit hook { cmd=3, time=75125210000000, thread=2 }
Fixing application and activity contexts
W/ResourceType: No package identifier when getting name for resource number 0x00000000
E/RecyclerView: No adapter attached; skipping layout
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.tc, PID: 26232
java.lang.IllegalArgumentException: You must pass in a non null View
at com.bumptech.glide.GenericRequestBuilder.into(GenericRequestBuilder.java:685)
at com.bumptech.glide.DrawableRequestBuilder.into(DrawableRequestBuilder.java:457)
at com.example.tc.TCAdapter.onBindViewHolder(TCAdapter.java:44)
at com.example.tc.TCAdapter.onBindViewHolder(TCAdapter.java:22)
我的实现代码是
Glide.with( context ).load( tcImages.get( position ).getFullName() ).into( holder.imageView );
我的完整适配器代码是
public class TCAdapter extends RecyclerView.Adapter<TCAdapter.MyViewHolder> {
List<TCImages> tcImages;
Context context;
ImageView imageView;
public TCAdapter(List<TCImages> tcImages, Context context){
this.tcImages = tcImages;
this.context = context;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from( context );
View view = inflater.inflate( R.layout.item_tc_recycler, parent, false );
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
holder.textView.setText( tcImages.get( position ).getEmail() );
Glide.with( context ).load( tcImages.get( position ).getFullName() ).into( holder.imageView );
// Glide.with( context ).load( "https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png" ).into( holder.imageView );
// Toast.makeText(context, tcImages.get( position ).getFullName().toString(), Toast.LENGTH_LONG).show();
}
@Override
public int getItemCount() {
return tcImages.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder {
TextView textView;
ImageView imageView;
public MyViewHolder(@NonNull View itemView) {
super( itemView );
textView = (TextView) itemView.findViewById( R.id.txtItem );
imageView = (ImageView) itemView.findViewById( R.id.imageView );
}
}
}
尝试直接粘贴图像地址字符串,但它崩溃了
您的图片视图可能有问题,看起来 imageView = (ImageView) itemView.findViewById( R.id.imageView )
可能为 null,请检查 id 是否正确以及视图是否不为 null
取决于您的 Logcat 您正在从 ViewHolder 将图像加载到 NULL ImageView 请确保 [=13= ImageView 的 ]Id 在 R.layout.item_tc_recycler 中是正确的
在此处绑定 imageView 时
imageView = (ImageView) itemView.findViewById( R.id.imageView );
尝试在 recyclerView 应用内实现 Glide 时崩溃。 Logcat 说
W/ResourceType: No package identifier when getting name for resource number 0x00000000
V/studio.deploy: Package broadcast exit hook { cmd=3, time=75125210000000, thread=2 }
Fixing application and activity contexts
W/ResourceType: No package identifier when getting name for resource number 0x00000000
E/RecyclerView: No adapter attached; skipping layout
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.tc, PID: 26232
java.lang.IllegalArgumentException: You must pass in a non null View
at com.bumptech.glide.GenericRequestBuilder.into(GenericRequestBuilder.java:685)
at com.bumptech.glide.DrawableRequestBuilder.into(DrawableRequestBuilder.java:457)
at com.example.tc.TCAdapter.onBindViewHolder(TCAdapter.java:44)
at com.example.tc.TCAdapter.onBindViewHolder(TCAdapter.java:22)
我的实现代码是
Glide.with( context ).load( tcImages.get( position ).getFullName() ).into( holder.imageView );
我的完整适配器代码是
public class TCAdapter extends RecyclerView.Adapter<TCAdapter.MyViewHolder> {
List<TCImages> tcImages;
Context context;
ImageView imageView;
public TCAdapter(List<TCImages> tcImages, Context context){
this.tcImages = tcImages;
this.context = context;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from( context );
View view = inflater.inflate( R.layout.item_tc_recycler, parent, false );
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
holder.textView.setText( tcImages.get( position ).getEmail() );
Glide.with( context ).load( tcImages.get( position ).getFullName() ).into( holder.imageView );
// Glide.with( context ).load( "https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png" ).into( holder.imageView );
// Toast.makeText(context, tcImages.get( position ).getFullName().toString(), Toast.LENGTH_LONG).show();
}
@Override
public int getItemCount() {
return tcImages.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder {
TextView textView;
ImageView imageView;
public MyViewHolder(@NonNull View itemView) {
super( itemView );
textView = (TextView) itemView.findViewById( R.id.txtItem );
imageView = (ImageView) itemView.findViewById( R.id.imageView );
}
}
}
尝试直接粘贴图像地址字符串,但它崩溃了
您的图片视图可能有问题,看起来 imageView = (ImageView) itemView.findViewById( R.id.imageView )
可能为 null,请检查 id 是否正确以及视图是否不为 null
取决于您的 Logcat 您正在从 ViewHolder 将图像加载到 NULL ImageView 请确保 [=13= ImageView 的 ]Id 在 R.layout.item_tc_recycler 中是正确的 在此处绑定 imageView 时
imageView = (ImageView) itemView.findViewById( R.id.imageView );