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();    }  }}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

接受失败,是我们不常听到或看到的一个命题,

Android图片加载案例分享

相关文章:

你感兴趣的文章:

标签云: