【问题标题】:imageView setImageBitmap() | null pointer exception [duplicate]图像视图 setImageBitmap() |空指针异常[重复]
【发布时间】:2018-01-25 14:16:12
【问题描述】:

我正在尝试使用 Bitmap 和 ImageView 下载并显示图像。我正在使用带有 url 参数的 AsyncTask,但我总是得到一个

我正在尝试使用 Bitmap 和 ImageView 下载并显示图像。我正在使用带有 url 参数的 AsyncTask,但我总是得到一个

java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“void android.widget.ImageView.setImageBitmap(android.graphics.Bitmap)”

代码:

public class MainActivity extends AppCompatActivity {

 ImageView imageView;

 public void images(View view)
 {

     ImageDownloader task=new ImageDownloader();
     Bitmap myImage;
     try
     {
         myImage=task.execute("https://upload.wikimedia.org/wikipedia/en/a/aa/Bart_Simpson_200px.png").get();

         imageView.setImageBitmap(myImage);     //Here is the part where i am
                                                //Getting exception
     }
     catch (InterruptedException e)
     {
         e.printStackTrace();
     }
     catch (ExecutionException e)
     {
         e.printStackTrace();
     }
 }



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    imageView=(ImageView)findViewById(R.id.myimg);  //imageView

    setContentView(R.layout.activity_main);

}



public class ImageDownloader extends AsyncTask<String,Void,Bitmap>{
    @Override
    protected Bitmap doInBackground(String... urls)
    {
        try {
            URL url=new URL(urls[0]);
            HttpsURLConnection connection=(HttpsURLConnection)url.openConnection();
            connection.connect();
            InputStream inputStream=connection.getInputStream();
            Bitmap bitmap= BitmapFactory.decodeStream(inputStream);
            return bitmap;


        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
}
}

【问题讨论】:

    标签: java android


    【解决方案1】:

    像这样改变行的顺序

    imageView=(ImageView)findViewById(R.id.myimg);  //imageView
    
        setContentView(R.layout.activity_main);
    

     setContentView(R.layout.activity_main);
     imageView=(ImageView)findViewById(R.id.myimg);  //imageView
    

    首先你需要在找到imageview之后设置contentview

    【讨论】:

      【解决方案2】:

      因为您试图在加载视图之前从视图中获取图像,所以更改顺序先加载视图然后获取图像

      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
          imageView=(ImageView)findViewById(R.id.myimg);  //imageView
      }
      

      【讨论】:

        猜你喜欢
        • 2013-09-11
        • 2014-05-18
        • 1970-01-01
        • 1970-01-01
        • 2014-02-04
        • 1970-01-01
        相关资源
        最近更新 更多