位置: 编程技术 - 正文

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)

  • 土地增值税应纳税额如何计算
  • 外出经营涉税事项报告
  • 外地预缴的增值税要在本地计算附加税吗?
  • 稳岗补贴给谁
  • 固定资产一次性折旧的账务处理和税务处理
  • 软件行业个人所得税
  • 劳务费税后算税前公式
  • 汽车按揭费用收合法吗?
  • 非居民企业所得税
  • 建设工程项目融资
  • 记账时显示期初未建账
  • 利息费用需要取消吗
  • 增值税普票跨年重开风险
  • 递延所得税资产和负债怎么理解
  • 新办企业需要做什么
  • 预收房款不征税发票
  • 银行对账单是否属于会计档案
  • 出口的增值税到底怎么算的
  • 公司审计期间
  • 个人垫付汽车修理怎么办
  • 租入房屋修缮费用谁承担
  • 汇算清缴所得税退回做账
  • mac电脑command键快捷设置
  • 贴现利息会计处理
  • 华为设置输入法手写
  • vue+cesium怎么实现地图的加载
  • 公司买了一辆二手汽车,怎么入账
  • 坏账准备的会计科目
  • 最有艺术气质的动物
  • 换出长期股权投资的会计处理
  • 星空下的灯塔作文
  • php如何上传1个g以上的文件
  • 未开票收入申报对企业有什么影响
  • unix时间戳长度
  • vue中的$el
  • tree命令常用参数
  • 合伙结算转借款
  • 生产辅料怎么分类
  • 外勤会计是做什么的
  • 收取水电费计入什么科目
  • 个人所得税核定征收税率
  • 购买原材料运输费的增值税计入什么科目
  • 缴税零申报
  • 利润表中的利息费用是利息支出吗
  • 固定资产一次性计入费用的账务处理
  • 存货跌价准备是什么意思
  • 营业外收入可以冲减管理费用吗
  • 办理食品经营许可证需要什么条件
  • 装修公司进的材料怎么做分录
  • 领用包装物用于包装产品的会计分录
  • 公允价值变动损益
  • 企业所得税虚报成本多少属于犯罪
  • 销售商品提供劳务收到的现金占比怎么算
  • 企业购买加油卡出售怎么做账
  • 滴滴出行怎么开纸质发票
  • 什么叫归集和分配
  • sqlserver数据库怎么导出
  • explain分析sql效率的方法
  • win10系统崩溃怎么修复开不了机
  • windows查找命令
  • xp系统怎么打开开机启动项
  • 系统占用90g怎么删
  • linux系统要求配置
  • linux根文件系统直接解压到硬盘
  • linux 去除换行
  • 如何查看win7系统
  • 解决出现的问题下一句,欢迎的语气
  • cocoscreator lua
  • java物流管理系统
  • unity账号登录
  • python爆破脚本
  • Python通过DOM和SAX方式解析XML的应用实例分享
  • 从零基础开始
  • great 搬运工
  • 浙里办怎么给小孩子缴医保费
  • 百旺税控盘口令认证失败pin锁定怎么办
  • 政府收储土地需要缴纳什么税
  • 新开公司交印花税
  • 财税2016年47号文件中的劳务派遣
  • 税务局签合同
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设