Android獲取網絡上的圖片

fmms 12年前發布 | 77K 次閱讀 Android Android開發 移動開發

網絡的訪問在我們日常生活中太重要了,如果沒有網絡我們的生活將會是什么樣子呢?android手機和瀏覽器也是一樣的,也可以通過網絡通訊獲取數據,如調用webservice,EJB等。下面就通過一個小例子從網絡獲取一幅圖片并顯示在手機上,開發中將會使用到一個新的組件ImageView.

1.寫一個用來處理字節流的工具類

package org.lxh.util;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;

public class StreamTool {
    public static byte[] readInputStream(InputStream in) throws Exception{
        int len=0;
        byte buf[]=new byte[1024];
        ByteArrayOutputStream out=new ByteArrayOutputStream();
        while((len=in.read(buf))!=-1){
            out.write(buf,0,len);  //把數據寫入內存
        }
        out.close();  //關閉內存輸出流
        return out.toByteArray(); //把內存輸出流轉換成byte數組
    }

}
2.寫一個得到圖片byte數組的service類
package org.lxh.service;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

import org.lxh.util.StreamTool;

import android.util.Log;

public class WebService {
    public static byte[] getImage(String path){

        URL url;
        byte[] b=null;
        try {
            url = new URL(path);   //設置URL
            HttpURLConnection con;

            con = (HttpURLConnection)url.openConnection();  //打開連接

            con.setRequestMethod("GET"); //設置請求方法
            //設置連接超時時間為5s
            con.setConnectTimeout(5000);
            InputStream in=con.getInputStream();  //取得字節輸入流

            b=StreamTool.readInputStream(in);

        } catch (Exception e) {

            e.printStackTrace();
        }
        return b;  //返回byte數組

    }

}
3.寫一個用戶操作界面
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/hello"
    />
    <TextView  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/picaddress"
    />
    <EditText
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="http://www.desk9.com/Desk9Image/21/Desk9_21_1690_35790_S.jpg"
    android:id="@+id/imageaddress"
    />
    <Button
     android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/look"
    android:id="@+id/button"
    />
    <ImageView
     android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:id="@+id/image"/>
</LinearLayout>
4.寫一個activity類
package org.lxh.net;

import org.lxh.service.WebService;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;

public class NetActivity extends Activity {
   private EditText picaddress;
   private Button button;
   private ImageView imageView;
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        button=(Button)this.findViewById(R.id.button);
        imageView=(ImageView)this.findViewById(R.id.image);
        picaddress=(EditText)this.findViewById(R.id.imageaddress);
        button.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                String address=picaddress.getText().toString();

                try {

                    byte[] data=WebService.getImage(address); //得到圖片的輸入流

                    //二進制數據生成位圖
                    Bitmap bit=BitmapFactory.decodeByteArray(data, 0, data.length);

                    imageView.setImageBitmap(bit);

                } catch (Exception e) {
                    Log.e("NetActivity", e.toString());

                    Toast.makeText(NetActivity.this, R.string.error, 1).show();
                }
            }
        });
    }
}
5.添加網絡訪問的權限
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="org.lxh.net"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".NetActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
    <uses-sdk android:minSdkVersion="7" />

    <uses-permission android:name="android.permission.INTERNET"/>
</manifest> 
6.這里把strings.xml文件也貼出來
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Hello World, NetActivity!</string>
    <string name="app_name">圖片查看</string>
    <string name="picaddress">圖片地址</string>
    <string name="look">查看</string>
    <string name="error">網絡連接異常</string>
</resources>
下面是運行效果圖,代碼我也上傳給大家。0_1328621629f0pz.gif.png

來自:http://blog.csdn.net/chenwill3/article/details/7240587

 本文由用戶 fmms 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!