Java android AsyncTask和RecyclerView的NullPointerException

Java android AsyncTask和RecyclerView的NullPointerException,java,android,android-recyclerview,nullpointerexception,android-asynctask,Java,Android,Android Recyclerview,Nullpointerexception,Android Asynctask,我有一个AsyncTask类从web下载图像,并将其设置在ImageView(参考) 相关活动代码: 公共类列表采用扩展了AppCompatActivity{ @凌驾 创建时受保护的void(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity\u list\u adoptions); recyclerView=(recyclerView)findViewB

我有一个AsyncTask类从web下载图像,并将其设置在
ImageView
(参考)

相关活动代码:

公共类列表采用扩展了AppCompatActivity{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u list\u adoptions);
recyclerView=(recyclerView)findViewById(R.id.recycler\u视图);
mAdapter=新的PetsAdapter(petList);
RecyclerView.LayoutManager mLayoutManager=新的LinearLayoutManager(getApplicationContext());
recyclerView.setLayoutManager(mLayoutManager);
setItemAnimator(新的DefaultItemAnimator());
recyclerView.setAdapter(mAdapter);
preparePetData();
}
私有void preparePetData(){
DownloadImageTask imgtask=新的DownloadImageTask((ImageView)findViewById(R.id.picture));
imgtask.execute(“https://i.ytimg.com/vi/opKg3fyqWt4/hqdefault.jpg");
mAdapter.notifyDataSetChanged();
}
私有类DownloadImageTask扩展了AsyncTask{
图像视图bmImage;
公共下载ImageTask(ImageView bmImage){
this.bmImage=bmImage;
}
受保护位图doInBackground(字符串…URL){
字符串urldisplay=url[0];
位图mIcon11=null;
试一试{
InputStream in=newjava.net.URL(urldisplay.openStream();
mIcon11=BitmapFactory.decodeStream(in);
}捕获(例外e){
Log.e(“Error”,e.getMessage());
e、 printStackTrace();
}
返回mIcon11;
}
受保护的void onPostExecute(位图结果){
bmImage.setImageBitmap(结果);
}
}
}
错误:

Process: com.example.test3, PID: 8427
    java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.setImageBitmap(android.graphics.Bitmap)' on a null object reference
        at com.example.petadoption.ListAdoptions$DownloadImageTask.onPostExecute(ListAdoptions.java:171)
        at com.example.petadoption.ListAdoptions$DownloadImageTask.onPostExecute(ListAdoptions.java:150)
        at android.os.AsyncTask.finish(AsyncTask.java:695)
        at android.os.AsyncTask.-wrap1(Unknown Source:0)
        at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:712)
        at android.os.Handler.dispatchMessage(Handler.java:105)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6541)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
无法查看整个代码,但消息为空对象。。。
确保在列表采用中定义了bmImage,如findviewbyd(R.id.bmImage),并检查此对象是否存在于id为bmImage的xml中,处理null时要执行的操作:

  • 确保你把名字拼对了
  • 添加if语句以查看何时内容变为空
  • 使用调试器并逐步执行代码,查看对象为null的原因

由于某些原因,bmImage不存在,我建议您查看布局和该类本身,以找到空值

它看起来像您的
bmImage
总是空的。很可能
findViewById(R.id.picture)
始终为空。确保您使用id“picture”定义了ImageView,并且在XML布局文件中没有遗漏plus。
android:id=“@+id/picture”

是的,我对JAVA和android非常陌生(一天大),所以请不要判断x(强烈建议您使用标准图像加载库,例如或@AjahnCharles,我在glide中遇到同样的错误”参数不能为空我的意思是完全替换AsyncTask。您应该从RV适配器/ViewHolder调用Glide。我这样做了,得到了相同的错误bmimage是AsyncTask的局部变量bmimage是AsyncTask的局部变量