Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android中的網絡編程系列(一):URLConnection

Android中的網絡編程系列(一):URLConnection

編輯:關於Android編程

 

URL(Uniform Resource Locator)對象代表統一資源定位器,它是指向互聯網資源的指針。URL由協議名、主機、端口和資源路徑組件,即滿足如下格式:

 

protocol://host:port/path

 

 

例如http://kan.sogou.com/dianying/就是一個URL地址。

URL提供了多個構造方法用於創建URL對象,同時它提供的主要方法如下:

 

(1)String getFile():獲取此URL的資源名;

(2)String getHost():獲取此URL的主機名;

(3)String getPath():獲取此URL的路徑部分;

(4)String getProtocol():獲取此URL的協議名稱;

(5)String getQuery():獲取此URL的查詢字符串部分;

(6)URLConnection openConnection():返回一個URLConnection對象,它表示URL所引用的遠程對象與本進程的連接;

(7)InputStream openStream():打開與此URL的連接,並返回一個用於讀取該URL資源的InputStream;

下面以下載Baidu上的一張死神的圖片為例,示范如何使用URL:

layout文件很簡單,就兩個button和一個ImageView,就不貼上來了,下面是源碼:

 

public class MainActivity extends Activity implements View.OnClickListener{
	private static final String PIC_URL=http://pic7.nipic.com/20100528/4981527_163140644317_2.jpg;
	private static final int SHOW_IMAGE=0x123;
	private static final int SAVE_SUCC=0x124;
	private static final int SAVE_ERROR=0x125;
	
	Button showImageButton,saveImageButton;
	ImageView imageView;
	Bitmap bitmap;
	
	private Handler handler=new Handler()
	{
		@Override
		public void handleMessage(Message msg)
		{
			if(msg.what==SHOW_IMAGE)
			{
				imageView.setImageBitmap(bitmap);
			}
			else if(msg.what==SAVE_SUCC)
			{
				Toast.makeText(getBaseContext(), 圖片保存成功, Toast.LENGTH_LONG).show();
			}
			else if(msg.what==SAVE_ERROR)
			{
				Toast.makeText(getBaseContext(), 圖片保存出錯, Toast.LENGTH_LONG).show();
			}
		}
	};
	
	private void initView()
	{
		showImageButton=(Button)findViewById(R.id.showImageButton);
		saveImageButton=(Button)findViewById(R.id.saveImageButton);
		imageView=(ImageView)findViewById(R.id.imageView);
	}
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		initView();
		showImageButton.setOnClickListener(this);
		saveImageButton.setOnClickListener(this);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	private void showImage()
	{
		new Thread()
		{
			@Override
			public void run()
			{
				try 
				{
					URL url = new URL(PIC_URL);
					InputStream is=url.openStream();
					bitmap=BitmapFactory.decodeStream(is);
					handler.sendEmptyMessage(SHOW_IMAGE);
		            is.close();
				} 
				catch(Exception e) 
				{
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}.start();
		
	}
	
	public void saveImage()
	{
		new Thread()
		{
			@Override
			public void run()
			{
				try		
				{
					URL url=new URL(PIC_URL);
					InputStream is=url.openStream();
					BufferedInputStream bis=new BufferedInputStream(is);
					
					String filePath=animation.png;
					FileOutputStream fos=getBaseContext().openFileOutput(filePath,MODE_PRIVATE);
					BufferedOutputStream bos=new BufferedOutputStream(fos);
					
					byte[]buff=new byte[32];
					int hasRead=0;
					
					while((hasRead=bis.read(buff))>0)
					{
						bos.write(buff,0,hasRead);
					}
					
					
					bos.close();
					fos.close();
					
					bis.close();
					is.close();
					
				    handler.sendEmptyMessage(SAVE_SUCC);
				}
				catch(Exception ex)
				{
					handler.sendEmptyMessage(SAVE_ERROR);
					ex.printStackTrace();
				}
			}
		}.start();
	}
	
	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		switch(v.getId())
		{
		case R.id.showImageButton:
			showImage();
			break;
		case R.id.saveImageButton:
			saveImage();
			break;
		}
	}

}
\
保存的圖片則可以data/data/com.android.urlsample/files下看到,要注意的一個細節就是關閉流的順序是與創建的順序相反,否則會拋出異常。

 

 

 

 

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