URL
URL:Uniform(adj 统一的,一致的) Resource Locator()定位器
它是指向互联网资源的指针,资源是 简单的文件或者目录,也可以是复杂的引用。
例如对数据库或者搜索引擎的查询。
格式:
protocol://host:port/resourcename
JDK中还提供了一个URI(Uniform Resource Identifies)类 实例代表一个资源标识符
URL则负责打开一个到达该资源的输入流
当使用URL构造器获得指向某个资源的URL对象后
URL murl =new URL("139.129.132.218/bansen.jpg")
就可以使用URL的下列常用方法来获取资源
- String getFile() : 获取此URL指向的资源名
- String getHost() : 获取此URL指向的主机名
- String getPath() : 获取此URL的路径部分
- int getPort() : 获取此URL的端口号
- String getProtocol():获取此URL的协议名称
- String getQuery(): 获取URL 的查询字符串部分
- URLConnection openConnection() :返回一个URLConnection对象,它表示URL所引用的远程服务器和本地之间的一个连接。
- InputStream openStream(): 打开与此URL的连接,并返回一个用于读取该URL资源的输入流
示例:
AppCompatImageView show;
Bitmap bitmap=null;
public void Urltest(){
this.show=(AppCompatImageView)findViewById(R.id.show);
//初始化ImageView
final android.os.Handler handler =new Handler(){
@Override
public void handleMessage(Message msg) {
if(msg.what==666){
show.setImageBitmap(bitmap);
}
}
};
new Thread(){
@Override
public void run() {
try {
URL murl=new URL("http://139.129.132.218/wp-content/uploads/2015/10/1441078212502.jpg");
InputStream in=murl.openStream();//打开对应的输入流
bitmap= BitmapFactory.decodeStream(in);
handler.sendEmptyMessage(666);
in.close();
}catch (Exception e){
Snackbar.make(fab,e.toString(),Snackbar.LENGTH_SHORT).show();
}
}
}.start();
}
运行图:
URLConnection
URL的 openConnection() :返回一个URLConnection对象,URLConnection表示本地程序与远程服务器之间的一个连接。
程序可以通过URLConnection向目标地址发送请求,然后也可以读取URL引用的资源。
使用步骤:
- 通过调用URL的openURLConnection()方法来创建URLConnection对象
- 设置URLConnection的参数和普通请求属性
- 如果只发生GET请求,使用connect方法建立与远程资源之间的实际连接即可;若需发送POST请求,则需要获取URLConnection实例对应的输出流来发送请求参数
- 远程资源成为可用的资源,程序可以访问远程资源的头字段,或通过输入流读取远程资源的数据
上面的第二部可以使用URLConnection的一下方法来设置
- setAllowUserInteraction(): 设置allowUserInteraction请求头字段的值
- setDoInput() : 设置doIput请求头字段的值
- setDoOutput(): 设置dooutout请求头字段的值
- setifModifiedSince(): 设置ifModifiedSince请求头字段的值
- setUserCaches(): 设置UserCaches请求头字段的值
- setRequestProperty(String key,String value): 设置改URLConnection的key请求头字段的值为 Value 参数的值
like: connection.setRequestProperty(”accept“,“*/*”): 这个函数就是因为HTTP请求的头字段需要的头字段的值太多了,然后用这个函数就不用老是调用专门的函数
- addRequestProperty(String key,String value): 追加URLConnection的key请求头字段的值为 Value 参数的值,不会覆盖之前set的
- Object getContent(): 获取返回的URLConnectiion的内容
- String getHeaderField(String name): 获取指定响应头的值
- getInputStream(); 返回该URLConnectiion的输入流 用于获取响应的内容
- getOutputStream(): 返回该URLConnectiion的输出流 用于发送请求参数
还有getHeaderField()方法用于根据响应头字段来返回对应的值,而某些头字段需要经常访问
java还提供了
- getContentEncoding(): 获取content-encoding响应头字段的值
- getContentLength(): 获取conten-length响应头字段的值
- getContentType(): 获取content-type响应头字段的值
- getDate():获取date响应头字段的值
- getExpirarion():获取expires响应头字段的值
- getLastModified():获取last-modified响应头字段的值