androidj基础:从网上下载图片

一、布局文件

设置界面,添加一个ImageView,和两个Button按钮,设置其属性及id

 <ImageView
       android:id="@+id/ImageView"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:layout_centerInParent="true"
       android:background="#ffffff"

       />
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    >
   <Button
       android:id="@+id/bt1"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_weight="1"
       android:text="下载图片"
       />

   <Button
       android:id="@+id/bt2"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_weight="1"
       android:layout_toRightOf="@+id/bt1"

       android:text="读取图片"
       />

二、声明网络权限

因为使用网络功能需要添加权限,修改AndroidManifest.xml文件添加权限声明语句。

 <uses-permission android:name="android.permission.INTERNET"/>
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.administrator.httpexe">
    <uses-permission android:name="android.permission.INTERNET"/>

</manifest>

三、编辑ManActivity.java文件。

import...//import语句自动生成,略public class MainActivity extends AppCompatActivity {

    ImageView imageView;
    Button button;
    Button button1; @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        imageView = (ImageView) findViewById(R.id.ImageView);
        button = (Button) findViewById(R.id.bt1);
        button1=(Button)findViewById(R.id.bt2);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                MyTask task = new MyTask();//创建异步任务对象
                task.execute("https://www.baidu.com/img/bd_logo1.png");//创建下载任务
            }
        });
        button1.setOnClickListener(new View.OnClickListener() {//读取图片

            @Override
            public void onClick(View v) {
                Bitmap bmp=null;
                try{
                    FileInputStream fis= openFileInput("a.png");
                    bmp=BitmapFactory.decodeStream(fis);
                    if(bmp!=null) {
                        imageView.setImageBitmap(bmp);
                    }
                }catch (Exception ex) {
                }
            }
        });
    }
        public class MyTask extends AsyncTask<String, Void, Bitmap> {   //bmp位图,泛型
        @Override
        protected Bitmap doInBackground(String... params) { //真正的下载
            String urlStr = params[0];  //取第一个变参
            Bitmap bmp = null;
            try {
                URL url = new URL(urlStr);
                bmp=BitmapFactory.decodeStream(url.openStream()); //位图工厂,返回bitmap
                InputStream is= url.openStream();
                byte[] buffer=new byte[4096];//byte[]缓冲区
                FileOutputStream fos= MainActivity.this.openFileOutput("a.png",MainActivity.MODE_PRIVATE);
                int hasRead=is.read(buffer);
                while (hasRead>0){
                    fos.write(buffer,0,hasRead);//文件大小,起始位置,读取的量
                    hasRead=is.read(buffer);
                }
                fos.close();//关闭
                is.close();//关闭
            }
            catch (Exception ex) {
            }finally {
            }
            return bmp;
        }
        @Override
        protected void onPostExecute(Bitmap bitmap) {
            if(bitmap!=null){
                imageView.setImageBitmap(bitmap);
            }
        }
    }

 四、运行结果

点击下载按钮下载图片。读取图片按钮的作用:下载一次后,不需要重新下载

小记:

java代码输入时有些会自动弹出,并匹配到相应包,直接贴会有报错。

时间: 2024-10-10 11:11:10

androidj基础:从网上下载图片的相关文章

AssetsLibrary从网上下载图片,保存到相册,保存网络图片,

xcode7.要设置info中添加App Transport Security Settings(type为Dictionary)在这个字典下添加Allow Arbitrary Loads(type为Boolean,Value为Yes),http协议 #import "ViewController.h" #import <AssetsLibrary/AssetsLibrary.h> @interface ViewController () @property(nonatom

WPF-模拟动态更换logo的过程(2),如何把网上的图片下载到指定目录。

上一步,我们已经获取了图片应该保存的地址.现在只需要传入URL把图片下载到指定目录. 从网上下载图片也有俩种方法. 第一种: WebRequest request = WebRequest.Create("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1578031102838&di=1d5e032e5139eef33ab821b5f3522b64&imgtype=0

[C#基础实例]指定地址解析图片并下载

需求:查找页面图片并下载至本地: 实现: 首先:读取通过网络html内容,并用正则表达式查找图片地下. 其次:使用WebRequest.Create创建图片请求. 最后:把获取图片网络流数据通过FileStream创建本地文件并写入数据. using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.N

Android异步批量下载图片并缓存

前言 本文引自:http://www.xycoding.com/articles/2014/07/29/android-async-images-download/,作者不详 ImagesDownLoad源码下载:DEMO 接触android开发不久,近段时间需实现一个批量下载图片并显示的小功能.在网上搜索了一圈,发现国内外网上异步加载的例子太多太杂,要么是加载大图decode时报OOM异常,要么内存急剧上升不稳定.所以在前辈们的基础上,做了一些优化,特共享出来,欢迎大家指正.这里主要参见了以下

我的第一个python爬虫程序(从百度贴吧自动下载图片)

这个学期开设了编译原理和形式语言与自动机,里面都有介绍过正则表达式,今天自己学了学用python正则表达式写爬虫 一.网络爬虫的定义 网络爬虫,即Web Spider,是一个很形象的名字. 把互联网比喻成一个蜘蛛网,那么Spider就是在网上爬来爬去的蜘蛛. 网络蜘蛛是通过网页的链接地址来寻找网页的. 从网站某一个页面(通常是首页)开始,读取网页的内容,找到在网页中的其它链接地址, 然后通过这些链接地址寻找下一个网页,这样一直循环下去,直到把这个网站所有的网页都抓取完为止. 如果把整个互联网当成

Android采用HttpClient下载图片

在上一章中谈到Android采用HttpURLConnection下载图片,本章使用HttpClient下载图片 HttpURLConnection与HttpClient的差别: HttpClient是个非常不错的开源框架(org.appache.http),封装了訪问http的请求头,參数,内容体.响应等等,使用起来更方面更强大. HttpURLConnection是java的标准类,能够实现简单的基于URL请求.响应功能,什么都没封装.用起来太原始.比方重訪问的自己定义,以及一些高级功能等.

如何控制WebBrowser控件不下载图片

Sidyhe在http://blog.csdn.net/sidyhe/article/details/9073485 一文中,利用C++以及Windows SDK实现了WebBrowser控件的容器. 我们可以在Sidyhe的基础上,简单修改CXWebBrowser类,即可控制其在访问页面时,不下载图片(对其他下载资源的控制可参照图片的). 具体实现只要修改Invoke函数即可,原来的Invoke函数如下: HRESULT CXWebBrowser::Invoke(DISPID dispIdMe

Android使用HttpClient下载图片

在前一章中讲的是Android使用HttpURLConnection下载图片,这一章使用HttpClient下载图片 HttpURLConnection与HttpClient的区别: HttpClient是个很不错的开源框架(org.appache.http),封装了访问http的请求头,参数,内容体,响应等等,使用起来更方面更强大. HttpURLConnection是java的标准类,可以实现简单的基于URL请求.响应功能,什么都没封装,用起来太原始,比如重访问的自定义,以及一些高级功能等.

Android下载图片 图片的异步加载 和缓存存取

一.创建异步任务 public class LoadBitmapAsyn extends AsyncTask<String,Void,Bitmap> { Context context; ImageView img; private HashMap<String,SoftReference<Bitmap>> imageCache=null; public LoadBitmapAsyn(ImageView img){ this.img=img; this.context=