使用URL訪問網絡資源
URL對象代表統一資源定位器,它是指向互聯網”資源”的指針,資源可以是簡單的文件或目錄,也可以是對更復雜的對象的引用,URL可以由協議名、主機、端口和資源組成。
URL的openConnection()方法將返回一個URLConnection對象,該對象表示應用程序和URL之間的通信連接,程序可以通過URLConnection實例向該URL發送請求,讀取URL引用的資源。
通常創建一個和URL的連接,併發送請求。讀取此URL引用的資源需要如下幾個步驟:
1) 通過調用Url對象openConnection()方法來創建URLConnection對象
2) 設置URLConnection的參數和普通請求屬性
3) 如果只是發送get方式請求,使用Connect方法建立和遠程資源之間的實際連接即可;如果需要發送post方式的請求需要獲取URlConnection實例對應的輸出流來發送請求參數
4) 遠程資源變爲可用,程序可以訪問遠程資源的頭字段或通過輸入流讀取遠程資源的數據。
J2SE實現網絡圖片的獲取
importjava.io.ByteArrayOutputStream;
importjava.io.File;
importjava.io.FileOutputStream;
importjava.io.InputStream;
importjava.net.HttpURLConnection;
importjava.net.URL;
publicclass NetTest {
public static void main(String[] args)throws Exception {
Stringpath="http://pic2.nipic.com/20090505/2186940_203750018_2.jpg";
URL url = new URL(path);
HttpURLConnection conn =(HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(5000);
InputStream inStream =conn.getInputStream();
ByteArrayOutputStream bos = newByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len=0;
while((len=inStream.read(buffer))!= -1){
bos.write(buffer,0,len);
}
byte[] data = bos.toByteArray();
File file = newFile("picture.jpg");
FileOutputStream fos = newFileOutputStream(file);
fos.write(data);
fos.close();
System.out.println("finish.......");
}
}
Androd中獲取網絡圖片
資源文件:
<string name="btn_text">顯示網絡圖片</string>
<string name="error">下載圖片失敗!!</string>
佈局文件:
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/btn_text"
android:id="@+id/showImageBtn"
/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageView"
/>
添加ImageService類
packagecn.class3g.service;
importjava.io.ByteArrayOutputStream;
importjava.io.InputStream;
importjava.net.HttpURLConnection;
importjava.net.MalformedURLException;
importjava.net.URL;
publicclass ImageService {
public static byte[] getImageData(Stringpath) throws Exception {
URL url = new URL(path);
HttpURLConnection conn =(HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(5000);
InputStream inStream =conn.getInputStream();
ByteArrayOutputStream bos = newByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len=0;
while((len=inStream.read(buffer)) != -1){
bos.write(buffer,0,len);
}
byte[] data = bos.toByteArray();
return data;
}
}
ShowImageActivity類
packagecn.class3g.net;
importcn.class3g.service.ImageService;
importandroid.app.Activity;
importandroid.graphics.Bitmap;
importandroid.graphics.BitmapFactory;
importandroid.os.Bundle;
importandroid.util.Log;
importandroid.view.View;
importandroid.view.View.OnClickListener;
importandroid.widget.Button;
importandroid.widget.ImageView;
importandroid.widget.Toast;
publicclass ShowImageActivity extends Activity implements OnClickListener {
Button btn;
ImageView imgView;
public void onCreate(BundlesavedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.img_layout);
findViews();
}
private void findViews() {
btn = (Button)this.findViewById(R.id.showImageBtn);
imgView = (ImageView)this.findViewById(R.id.imageView);
btn.setOnClickListener(this);
}
@Override
public void onClick(View v) {
Stringpath="http://pic2.nipic.com/20090505/2186940_203750018_2.jpg";
byte data[];
try {
data =ImageService.getImageData(path);
Bitmap titmap =BitmapFactory.decodeByteArray(data, 0, data.length);
imgView.setImageBitmap(titmap);
} catch (Exception e) {
// e.printStackTrace();
Log.e("TAG",e.toString());
Toast.makeText(this,R.string.error, Toast.LENGTH_SHORT).show();
}
}
}