Search code examples
androidandroid-studioandroid-asynctaskandroid-download-manager

Download image through URL and show it on the Screen when clicked on the button


Am trying to display an image on the emulator, when the button is clicked. How it works is, I've provided a URL of an image, so when the button is clicked the corresponding image should be shown on the emulator, but am not getting any image here.

Java Code

package com.example.download;

import androidx.appcompat.app.AppCompatActivity;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.concurrent.ExecutionException;

public class MainActivity extends AppCompatActivity {

    ImageView imageView;

    public void downLoad(View view)
    {

        ImgDownloader task = new ImgDownloader();
        Bitmap myImage;
        try {
            myImage=task.execute("https://upload.wikimedia.org/wikipedia/en/a/aa/Bart_Simpson_200px.png").get();
            imageView.setImageBitmap(myImage);
        } catch (Exception e) {
            e.printStackTrace();
        }

        Log.i("Button","Pressed");
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        imageView = (ImageView) findViewById(R.id.imageView);

    }
    public static class ImgDownloader 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 myBitmap = BitmapFactory.decodeStream(inputStream);
                return myBitmap;

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

Layout

2020-09-09 07:52:03.931 13065-13129/com.example.download W/System.err: java.net.UnknownHostException: Unable to resolve host "upload.wikimedia.org": No address associated with hostname
2020-09-09 07:52:03.932 13065-13129/com.example.download W/System.err:     at java.net.Inet6AddressImpl.lookupHostByName(Inet6AddressImpl.java:156)
2020-09-09 07:52:03.934 13065-13129/com.example.download W/System.err:     at java.net.Inet6AddressImpl.lookupAllHostAddr(Inet6AddressImpl.java:103)
2020-09-09 07:52:03.934 13065-13129/com.example.download W/System.err:     at java.net.InetAddress.getAllByName(InetAddress.java:1152)
2020-09-09 07:52:03.935 13065-13129/com.example.download W/System.err:     at com.android.okhttp.Dns$1.lookup(Dns.java:41)
2020-09-09 07:52:03.936 13065-13129/com.example.download W/System.err:     at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:178)
2020-09-09 07:52:03.936 13065-13129/com.example.download W/System.err:     at com.android.okhttp.internal.http.RouteSelector.nextProxy(RouteSelector.java:144)
2020-09-09 07:52:03.938 13065-13129/com.example.download W/System.err:     at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:86)
2020-09-09 07:52:03.938 13065-13129/com.example.download W/System.err:     at com.android.okhttp.internal.http.StreamAllocation.findConnection(StreamAllocation.java:176)
2020-09-09 07:52:03.938 13065-13129/com.example.download W/System.err:     at com.android.okhttp.internal.http.StreamAllocation.findHealthyConnection(StreamAllocation.java:128)
2020-09-09 07:52:03.939 13065-13129/com.example.download W/System.err:     at com.android.okhttp.internal.http.StreamAllocation.newStream(StreamAllocation.java:97)
2020-09-09 07:52:03.940 13065-13129/com.example.download W/System.err:     at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:289)
2020-09-09 07:52:03.940 13065-13129/com.example.download W/System.err:     at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:232)
2020-09-09 07:52:03.941 13065-13129/com.example.download W/System.err:     at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:465)
2020-09-09 07:52:03.942 13065-13129/com.example.download W/System.err:     at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:131)
2020-09-09 07:52:03.942 13065-13129/com.example.download W/System.err:     at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.connect(DelegatingHttpsURLConnection.java:90)
2020-09-09 07:52:03.943 13065-13129/com.example.download W/System.err:     at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:30)
2020-09-09 07:52:03.943 13065-13129/com.example.download W/System.err:     at com.example.download.MainActivity$ImgDownloader.doInBackground(MainActivity.java:55)
2020-09-09 07:52:03.944 13065-13129/com.example.download W/System.err:     at com.example.download.MainActivity$ImgDownloader.doInBackground(MainActivity.java:48)
2020-09-09 07:52:03.946 13065-13129/com.example.download W/System.err:     at android.os.AsyncTask$3.call(AsyncTask.java:394)
2020-09-09 07:52:03.947 13065-13129/com.example.download W/System.err:     at java.util.concurrent.FutureTask.run(FutureTask.java:266)
2020-09-09 07:52:03.947 13065-13129/com.example.download W/System.err:     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:305)
2020-09-09 07:52:03.948 13065-13129/com.example.download W/System.err:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
2020-09-09 07:52:03.949 13065-13129/com.example.download W/System.err:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
2020-09-09 07:52:03.950 13065-13129/com.example.download W/System.err:     at java.lang.Thread.run(Thread.java:923)
2020-09-09 07:52:03.951 13065-13129/com.example.download W/System.err: Caused by: android.system.GaiException: android_getaddrinfo failed: EAI_NODATA (No address associated with hostname)
2020-09-09 07:52:03.953 13065-13129/com.example.download W/System.err:     at libcore.io.Linux.android_getaddrinfo(Native Method)
2020-09-09 07:52:03.954 13065-13129/com.example.download W/System.err:     at libcore.io.ForwardingOs.android_getaddrinfo(ForwardingOs.java:73)
2020-09-09 07:52:03.954 13065-13129/com.example.download W/System.err:     at libcore.io.BlockGuardOs.android_getaddrinfo(BlockGuardOs.java:202)
2020-09-09 07:52:03.954 13065-13129/com.example.download W/System.err:     at libcore.io.ForwardingOs.android_getaddrinfo(ForwardingOs.java:73)
2020-09-09 07:52:03.955 13065-13129/com.example.download W/System.err:     at java.net.Inet6AddressImpl.lookupHostByName(Inet6AddressImpl.java:135)
2020-09-09 07:52:03.956 13065-13129/com.example.download W/System.err:  ... 23 more
2020-09-09 07:52:03.958 13065-13065/com.example.download I/Button: Pressed
2020-09-09 07:52:03.964 13065-13065/com.example.download I/Choreographer: Skipped 1207 frames!  The application may be doing too much work on its main thread.
2020-09-09 07:52:03.988 13065-13117/com.example.download I/OpenGLRenderer: Davey! duration=20137ms; Flags=0, IntendedVsync=18050067477460, Vsync=18070184143322, OldestInputEvent=9223372036854775807, NewestInputEvent=0, HandleInputStart=18070186401860, AnimationStart=18070186512760, PerformTraversalsStart=18070187352960, DrawStart=18070187859860, SyncQueued=18070190416860, SyncStart=18070194709860, IssueDrawCommandsStart=18070195078060, SwapBuffers=18070198414760, FrameCompleted=18070209020960, DequeueBufferDuration=1898300, QueueBufferDuration=3621000, GpuCompleted=0, 

Manifest

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.download">

    <uses-permission android:name="android.permission.INTERNET"/>
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"
        android:usesCleartextTraffic="true"
        android:networkSecurityConfig="@xml/network_security_config">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

network_security_config.xml

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">secure.example.com</domain>
    </domain-config>
</network-security-config>

XML file

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <ImageView
            android:id="@+id/imageView"
            android:layout_width="match_parent"
            android:layout_height="759dp"
            android:layout_below="@+id/button"
            android:layout_marginTop="-4dp"
            android:layout_marginBottom="5dp" />

        <Button
            android:id="@+id/button"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:onClick="downLoad"
            android:text="Button" />
    </RelativeLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

Solution

  • EAI_NODATA (No address associated with hostname)

    Usually means that you dont have network access. So please check your wifi or network connection