位置: 编程技术 - 正文

Android Http请求方法汇总

编辑:rootadmin

推荐整理分享Android Http请求方法汇总,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

这篇文章主要实现了在Android中使用JDK的HttpURLConnection和Apache的HttpClient访问网络资源,服务端采用python&#;flask编写,使用Servlet太麻烦了。关于Http协议的相关知识,可以在网上查看相关资料。代码比较简单,就不详细解释了。

1. 使用JDK中HttpURLConnection访问网络资源

(1)get请求

?publicString executeHttpGet() { String result = null; URL url = null; HttpURLConnection connection = null; InputStreamReader in = null; try{ url = newURL(" connection = (HttpURLConnection) url.openConnection(); in = newInputStreamReader(connection.getInputStream()); BufferedReader bufferedReader = newBufferedReader(in); StringBuffer strBuffer = newStringBuffer(); String line = null; while((line = bufferedReader.readLine()) != null) { strBuffer.append(line); } result = strBuffer.toString(); } catch(Exception e) { e.printStackTrace(); } finally{ if(connection != null) { connection.disconnect(); } if(in != null) { try{ in.close(); } catch(IOException e) { e.printStackTrace(); } } } returnresult; }

注意:因为是通过android模拟器访问本地pc服务端,所以不能使用localhost和.0.0.1,使用.0.0.1会访问模拟器自身。Android系统为实现通信将PC的IP设置为.0.2.2

(2)post请求

?publicString executeHttpPost() { String result = null; URL url = null; HttpURLConnection connection = null; InputStreamReader in = null; try{ url = newURL(" connection = (HttpURLConnection) url.openConnection(); connection.setDoInput(true); connection.setDoOutput(true); connection.setRequestMethod("POST"); connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); connection.setRequestProperty("Charset", "utf-8"); DataOutputStream dop = newDataOutputStream( connection.getOutputStream()); dop.writeBytes("token=alexzhou"); dop.flush(); dop.close(); in = newInputStreamReader(connection.getInputStream()); BufferedReader bufferedReader = newBufferedReader(in); StringBuffer strBuffer = newStringBuffer(); String line = null; while((line = bufferedReader.readLine()) != null) { strBuffer.append(line); } result = strBuffer.toString(); } catch(Exception e) { e.printStackTrace(); } finally{ if(connection != null) { connection.disconnect(); } if(in != null) { try{ in.close(); } catch(IOException e) { e.printStackTrace(); } } } returnresult; }

如果参数中有中文的话,可以使用下面的方式进行编码解码:

?URLEncoder.encode("测试","utf-8")URLDecoder.decode("测试","utf-8");

2.使用Apache的HttpClient访问网络资源(1)get请求

?publicString executeGet() { String result = null; BufferedReader reader = null; try{ HttpClient client = newDefaultHttpClient(); HttpGet request = newHttpGet(); request.setURI(newURI( " HttpResponse response = client.execute(request); reader = newBufferedReader(newInputStreamReader(response .getEntity().getContent())); StringBuffer strBuffer = newStringBuffer(""); String line = null; while((line = reader.readLine()) != null) { strBuffer.append(line); } result = strBuffer.toString(); } catch(Exception e) { e.printStackTrace(); } finally{ if(reader != null) { try{ reader.close(); reader = null; } catch(IOException e) { e.printStackTrace(); } } } returnresult; }

(2)post请求

?publicString executePost() { String result = null; BufferedReader reader = null; try{ HttpClient client = newDefaultHttpClient(); HttpPost request = newHttpPost(); request.setURI(newURI(" List<NameValuePair> postParameters = newArrayList<NameValuePair>(); postParameters.add(newBasicNameValuePair("token", "alexzhou")); UrlEncodedFormEntity formEntity = newUrlEncodedFormEntity( postParameters); request.setEntity(formEntity); HttpResponse response = client.execute(request); reader = newBufferedReader(newInputStreamReader(response .getEntity().getContent())); StringBuffer strBuffer = newStringBuffer(""); String line = null; while((line = reader.readLine()) != null) { strBuffer.append(line); } result = strBuffer.toString(); } catch(Exception e) { e.printStackTrace(); } finally{ if(reader != null) { try{ reader.close(); reader = null; } catch(IOException e) { e.printStackTrace(); } } } returnresult; }Android Http请求方法汇总

3.服务端代码实现上面是采用两种方式的get和post请求的代码,下面来实现服务端的代码编写,使用python&#;flask真的非常的简单,就一个文件,前提是你得搭建好python&#;flask的环境,代码如下:

?#coding=utf-8 importjsonfromflask importFlask,request,render_template app =Flask(__name__) defsend_ok_json(data=None): ifnot data: data ={} ok_json ={'ok':True,'reason':'','data':data} returnjson.dumps(ok_json) @app.route('/data/get/',methods=['GET'])defdata_get(): token =request.args.get('token') ret ='%s**%s' %(token,'get') returnsend_ok_json(ret) @app.route('/data/post/',methods=['POST'])defdata_post(): token =request.form.get('token') ret ='%s**%s' %(token,'post') returnsend_ok_json(ret) if__name__ =="__main__": app.run(host="localhost",port=,debug=True)

运行服务器,如图:

4. 编写单元测试代码右击项目:new–》Source Folder取名tests,包名是:com.alexzhou.androidhttp.test(随便取,没有要求),结构如图:

在该包下创建测试类HttpTest,继承自AndroidTestCase。编写这四种方式的测试方法,代码如下:

?publicclass HttpTest extendsAndroidTestCase { @Override protectedvoid setUp() throwsException { Log.e("HttpTest", "setUp"); } @Override protectedvoid tearDown() throwsException { Log.e("HttpTest", "tearDown"); } publicvoid testExecuteGet() { Log.e("HttpTest", "testExecuteGet"); HttpClientTest client = HttpClientTest.getInstance(); String result = client.executeGet(); Log.e("HttpTest", result); } publicvoid testExecutePost() { Log.e("HttpTest", "testExecutePost"); HttpClientTest client = HttpClientTest.getInstance(); String result = client.executePost(); Log.e("HttpTest", result); } publicvoid testExecuteHttpGet() { Log.e("HttpTest", "testExecuteHttpGet"); HttpClientTest client = HttpClientTest.getInstance(); String result = client.executeHttpGet(); Log.e("HttpTest", result); } publicvoid testExecuteHttpPost() { Log.e("HttpTest", "testExecuteHttpPost"); HttpClientTest client = HttpClientTest.getInstance(); String result = client.executeHttpPost(); Log.e("HttpTest", result); }}

附上HttpClientTest.java的其他代码:

?publicclass HttpClientTest { privatestatic final Object mSyncObject = newObject(); privatestatic HttpClientTest mInstance; privateHttpClientTest() { } publicstatic HttpClientTest getInstance() { synchronized(mSyncObject) { if(mInstance != null) { returnmInstance; } mInstance = newHttpClientTest(); } returnmInstance; } /**...上面的四个方法...*/}

现在还需要修改Android项目的配置文件AndroidManifest.xml,添加网络访问权限和单元测试的配置,AndroidManifest.xml配置文件的全部代码如下:

?<manifestxmlns:android=" package="com.alexzhou.androidhttp" android:versionCode="1" android:versionName="1.0"> <uses-permissionandroid:name="android.permission.INTERNET"/> <uses-sdk android:minSdkVersion="8" android:targetSdkVersion=""/> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme"> <uses-libraryandroid:name="android.test.runner"/> <activity android:name=".MainActivity" android:label="@string/title_activity_main"> <intent-filter> <actionandroid:name="android.intent.action.MAIN"/> <categoryandroid:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> </application> <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.alexzhou.androidhttp"/> </manifest>

注意:android:name=”android.test.InstrumentationTestRunner”这部分不用更改android:targetPackage=”com.alexzhou.androidhttp”,填写应用程序的包名

5.测试结果展开测试类HttpTest,依次选中这四个测试方法,右击:Run As–》Android Junit Test。(1)运行testExecuteHttpGet,结果如图:(2)运行testExecuteHttpPost,结果如图:(3)运行testExecuteGet,结果如图:(4)运行testExecutePost,结果如图:

转载请注明来自:Alex Zhou,本文链接:

使用php作为桥梁让android客户端和mysql数据库进行通信 首先,我发现我越来越喜欢写程序了,这是一种很好的状态,加油!我的开发环境:MacPROXAMPP安装之后有了mysql和apache,启动mysql和apache,如果无法启动ap

Material Design控件使用(四) 本文要实现内容移动时,标题栏自动缩小/放大的效果,效果如下:控件介绍这次需要用到得新控件比较多,主要有以下几个:*CoordinatorLayout组织它的子v

获取控件的宽和高 一:自定义MyImageView继承ImageView/***这个类纯粹是为了看到控件的onMeasure方法和onDraw方法的执行情况*任何控件都是同一个道理*@authorAdministrator**/publicclassMy

标签: Android Http请求方法汇总

本文链接地址:https://www.jiuchutong.com/biancheng/378039.html 转载请保留说明!

上一篇:解决首次安装android sdk platform-tools文件夹下adb命令无法运行(首次安装操作系统称为什么盘)

下一篇:Material Design控件使用(四)(.material design)

  • 什么是增值税扣缴义务
  • 专款专用需要缴纳企业所得税吗?
  • 购入生产线属于什么费用
  • 一般纳税人建筑工程税率是多少
  • 销售收入计入其他应付款
  • 应收分保合同准备材料
  • 800多项进口关税减免
  • 政府补贴项目账务怎么做
  • 发票上的税额和报税的数不一样,按照哪个报
  • 国税代开增值税专票开错了如何处理?
  • 商业保险和交强险区别
  • 取得专用发票不交增值税
  • 对外投资增长过快
  • 未在规定期限内发出追索通知
  • 已认证的发票开红字红发要去税局吗
  • 小企业 企业所得税
  • 未分配利润期末余额怎么算出来
  • 企业收付款流程图
  • 核销坏账的会计处理分录
  • 企业向个人借款支付的利息
  • 本年固定资产投资额与不良贷款的关系
  • 审计报告与汇缴报告
  • 车间日常维修费用计入什么科目
  • 结转人工费会计分录
  • win7系统中如何关闭触摸屏声音
  • 虎杖的养殖方法和用量
  • 怎么光驱重装系统
  • sinutrain破解版
  • 期间费用的会计科目
  • 购买性支出和转移性支出的区别可以归纳为()
  • 存货报废如何账务处理
  • vue router
  • 有关五险一金的知识
  • 2023前端面试题csdn
  • 司法拍卖所购的房产
  • 增值税附加税的税率
  • uniapp跨域解决方案
  • 搭建小技巧
  • 什么时候需要结转损益
  • 生活垃圾处理费标准
  • 外贸企业账务处理方法
  • 个人综合所得汇算申报流程
  • 供应商质量考核评估表样板
  • phpcms生成html
  • 织梦怎么用
  • MySQL数据库存储引擎
  • mysql命令的常用参数包括什么
  • 向境外机构支付的服务费税收政策
  • 赔偿支出需要纳税调整吗
  • 纳税人提供不动产经营租赁服务增值税征收管理暂行办法
  • 资本公积含义
  • 建筑企业预缴所得税税率是多少
  • 行政事业单位银行开户规定
  • 寄售商店代销寄售物品的税率
  • 税控盘没有抄税是什么意思
  • 残保金怎么做账务处理
  • 建设期收到罚单怎么处罚
  • 公司租用房屋用交房产税吗
  • 民间非营利组织会计制度及操作实务
  • 用SQL统计SQLServe表存储空间大小的代码
  • centos7内存占用大
  • WZCSLDR.exe - WZCSLDR是什么进程
  • win10预览版和正式版区别
  • centos安装lvm
  • win7系统的电脑能装win10吗
  • tplinkwr740n设置
  • 在linux系统中拥有
  • cocos2d drawcall
  • react用什么ui
  • jquery地址
  • 电脑自动重启命令
  • 创建一个新用户user1,设置其主目录为/home/user1:
  • mailto的使用技巧分享
  • unity androidx
  • 宁波增值税普通发票有几联发票
  • 车船税完税证明开具如何开具
  • 宿州税务总局
  • 耕地占用税 湖北
  • 车船税与船舶吨税法律制度ppt
  • 如何查询甘肃省博物馆预约成功
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设