Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android開發系列(十二):獲得網絡上的圖片

Android開發系列(十二):獲得網絡上的圖片

編輯:關於Android編程

獲得網絡上圖片的過程:

獲得圖片的Url—>通過Url連接圖片對象—>把讀到的圖片的二進制數據寫入內存—>返回內存中的數據—>顯示出來


首先,我們要添加權限

因為我們要訪問網絡,所以我們要在AndroidManifest.xml文件總添加網絡訪問權限:



然後就是設置界面:main.xml:




    
    
    
    

接下來是MainActivity.java文件:

package cn.itcast.image;

import cn.itcast.service.ImageService;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
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 pathText;
    private ImageView imageView;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        pathText = (EditText) this.findViewById(R.id.imagepath);
        imageView = (ImageView) this.findViewById(R.id.imageView);
        Button button = (Button) this.findViewById(R.id.button);
        button.setOnClickListener(new ButtonClickListener());
    }
    
    private final class ButtonClickListener implements View.OnClickListener{

		public void onClick(View v) {
			String path = pathText.getText().toString(); //得到文本框的url路徑
			try{
				//得到圖片的二進制數據
				byte[] data = ImageService.getImage(path);
				//把圖片轉換成bitmap類型
				Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
				imageView.setImageBitmap(bitmap);//顯示圖片
			}catch (Exception e) {
				e.printStackTrace();
				Toast.makeText(getApplicationContext(), R.string.error, 1).show();
			}
		}
    }
}
然後我們還要配置ImageService.java文件:

package cn.itcast.service;

import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

import cn.itcast.utils.StreamTool;

public class ImageService {
	/**
	 * 獲取網絡圖片的數據
	 * @param path 網絡圖片路徑
	 * @return
	 */
	public static byte[] getImage(String path) throws Exception{
		//得到url
		URL url = new URL(path);
		HttpURLConnection conn = (HttpURLConnection) url.openConnection();//基於HTTP協議連接對象
		conn.setConnectTimeout(5000);
		conn.setRequestMethod("GET");//設置以get方式提交
		if(conn.getResponseCode() == 200){ //如果響應碼等於200就是請求成功
			InputStream inStream = conn.getInputStream(); //得到輸入流
			return StreamTool.read(inStream); //得到圖片二進制數據
		}
		return null;
	}

}

最後我們要添加一個工具類:

package cn.itcast.utils;

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

public class StreamTool {
	/**
	 * 讀取流中的數據
	 * @param inStream
	 * @return
	 * @throws Exception
	 */
	public static byte[] read(InputStream inStream) throws Exception{
		ByteArrayOutputStream outStream = new ByteArrayOutputStream();
		byte[] buffer = new byte[1024];
		int len = 0;
		while( (len = inStream.read(buffer)) != -1){//inStream.read(buffer)返回int:讀取到的數據長度,當讀到-1就是讀完了
			outStream.write(buffer, 0, len); //把讀到的數據寫入內存
		}
		inStream.close();
		return outStream.toByteArray(); //返回內存中的數據
	}

}



效果圖如下:


  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved