练习:从网络中获取图片以及多线程的使用
2015-06-24 08:12
627 查看
1..0结果:
从输入框(editortext)输入网页图片地址,点击按钮(Button),将图片拉取到(imageView)中显示
1.1结果图:
2.0分析:
在高版本的android中为了用户体验,联网功能必须实现在子线程,原因在于主线程是UI线程,频繁在UI线程执行长时间的联网操作会导致UI卡顿。当子线程需要更新UI时应该采用handler来处理。
3.0代码:
mainActivity:
Activity_Main.xml
AndroidManifest.xml中添加联网权限:
<uses-permission android:name="android.permission.INTERNET"/>
4.0相关下载
http://download.csdn.net/detail/yyd_diablo/8833127
从输入框(editortext)输入网页图片地址,点击按钮(Button),将图片拉取到(imageView)中显示
1.1结果图:
2.0分析:
在高版本的android中为了用户体验,联网功能必须实现在子线程,原因在于主线程是UI线程,频繁在UI线程执行长时间的联网操作会导致UI卡顿。当子线程需要更新UI时应该采用handler来处理。
3.0代码:
mainActivity:
package com.example.see_pic; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URI; import java.net.URL; import java.net.URLConnection; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.text.TextUtils; import android.view.Menu; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; import android.widget.Toast; public class MainActivity extends Activity { private EditText edt_view; private ImageView img_view; public static final int SHOW_IMAGE = 1; private Handler handler = new Handler() { public void handleMessage(Message msg) { switch (msg.what) { case SHOW_IMAGE: Bitmap bitmap = (Bitmap) msg.obj; img_view.setImageBitmap(bitmap); break; default: break; } }; }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); getview();// 获取控件 } public void showImage(View view) { final String path = edt_view.getText().toString(); if (TextUtils.isEmpty(path)) { Toast.makeText(MainActivity.this, "图片路径不能为空", Toast.LENGTH_LONG) .show(); } else { new Thread() {// 匿名内部类 public void run() { try { URL url = new URL(path); HttpURLConnection httpURLConnection = (HttpURLConnection) url .openConnection();// 打开链接 httpURLConnection.setRequestMethod("GET"); httpURLConnection.setConnectTimeout(5000);// 超时时间 int responsecode = httpURLConnection.getResponseCode();// 获取响应码 if (responsecode == 200) { InputStream is = httpURLConnection.getInputStream(); Bitmap bitmap = BitmapFactory.decodeStream(is); Message msg = new Message();//要处理的 是图片(Message) msg.what = SHOW_IMAGE;//调用上面的handlerMessage msg.obj = bitmap;// 将位图bitmap放入msg handler.sendMessage(msg);//把消息传给主线程 } else { Toast.makeText(MainActivity.this, "加载图片超时或失败", Toast.LENGTH_LONG).show(); } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }; }.start(); } } /* * 获取控件方法 */ private void getview() { img_view = (ImageView) findViewById(R.id.img_view); edt_view = (EditText) findViewById(R.id.edt_view); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }
Activity_Main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/LinearLayout1" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <ImageView android:id="@+id/img_view" android:layout_width="278dp" android:layout_height="279dp" android:src="@drawable/ic_launcher" /> <EditText android:id="@+id/edt_view" android:layout_width="262dp" android:layout_height="58dp" android:ems="10" android:text="http://v1.qzone.cc/skin/201408/06/19/46/53e215a4ca0c5991.jpg!600x600.jpg" /> <Button android:id="@+id/btn_view" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:onClick="showImage" android:text="浏览" /> </LinearLayout>
AndroidManifest.xml中添加联网权限:
<uses-permission android:name="android.permission.INTERNET"/>
4.0相关下载
http://download.csdn.net/detail/yyd_diablo/8833127
相关文章推荐
- (转)HTTP请求报文和HTTP响应报文
- Servlet (二) HttpServletRequest 获取值
- 【HTTPS】Https和SSL学习笔记(一)
- 金牌信通V8-生意虎信验证码插件
- (HTTP)金牌信通V8-生意虎信验证码插件
- 使用libnet与libpcap构造TCP/IP协议软件
- spark网络课程总结
- java中间件学习6-java网络通信实现选择
- Linux 网络编程 调试工具
- 六款主流免费网络嗅探软件wireshark,tcpdump,dsniff,Ettercap,NetStumbler
- 六款主流免费网络嗅探软件wireshark,tcpdump,dsniff,Ettercap,NetStumbler
- linux c++ socket入门之tcp server端
- 卷积神经网络知识要点
- volley源码解析(六)--HurlStack与HttpClientStack之争
- Java SE 基础复习-IO与序列化(2)-网络操作 HTTP与SOCKET
- 实现基于NTP协议的网络校时功能
- 网络安全未雨绸缪 国家安全防微杜渐
- iOS开发网络篇—HTTP协议
- 基于卷积神经网络的数据预处理以及模型参数保存
- linux网络配置 初学