杭州Android培训
达内杭州Android培训中心

18357109557

热门课程

达内:Android 本地加载网页&显示网络图片

  • 时间:2016-02-04
  • 发布:杭州android中心
  • 来源:慕课网


    杭州达内Android培训专家讲一下Android 本地加载网页以及显示网络图片的方法步骤。

WebView的用法
 
    如果说需要在应用程序里展示一些网页,而不希望打开系统浏览器,这时就可以借助 WebView控件在应用程序里嵌入一个浏览器,从而非常轻松地展示各种网页。

    由于程序使用到了网络功能,因此需要添加网络访问权限:


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


    在activity_main.xml 中添加 WebView 控件,用于显示网页:


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <WebView
        android:id="@+id/web_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></WebView>
</LinearLayout>


    最后在 MainActivity 中为浏览器设置属性并传入地址:


public class MainActivity extends AppCompatActivity {
    private WebView webView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.web_image);
        setContentView(R.layout.activity_main);
        webView = (WebView) findViewById(R.id.web_view);

        //调用setJavaScriptEnabled()方法让WebView支持JS脚本
        webView.getSettings().setJavaScriptEnabled(true);
        //跳转网页仍然在当前WebView中显示
        webView.setWebViewClient(new WebViewClient());
        //调用loadUrl()方法,并传入网址,展示相应内容
        webView.loadUrl("https://www.baidu.com");
    }
}


动态加载网络图片
 
    和 WebView 一样,加载网络图片也需要网络访问权限:


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


    载入图片的原理:根据图片地址获取图片,并将图片由文件流转换为位图对象。

    载入图片的过程必须进行异步处理,否则就很容易出现程序无响应(Application Not Responding)的情况。

    创建一个 LoadImagesTask 类,继承自 AsyncTask:


import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.widget.ImageView;

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

public class LoadImagesTask extends AsyncTask<String, Void, Bitmap> {
    private ImageView imageView;

    public LoadImagesTask(ImageView imageView) {
        this.imageView = imageView;
    }

    @Override
    protected Bitmap doInBackground(String... params) {
        URL imageUrl = null;
        Bitmap bitmap = null;
        InputStream inputStream = null;
        try {
            imageUrl = new URL(params[0]);
            HttpURLConnection conn = (HttpURLConnection) imageUrl.openConnection();
            conn.setDoInput(true);
            conn.connect();
            inputStream = conn.getInputStream();
            bitmap = BitmapFactory.decodeStream(inputStream);
            inputStream.close();

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

    @Override
    protected void onPostExecute(Bitmap bitmap) {
        imageView.setImageBitmap(bitmap);
    }
}


    异步处理就是在主线程和子线程进行通信,子线程处理耗时任务,并将结果返回到主线程。AsyncTask 将这个过程进行了包装。

    最后在 MainActivity 中进行测试,代码如下:


public class MainActivity extends AppCompatActivity {
    private ImageView imageView;

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

        String http = "http://img4.duitang.com/uploads/item/" +
                "201403/27/20140327194516_SaKBX.png";
        ImageView imageView = (ImageView) findViewById(R.id.image_view);
        //启动异步任务,加载网络图片
        new LoadImagesTask(imageView).execute(http);
    }
}




原文链接:http://www.imooc.com/article/4723
上一篇:安卓6.0全球普及率刚超过1%
下一篇:10大开源的移动应用开发框架

恭喜达内获得《产学合作协同育人项目合作伙伴奖》

迷茫小伙参加达内网络营销培训,获8w年薪入职哈道盟

中传学子参加达内Java培训,转身成为Java工程师月薪12.5K

职场求突破参加达内网络营销培训,获10万年薪成为营销达人

选择城市和中心
贵州省

广西省

海南省