天天看點

Android代碼(Handler的運用),HttpURLConnection的應用,将url圖檔位址轉換成圖檔。



1 布局檔案,

<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_icon"

        android:layout_width="fill_parent"

        android:layout_height="0dip"

        android:layout_weight="1" />

    <linearlayout

        android:layout_height="wrap_content"

        android:orientation="horizontal" >

        <edittext

            android:id="@+id/et_url"

            android:layout_width="0dip"

            android:text="http://img0.hao123.com/data/1_489a5f7dfbcbb624a231f372e4bdffce_310"

            android:layout_height="wrap_content"

            android:singleline="true"

            android:layout_weight="1" />

        <button

            android:id="@+id/btn_submit"

            android:layout_width="wrap_content"

            android:text="go"

            android:textsize="20sp" />

    </linearlayout>

</linearlayout>

android代碼(handler的運用),httpurlconnection的應用,将url圖檔位址轉換成圖檔。

package com.itheim28.submitdata;

import java.io.inputstream;

import java.net.httpurlconnection;

import java.net.url;

import android.app.activity;

import android.graphics.bitmap;

import android.graphics.bitmapfactory;

import android.os.bundle;

import android.os.handler;

import android.os.message;

import android.util.log;

import android.view.view;

import android.view.view.onclicklistener;

import android.widget.edittext;

import android.widget.imageview;

import android.widget.toast;

public class mainactivity extends activity implements onclicklistener {

    private static final string tag = "mainactivity";

    protected static final int error = 1;

    private edittext eturl;

    private imageview ivicon;

    private final int success = 0;

    private handler handler = new handler() {

       public void handlemessage(message msg) {

           super.handlemessage(msg);

           log.i(tag, "what = " + msg.what);

           if (msg.what == success) {

              ivicon.setimagebitmap((bitmap)msg.obj);

           } else if (msg.what == error) {

              toast.maketext(mainactivity.this, "抓起失敗", 0).show();

           }

       }

    };

    @override

    protected void oncreate(bundle savedinstancestate) {

       super.oncreate(savedinstancestate);

       setcontentview(r.layout.activity_main);

       ivicon = (imageview) findviewbyid(r.id.iv_icon);

       eturl = (edittext) findviewbyid(r.id.et_url);

       findviewbyid(r.id.btn_submit).setonclicklistener(this);

    }

    public void onclick(view v) {

       final string url = eturl.gettext().tostring();

       new thread(new runnable() {

           @override

           public void run() {

              bitmap bitmap = getimagefromnet(url);

//            ivicon.setimagebitmap(bitmap);     // 設定imageview顯示的圖檔

              if(bitmap != null) {

                  message msg = new message();

                  msg.what = success;

                  msg.obj = bitmap;

                  handler.sendmessage(msg);

              } else {

                  msg.what = error;

              }

           }}).start();

    /**

     * 根據url連接配接取網絡抓去圖檔傳回

     * @param url

     * @return url對應的圖檔

     */

    private bitmap getimagefromnet(string url) {

       httpurlconnection conn = null;

       try {

           url murl = new url(url); // 建立一個url對象

           // 得到http的連接配接對象

           conn = (httpurlconnection) murl.openconnection();

           conn.setrequestmethod("get");      // 設定請求方法為get

           conn.setconnecttimeout(10000);     // 設定連接配接伺服器的逾時時間, 如果超過10秒鐘, 沒有連接配接成功, 會抛異常

           conn.setreadtimeout(5000);      // 設定讀取資料時逾時時間, 如果超過5秒, 抛異常

           conn.connect();      // 開始連結

           int responsecode = conn.getresponsecode(); // 得到伺服器的響應碼

           if(responsecode == 200) {

              // 通路成功

              inputstream is = conn.getinputstream();   // 獲得伺服器傳回的流資料

              bitmap bitmap = bitmapfactory.decodestream(is); // 根據 流資料 建立一個bitmap位圖對象

              return bitmap;

           } else {

              log.i(tag, "通路失敗: responsecode = " + responsecode);

       } catch (exception e) {

           e.printstacktrace();

       } finally {

           if(conn != null) {

              conn.disconnect();       // 斷開連接配接

       return null;

}

繼續閱讀