首页 > 其他分享 >Android平台下使用HttpUrlConnecti…

Android平台下使用HttpUrlConnecti…

时间:2023-04-30 19:03:39浏览次数:49  
标签:HttpUrlConnecti String 平台 content encode new Android arrayOutputStream conn



public static String requestByPost(String urlpath,String requestData) throws IOException{
 // HTTP connection reuse which was buggy pre-froyo      
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.FROYO) {
          
      
URL url = new URL(urlpath);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
 conn.setDoInput(true);
 conn.setConnectTimeout(TIMEOUT);
 conn.setReadTimeout(TIMEOUT);
 conn.setRequestMethod("POST");
 conn.setDoOutput(true);
 //需要设置 gzip的请求头 才可以获取Content-Encoding响应码
 conn.setRequestProperty("Accept-Encoding", "gzip, deflate");
 conn.connect();
 String urlEncodedRequestStr = URLEncoder.encode(requestData,"utf-8");
 String requestStr = "jsonStr="+urlEncodedRequestStr;
 conn.getOutputStream().write(requestStr.getBytes("utf-8"));
 conn.getOutputStream().flush();
 conn.getOutputStream().close();
 // //获取所有响应头字段
 //    Map< String,List< String>> map = conn.getHeaderFields();
 //    //遍历所有的响应头字段
 //    if(null!=map){
 //      for (String key : map.keySet()){
 //      System.out.println(key + "--->" + map.get(key));
 //      }
 //    }
 String content_encode = conn.getContentEncoding();
 System.out.println("content_encode:"+content_encode);
 // int responseCode = conn.getResponseCode();
 // System.out.println("responseCode:"+responseCode);
 // if(responseCode != 200){
 // String message = conn.getResponseMessage();
 // throw new IOException("ResponseCode:"+responseCode+",Message:"+message);
 // }//如果是gzip的压缩流 进行解压缩处理
 if(null!=content_encode&&!"".equals(content_encode)&&content_encode.equals("gzip")){
 GZIPInputStream in = new GZIPInputStream(conn.getInputStream());
 if(in == null){
 return "";
 }
 ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();
 int len ;
 byte [] buffer = new byte[1024];
 while((len=in.read(buffer))!= -1){
 arrayOutputStream.write(buffer, 0, len);
 }
 in.close();
 arrayOutputStream.close();
 conn.disconnect();
 str = new String(arrayOutputStream.toByteArray(),"utf-8");
 //正常流处理
 }else{
 InputStream in = conn.getInputStream();
 if(in == null){
 return "";
 }
 ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();
 int len ;
 byte [] buffer = new byte[1024];
 while((len=in.read(buffer))!= -1){
 arrayOutputStream.write(buffer, 0, len);
 }
 in.close();
 arrayOutputStream.close();
 conn.disconnect();
 str = new String(arrayOutputStream.toByteArray(),"utf-8");
 }
 return str;
 }

添加的注释是项目中实际遇到的问题,记下来小小总结下!

标签:HttpUrlConnecti,String,平台,content,encode,new,Android,arrayOutputStream,conn
From: https://blog.51cto.com/u_548275/6238005

相关文章

  • 用C/C++在Linux和Android NDK中获取设备的IP地址
    C/C++开发的获取设备IP地址的代码,下面链接中的版本是在Linuxx86-64环境中编译(Centos7.5)的,也可在其它版本的Linux中或者AndroidNDK('armeabi-v7a','arm64-v8a','x86','x86_64'等版本)中编译。下载地址(此版本须在Linuxx86-64环境中运行):金山文档https://kdocs.cn/l/cd4VM3e......
  • android异常:Can not p…
    本人某个android项目开发阶段一直运行良好,直到上线前夕,在某款跑着android4.03系统的手机运行却报出一下异常,导致forceclose:java.lang.IllegalStateException:CannotperformthisactionafteronSaveInstance!首先得了解一下我那项目的一些基本情况,UI结构是TabActivity包含着5......
  • Android程序中像素(px)跟单位dp(di…
    publicclassUnitTransformUtil{publicstaticintdip2px(Contextcontext,floatdpValue){finalfloatscale=context.getResources().getDisplayMetrics().density;......
  • Android Paint和Color类
      setAntiAlias:设置画笔的锯齿效果。   setColor:设置画笔颜色   setARGB: 设置画笔的a,r,p,g值。   setAlpha: 设置Alpha值   setTextSize:设置字体尺寸。   setStyle: 设置画笔风格,空心或者实心。   setStrokeWidth:设置空心的边框......
  • Android 应用开发之(StrictM…
    最新的Android平台中(Android2.3起),新增加了一个新的类,叫StrictMode(android.os.StrictMode)。这个类可以用来帮助开发者改进他们编写的应用,并且提供了各种的策略,这些策略能随时检查和报告开发者开发应用中存在的问题,比如可以监视那些本不应该在主线程中完成的工作或者其他的一些......
  • Android裁剪图片为圆形图片
    以前在论坛中找过裁剪图片为圆形图片的方法,但是效果都不是很理想,这几天因为公司业务的要求,需要对头像进行裁剪以圆形的方式显示,这个方法是根据传入的图片的高度(height)和宽度(width)决定的,如果是width<=height时,则会裁剪高度,裁剪的区域是宽度不变高度从顶部到宽度width的长度;如果......
  • Android开发多线程断点续传下载器
    111Android开发多线程断点续传下载器分类: Android 2011-10-0123:14931人阅读 评论(8) 收藏 举报使用多线程断点续传下载器在下载的时候多个线程并发可以占用服务器端更多资源,从而加快下载速度,在下载过程中记录每个线程已拷贝数据的数......
  • hadoop平台安装
    Hadoop平台安装1.实验一:Linux操作系统环境设置1.1.实验目的完成本实验,您应该能够:掌握linux操作系统环境设置掌握hadoop安装的环境要求1.2.实验要求熟悉常用Linux操作系统命令熟悉hadoop安装的环境了解linux修改系统变量命令及各参数1.3.实验环境本实验所......
  • android开发中使用GZIP压缩传输
    1.class=javaname="code">HTTP压缩可以大大提高浏览网站的速度,它的原理是,在客户端请求网页后,从服务器端将网页文件压缩,再下载到客户端,由客户端的浏览器负责解压缩并浏览。相对于普通的浏览过程HTML,CSS,Javascript,Text,它可以节省40%左右的流量。更为重要的是,它可以对动......
  • android有序广播和无序广播的区别
    BroadcastReceiver所对应的广播分两类:普通广播和有序广播。普通广播通过Context.sendBroadcast()方法来发送。它是完全异步的。所有的receivers接收器的执行顺序不确定。  因此,所有的receivers接收器接收broadcast的顺序不确定。这种方式效率更......