这里有新鲜出炉的精品教程,程序狗速度看过来!
Android 是一种基于 Linux 的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由 Google 公司和开放手机联盟领导及开发。尚未有统一中文名称,中国大陆地区较多人使用 "安卓" 或 "安致"。
这篇文章主要为大家分享了 Android 图片加载的实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
HttpURLConnection 和 HttpClient 都可以访问网络,前者是 Java 的标准类,后者是 Apache 的一个开源项目,两者使用起来效果一样,但后者更为简单。
以下是针对前者完成的一个实例:
首先写好布局文件:
- <LinearLayout 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:orientation="vertical"
- tools:context=".MainActivity" >
- <ImageView
- android:id="@+id/iv"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:layout_weight="1" />
- <EditText
- android:id="@+id/et_path"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:hint="请输入图片路径"
- android:src="@drawable/
- android:maxLines="1" />
- <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:onClick="click" android:text="浏览" />
- </LinearLayout>
界面交互
- package cn.edu.bzu.imageviewdemo;
- import android.graphics.Bitmap;
- import android.graphics.BitmapFactory;
- import android.os.Bundle;
- import android.os.Handler;
- import android.os.Message;
- import android.support.v7.app.AppCompatActivity;
- import android.text.TextUtils;
- import android.view.View;
- import android.widget.EditText;
- import android.widget.ImageView;
- import android.widget.Toast;
- import java.io.InputStream;
- import java.net.HttpURLConnection;
- import java.net.URL;
- public class MainActivity extends AppCompatActivity {
- protected static final int CHANGE_UI = 1;
- protected static final int ERROR = 2;
- private EditText et_path;
- private ImageView iv;
- // 主线程创建消息处理器
- private Handler handler = new Handler() {
- public void handleMessage(android.os.Message msg) {
- if (msg.what == CHANGE_UI) {
- Bitmap bitmap = (Bitmap) msg.obj;
- iv.setImageBitmap(bitmap);
- } else if (msg.what == ERROR) {
- Toast.makeText(MainActivity.this, "显示图片错误", 0).show();
- }
- };
- };
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- et_path = (EditText) findViewById(R.id.et_path);
- iv = (ImageView) findViewById(R.id.iv);
- }
- public void click(View view) {
- final String path = et_path.getText().toString().trim();
- if (TextUtils.isEmpty(path)) {
- Toast.makeText(this, "图片路径不能为空", Toast.LENGTH_SHORT).show();
- } else {
- //子线程请求网络,Android4.0以后访问网络不能放在主线程中
- new Thread() {
- public void run() {
- // 连接服务器 get 请求 获取图片.
- try {
- URL url = new URL(path); //创建URL对象
- // 根据url 发送 http的请求.
- HttpURLConnection conn = (HttpURLConnection) url.openConnection();
- // 设置请求的方式
- conn.setRequestMethod("GET");
- //设置超时时间
- conn.setConnectTimeout(5000);
- // 得到服务器返回的响应码
- int code = conn.getResponseCode();
- //请求网络成功后返回码是200
- if (code == 200) {
- //获取输入流
- InputStream is = conn.getInputStream();
- //将流转换成Bitmap对象
- Bitmap bitmap = BitmapFactory.decodeStream(is);
- //iv.setImageBitmap(bitmap);
- //TODO: 告诉主线程一个消息:帮我更改界面。内容:bitmap
- Message msg = new Message();
- msg.what = CHANGE_UI;
- msg.obj = bitmap;
- handler.sendMessage(msg);
- } else {
- //返回码不是200 请求服务器失败
- Message msg = new Message();
- msg.what = ERROR;
- handler.sendMessage(msg);
- }
- } catch(Exception e) {
- e.printStackTrace();
- Message msg = new Message();
- msg.what = ERROR;
- handler.sendMessage(msg);
- }
- };
- }.start();
- }
- }
- }
来源: http://www.phperz.com/article/17/0824/337641.html