通过URL下载图像,并在单击按钮时将其显示在屏幕上

问题描述

单击按钮时,试图在模拟器上显示图像。它的工作方式是,我提供了图像的URL,因此,单击按钮时,相应的图像应显示在模拟器上,但此处未得到任何图像。

Java代码

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;
        }
    }
}

布局

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,

清单

<?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文件

<?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>

解决方法

EAI_NODATA(没有与主机名关联的地址)

通常表示您没有网络访问权限。因此,请检查您的wifi或网络连接

,

您的网络似乎不可用。根据{{​​3}},尝试重新连接wifi连接或重新启动模拟器。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...