熟悉Android---使用imageView加载网络图片

补充

使用Glide框架只要一行代码就可以搞定图片的显示,功能更强大。都2022年了,有好用的框架那必须要用啊。Glide框架使用请移步至郭霖大神的博客:
https://blog.csdn.net/guolin_blog/article/details/53759439

前言

Android 4.0 以后的版本,UI线程不允许有耗时操作,所以请求网络图片需要运行在子线程;

加载图片的代码参考:
https://zhidao.baidu.com/question/537762079.html

效果图

(待补充)

图片链接:

https://img-home.csdnimg.cn/images/20201124032511.png

示例图片:
在这里插入图片描述

布局文件

MainActivity.xml

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/img1"/>
                
LinearLayout>

整体思路

第一步:
在UI线程定义 网络图片链接;
第二步:
新建子线程请求图片,请求结果为bitmap;
第三步:
在UI线程将图片加载出来;

MainActivity.java

public class MainActivity extends Activity {

    private ImageView imageView;

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

        imageView = findViewById(R.id.img1);

        URL url = null;
        try {
            url = new URL("https://img-home.csdnimg.cn/images/20201124032511.png");
            requestImg(url);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void requestImg(final URL imgUrl)
    {
        new Thread(new Runnable() {
            @Override
            public void run() {
                Bitmap bitmap = null;
                try {
                    bitmap = BitmapFactory.decodeStream(imgUrl.openStream());

                    showImg(bitmap);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }
    private void showImg(final Bitmap bitmap){
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                imageView.setImageBitmap(bitmap);
            }
        });
    }
}

联想

第一步和第二应该可以合并在子线程中;
将bitmap声明为全局变量,第三步应该可以精简:

 try {
            url = new URL("https://img-home.csdnimg.cn/images/20201124032511.png");
            requestImg(url);
        } catch (Exception e) {
            e.printStackTrace();
        }
 imageView.setImageBitmap(bitmap);

这里我没有测试过,只是一些想法;

权限

在 Mainfest.xml文件中加入网络权限申请;


安卓 9 加强了保密性,导致无法进行非加密的 http 网络请求

解决方法:

在 AndroidManifest.xml 的 application 标签中新加:

android:usesCleartextTraffic=“true”

重新运行即可;

你可能感兴趣的:(Android,安卓,android,android,studio,java)