Android中的网络编程系列(一):URLConnection
转载请注明出处:http://blog.csdn.net/bettarwang/article/details/41229955
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下看到,要注意的一个细节就是关闭流的顺序是与创建的顺序相反,否则会抛出异常。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。