欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android开发基础之网络请求实例

程序员文章站 2023-01-23 08:10:33
http获取网络数据的步骤 添加权限 // 1.得到图片的url路径 url url = new url(path); // 2.通过路径打开一个http的连接,并设置请求参数...

http获取网络数据的步骤

添加权限


 // 1.得到图片的url路径
 url url = new url(path);

 // 2.通过路径打开一个http的连接,并设置请求参数
 httpurlconnection conn = (httpurlconnection) url.openconnection();// http

 // 3.得到响应码,判断与服务器连接是否正常
 int code = conn.getresponsecode(); // 200 ok 404 资源没找到 503服务器内部错误
 if (code == 200) {

 // 4.得到服务器返回的数据流
 inputstream is = conn.getinputstream();
 }

http请求的小细节

 //初始化时的设置
 conn.setrequestmethod("get");//设置请求参数为get, 默认的请求方式就是get,此处区分大小写
 conn.setconnecttimeout(5000);//设置请求服务器的超时时间.

 //服务器返回数据属性的获取
 string type = conn.getcontenttype();//获取返回数据的类型
 int length = conn.getcontentlength();//获取返回数据的长度

 //user-agent
 当前浏览器的类型,服务器可以根据浏览器的类型的不同,返回不同的页面

获取输入流的处理

将流转换为bitmap

 bitmap bitmap = bitmapfactory.decodestream(is);
 iv.setimagebitmap(bitmap);

将流转化为字符串

public static string readstream(inputstream is) throws exception{
 //bytearrayoutputstream类是在创建它的实例时,程序内部创建一个byte型数组的缓冲区,
 //缓冲区会随着数据的不断写入而自动增长。可使用 tobytearray()和 tostring()获取数据
 bytearrayoutputstream baos = new bytearrayoutputstream();
 byte[] buffer = new byte[1024];
 int len = -1;
 while((len = is.read(buffer))!=-1){
  baos.write(buffer, 0, len);
 }
 is.close();
 string temp =  baos.tostring();
 if(temp.contains("charset=utf-8")){
  return temp;
 }else if(temp.contains("gb2312")){
  return baos.tostring("gb2312");
 }return null;
 }

乱码相关的处理

string.getbytes(string charsetname)和new string(byte[] bytes, string charsetname)

 //将字符串按指定的编码转化为byte数组,默认采用本地码表
 byte[] bytes = string.getbytes(string charsetname)
 //将byte数组按指定的编码转化为字符串
 new string(byte[] bytes, string charsetname)
**注意:出现乱码时不要修改文件,修改后无论怎么切换编码都是错的了**

提交数据中含有中文的注意事项

客户端

//提交的数据中含有中文时,将字符串qq按照编码utf-8进行编码
urlencoder.encode(qq, "utf-8");
**服务端**
  string qq =request.getparameter("qq");//tomcat采用的编码是iso-8859-1
  system.out.println("qq:"+new string(qq.getbytes("iso-8859-1"),"utf-8"));