Android(安卓)Http基础:图片下载并显示和WebView的应用
16lz
2021-12-04
效果图
上面是ImageView , 下面是WebView .
代码如下:
activity_main.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"> <ImageView android:id="@+id/image" android:layout_width="fill_parent" android:layout_height="wrap_content"></ImageView> <WebView android:id="@+id/wedView" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_below="@id/image"></WebView></RelativeLayout>MainActivity:
/** * 在Android上发送HTTP请求的方式一般有两种,HttpURLConnection和HttpClient */public class MainActivity extends ActionBarActivity { private WebView webView; private ImageView imageView; public static final int SHOW_WEDVIEW = 0; private Handler handler = new Handler(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); webView = (WebView) findViewById(R.id.wedView); imageView = (ImageView) findViewById(R.id.image); //通过网络加载图片 new ImageThread("http://gb.cri.cn/mmsource/images/2013/02/22/35/14607758026320856623.jpg",imageView,handler).start(); //在WebView中显示百度主页 new HttpThread("http://www.baidu.com",webView,handler).start(); }}ImageThread(加载图片的线程):
public class ImageThread extends Thread { //声明要传递的参数 private String url; private ImageView imageView; private Handler handler; //创建构造方法,对参数进行初始化 public ImageThread(String url, ImageView imageView, Handler handler) { this.url = url; this.imageView = imageView; this.handler = handler; } @Override public void run() { try { //定义一个URL对象 URL httpUrl = new URL(url); //获取HttpURLConnection的实例,表示到URL所引用的远程对象的连接 HttpURLConnection connection = (HttpURLConnection) httpUrl.openConnection(); //设置读取超时时间 connection.setReadTimeout(5000); //设置请求方法,GET表示希望从服务器那里获取数据,而POST则表示提交数据给服务器 connection.setRequestMethod("GET"); //设置该URLConnection的doOutput请求头字段的值 connection.setDoInput(true); //用时间作为下载的图片的文件名 String fileName = String.valueOf(System.currentTimeMillis()); File downloadFile = null; InputStream inputStream = connection.getInputStream(); //要把文件写到SD卡,所以用FileOutputStream FileOutputStream fileOutputStream = null; //判断SD卡是否存在,存在就创建文件 if (Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)) { File parent = Environment.getExternalStorageDirectory(); downloadFile = new File(parent,fileName); fileOutputStream = new FileOutputStream(downloadFile); } //创建一个2K的缓冲区 byte[] bytes = new byte[2 * 1024]; int length; if (fileOutputStream != null) { while ((length = inputStream.read(bytes)) != -1) { fileOutputStream.write(bytes,0,length); } } final Bitmap bitmap = BitmapFactory.decodeFile(downloadFile.getAbsolutePath()); //通过handler去更新UI handler.post(new Runnable() { @Override public void run() { imageView.setImageBitmap(bitmap); } }); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }}
HttpThread(加载WebView的线程):
public class HttpThread extends Thread { //声明要传递的参数 private String url; private WebView webView; private Handler handler; //创建构造方法,对参数进行初始化 public HttpThread(String url, WebView webView, Handler handler) { this.url = url; this.webView = webView; this.handler = handler; } @Override public void run() { try { //定义一个URL对象 URL httpUrl = new URL(url); //获取HttpURLConnection的实例,表示到URL所引用的远程对象的连接 HttpURLConnection connection = (HttpURLConnection) httpUrl.openConnection(); //设置读取超时时间 connection.setReadTimeout(5000); //设置请求方法,GET表示希望从服务器那里获取数据,而POST则表示提交数据给服务器 connection.setRequestMethod("GET"); final StringBuffer stringBuffer = new StringBuffer(); /* getInputStream():返回该URLConnection对应的输入流,用于获取URLConnection响应的内容 * getOutputStream():返回该URLConnection对应的输出流,用于向URLConnection发送请求参数 * */ InputStream inputStream = connection.getInputStream(); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); String str; while ((str=bufferedReader.readLine())!=null) { stringBuffer.append(str); } handler.post(new Runnable() { @Override public void run() { webView.loadData(stringBuffer.toString(),"text/html;charset=utf-8",null); } }); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } super.run(); }}
更多相关文章
- 【阿里云镜像】切换阿里巴巴开源镜像站镜像——Debian镜像
- Mac下Android(安卓)Studio中获取SHA1和MD5
- 2.28学习内容,android,dialog自定义宽高、ios判断网络可用性
- Android(安卓)Log Analysis转
- Android(安卓)性能参数获取
- Android多媒体学习一:Android中Image的简单实例。
- Android中获取当前位置信息
- Android之可以做的两件坏事---破解锁屏密码和获取Wifi密码
- android 获取 内外存储设备路径疑问