一、使用URL访问网络资源——Androd中获取网络图片
URL对象代表着同意的资源定位器,她是只想互联网资源的指针,资源可以是简单的文件或目录,也可以是对更复杂的对象的引用,例如对数据库或者搜索引擎的查询;
URL提供了多个构造器,用于创建URl对象,一旦获得了URL对象后可以调用方法来获取资源;
下面提供一个获取网络图片的实例:
资源代码:
<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/showBtn"
/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageView"
service业务层编写:
package cn.haozi.service;
importjava.io.ByteArrayOutputStream;
importjava.io.IOException;
importjava.io.InputStream;
import java.net.HttpURLConnection;
importjava.net.URL;
public classimageService {
public staticbyte[] getImageDat(String path) throwsException{
URL url = new URL(path);
HttpURLConnection conn=(HttpURLConnection) url.openConnection();
//必须大写 设置响应头
conn.setRequestMethod("GET");
//设置延时
conn.setConnectTimeout(5000);
InputStream inStream = conn.getInputStream();
//字节数组输出流
ByteArrayOutputStream bos = new ByteArrayOutputStream();
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;
}
}
Activity编写:
package cn.haozi;
importcn.haozi.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;
public classnetTestActivity extends Activity implements OnClickListener {
Button imageBtn;
ImageView imageVIew;
public void onCreate(BundlesavedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
findVIews();
}
private void findVIews() {
imageBtn = (Button)this.findViewById(R.id.Btn);
imageVIew = (ImageView)this.findViewById(R.id.imageVIew);
imageBtn.setOnClickListener(this);
}
public void onClick(View arg0) {
Stringpath="http://hiphotos.baidu.com/5335360123/pic/item/b4f722cada91fa5a7f3e6fc0.jpg";
try {
byte[] data =imageService.getImageDat(path);
Bitmap bitmap =BitmapFactory.decodeByteArray(data, 0, data.length);
imageVIew.setImageBitmap(bitmap);
} catch (Exception e) {
Log.e("TAG",e.toString());
Toast.makeText(this,R.string.error,Toast.LENGTH_LONG ).show();
}
}
}
清单文件的修改:增添网络访问权限
<uses-permission android:name="android.permission.INTERNET"/>
运行效果:
二、Android获取网页html代码;
布局文件:
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/btn_text"
android:id="@+id/showBtn"
/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageView"
/>
代码:在前面的ImageService.getImage()方法基础上修改即可
public class HtmlService {
/**
* 获取给定路径的html代码
* @param path 网页路径
* @return
* @throws Exception
*/
public static String getHtml(String path) throws Exception{
URL url = new URL(path);
//get //post
HttpURLConnection conn =(HttpURLConnection)url.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(5*1000);
InputStream inStream = conn.getInputStream();
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
while( (len = inStream.read(buffer)) !=-1 ){
outStream.write(buffer, 0, len);
}
byte[] data = outStream.toByteArray();//网页的二进制数据
outStream.close();
inStream.close();
return new String(data, "gb2312");
}
}
Activity的按钮点击事件修改为:
public void onClick(View v) {
String path = pathText.getText().toString();
try {
String htmlcode = HtmlService.getHtml(path);
resultView.setText(htmlcode);
} catch (Exception e) {
Log.e(TAG, e.toString());
Toast.makeText(ShowHtmlActivity.this, R.string.error, 1).show();
}
}
程序运行视图: