位置: 编程技术 - 正文

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)

  • 企业可否自行决算利润
  • 职工薪酬分配表及分录怎么做
  • 一张发票能分开做帐务处理吗
  • 小规模税控设备维护费怎么填申报表格
  • 股票分红会冲抵成本吗
  • 票面3个点什么意思
  • 企业中征码怎么办
  • 滞纳金海关
  • 已扣缴税额
  • 增值税普通发票怎么开
  • 发票冲红增值税怎么申报
  • 物业 免物业费
  • 实收资本印花税属于什么税目
  • 无形资产摊销年限平均法怎么算
  • 为什么发票查验不出
  • sd标准差是什么意思
  • 购销合同的会计分录怎么写
  • 可供出售金融资产是指什么
  • 委托加工物资增值税怎么计算
  • 购买的技术服务费需要摊销吗
  • 进项票认证超了怎么处理
  • 预缴地实现的月销售额未超过
  • 临时工工资单怎么做
  • 公司资金周转困难怎么办
  • win7无法使用管理员权限
  • 复制粘贴快捷键失效了怎么回事
  • 辅导期纳税人增值税专用发票数量不得超过
  • php文件在线解密
  • php zend
  • 应收债权与应付债务
  • php新版本特性
  • python打开文本文档中文读不出来
  • 境外企业在境内提供服务 企业所得税
  • 房产原值是否含增值税
  • 小规模纳税人核定征收标准
  • 房地产销售折扣
  • vue$router
  • 残保金由哪个部门负责稽查
  • 征地费用会计分录
  • 资金账簿印花税减半政策
  • sqlserver行列转换多行多列
  • 开增值税发票规格是否可以不用填?
  • 固定资产盘盈为什么计入盈余公积
  • 医院购买医疗器械
  • 小规模纳税人普票税率是多少
  • 金税盘减免税款分录
  • 费用暂估入账后期如何冲销
  • 普通发票税费会计分录
  • 利得和损失计入所有者权益的情况
  • 利息支出税前扣除时点
  • 制造费用可以计提吗
  • 关于投资收益纳税的说法
  • 企业管理费的计算基础
  • 未分配利润属于总账科目吗
  • 未分配利润可以转盈余公积吗
  • 明年发票可以入到今年有什么惩罚
  • 会计工作的基本步骤和主要工作
  • 简述什么是实收资本
  • 哪些人必须办理纳税登记
  • sql语句示例
  • mysql中增删改查语句
  • win8系统怎样安装
  • 计算机彻底删除文件的方法
  • freebsd ifconfig
  • win10系统d盘变成e盘,进入winpe盘符正常
  • win8怎么彻底删除软件
  • Android游戏开发实践指南
  • linux find命令的使用
  • cocos2d rpg
  • 详谈左晖
  • js 实现跳转页面
  • node exit
  • shell 捕获输出结果
  • zabbix 微信
  • PYTHON使用缩进来体现代码之间的逻辑关系
  • brook javascript框架介绍
  • 北京增值税普通发票图片
  • ca锁使用
  • 消费税是由消费者完全负担的税种
  • 百望税控盘怎么导出清单明细
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设