0

I'm currently learning android with Rob Percival's tutorial. I passed the image download part, but when I start the app, it crashes when I press the Download button.

My mainactivity java file:

public class MainActivity extends AppCompatActivity {
    ImageView img;
    public void DownloadTask(View view)
    {
        ImageDownloader dlTask = new ImageDownloader();
        Bitmap myImg;
        try
        {
            myImg = dlTask.execute("https://www.android.com/static/img/android.png").get();
            img.setImageBitmap(myImg);
        }
        catch (InterruptedException e)
        {
            e.printStackTrace();
        }
        catch (ExecutionException e)
        {
            e.printStackTrace();
        }
    }

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


        super.onCreate(savedInstanceState);
        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]);
                HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                connection.connect();
                InputStream inputstream = connection.getInputStream();
                Bitmap bitmap = BitmapFactory.decodeStream(inputstream);
                return bitmap;
            }
            catch (MalformedURLException e1)
            {
                e1.printStackTrace();
            }
            catch (IOException e1)
            {
                e1.printStackTrace();
            }

            return null;
        }
    }
}

and I also gave INTERNET permission:

    <uses-permission android:name="android.permission.INTERNET" />

Logs:

E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: com.swit.imagedownload, PID: 4410
                  java.lang.IllegalStateException: Could not execute method for android:onClick
                      at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293)
                      at android.view.View.performClick(View.java:4780)
                      at android.view.View$PerformClick.run(View.java:19866)
                      at android.os.Handler.handleCallback(Handler.java:739)
                      at android.os.Handler.dispatchMessage(Handler.java:95)
                      at android.os.Looper.loop(Looper.java:135)
                      at android.app.ActivityThread.main(ActivityThread.java:5254)
                      at java.lang.reflect.Method.invoke(Native Method)
                      at java.lang.reflect.Method.invoke(Method.java:372)
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
                   Caused by: java.lang.reflect.InvocationTargetException
                      at java.lang.reflect.Method.invoke(Native Method)
                      at java.lang.reflect.Method.invoke(Method.java:372)
                      at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)
                      at android.view.View.performClick(View.java:4780) 
                      at android.view.View$PerformClick.run(View.java:19866) 
                      at android.os.Handler.handleCallback(Handler.java:739) 
                      at android.os.Handler.dispatchMessage(Handler.java:95) 
                      at android.os.Looper.loop(Looper.java:135) 
                      at android.app.ActivityThread.main(ActivityThread.java:5254) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at java.lang.reflect.Method.invoke(Method.java:372) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 
                   Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.setImageBitmap(android.graphics.Bitmap)' on a null object reference
                      at com.swit.imagedownload.MainActivity.DownloadTask(MainActivity.java:25)
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at java.lang.reflect.Method.invoke(Method.java:372) 
                      at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288) 
                      at android.view.View.performClick(View.java:4780) 
                      at android.view.View$PerformClick.run(View.java:19866) 
                      at android.os.Handler.handleCallback(Handler.java:739) 
                      at android.os.Handler.dispatchMessage(Handler.java:95) 
                      at android.os.Looper.loop(Looper.java:135) 
                      at android.app.ActivityThread.main(ActivityThread.java:5254) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at java.lang.reflect.Method.invoke(Method.java:372) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 
I/Process: Sending signal. PID: 4410 SIG: 9
Application terminated.
Charuක
  • 12,953
  • 5
  • 50
  • 88
Amir Amini
  • 51
  • 1
  • 1
  • 7
  • 1
    Possible duplicate of [Android - Null pointer Exception - findViewById()](http://stackoverflow.com/questions/19078461/android-null-pointer-exception-findviewbyid) – weston Feb 04 '17 at 14:32

2 Answers2

1

This is how you fix your problem, You should setContentView() before findViewById()

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    img = (ImageView) findViewById(R.id.imageView);
T.S
  • 911
  • 8
  • 24
0

You are getting an NPE due to ImageView img;

You initialized it before setContentView(R.layout.activity_main);

Charuක
  • 12,953
  • 5
  • 50
  • 88