使用URL读取网络资源

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

import android.os.Bundle;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.Menu;
import android.widget.ImageView;

public class URLTest extends Activity {
  ImageView show;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_urltest);
    show = (ImageView) findViewById(R.id.show);
    //定义一个URL对象
    try {
      URL url = new URL("http://www.crazyit.org/attachments" +
          "month_1008/20100812_7763e970f822325bf019ELVym8tW3A.png");
      //打开该URL对应的资源的输入流
      InputStream is = url.openStream();
      //从InputStream中解析出图片
      Bitmap bitmap = BitmapFactory.decodeStream(is);
      //使用ImageView显示该图片
      show.setImageBitmap(bitmap);
      is.close();
      //再次打开URL对应的资源的输入流
      is = url.openStream();
      //打开手机文件对应的输出流
      OutputStream os = openFileOutput("crazyit.png", MODE_WORLD_READABLE);
      byte[] buff = new byte[1024];
      int hasRead = 0;
      //将URL对应的资源下载到本地
      while((hasRead = is.read(buff)) > 0){
        os.write(buff, 0, hasRead);
      }
      is.close();
      os.close();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

}

上面的程序两次调用了URL对象的openStream()方法打开URL对应的资源的输入流,程序第一次使用BitmapFactory的decodeStream(InputStream)方法来解析该输入流中的图片;第二次则使用IO将输入流中的图片下载到本地。

该程序同样需要访问互联网,因此需要授予该程序访问网络的权限,也就是需要在AndroidManifest.xml文件中增加如下授权代码。

<!-- 授权访问网络 -->
<uses-permission android:name="android.permission.INTERNET"/>

运行该程序不仅可以显示该URL对象所对应的图片,而且还会在手机文件系统的/data/data/org.crazyit.net/files/目录下生成crazyit.png图片,该图片就是通过URL从网络上下载的图片。

上一篇:拉格朗日乘子法和KKT条件


下一篇:Plupload设置自定义参数