位置: 编程技术 - 正文

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)

  • 土地税房产税会计分录
  • 库存股增加为什么资产减少
  • 农民专业合作社属于什么企业类型
  • 个税申报错误已过申报期怎么修改
  • 劳动合同和劳务合同有什么区别 举例
  • 期末资产负债
  • 公司注销投资款退回给股东,附言写什么
  • 分公司可以参股其他公司吗
  • 外商独资企业资本金的使用
  • 预算基数是什么
  • 无形资产减值是否可以转回
  • 计提折旧需要减去预计净残值吗
  • 运输企业桥票怎么做会计分录
  • 农民合作社缴附加税吗
  • 企业清算期间留抵的税额如何做会计处理?
  • 土地增值税哪些可以加计扣除
  • 转让购入的设备税率
  • 小规模纳税人没有收入怎么报税
  • 旅游公司发票企业能报销吗
  • 招聘时开具的专用发票可以抵扣吗?
  • 期初建账实验步骤
  • 质押股票是否缴印花税
  • 房产企业开发产品出租
  • 企业销售产品的会计分录
  • 公户没有开票进账了可以吗
  • 代付租金委托书怎么写
  • win 安全
  • 收到违反合同的违约金
  • 刚成立的公司有什么风险
  • randomdigits.exe - randomdigits是什么进程 有什么用
  • linux的命令行指的是什么
  • php readfile
  • php动态页面实例
  • 发行股票溢价计入哪里
  • 退休费用会计分录
  • coded language
  • 劳务费可以抵扣进项吗
  • 防伪税控服务费怎么交
  • 虚开增值税怎么查到的
  • sap abap入门
  • uniapp宽度
  • ai复制命令
  • 专票地址错了要作废吗
  • 企业收到税务退税通知书
  • 参展费可以抵扣吗
  • 低值易耗品在年报上怎么看的
  • 资产损失税前扣除最新政策2021
  • 单位全额承担社保能税前扣除吗
  • mysql数据库优化及sql调优
  • 航天税盘服务费开的普票可以抵税吗
  • 汇算清缴时发现收入少了
  • 贷方账户日累计金额超限什么意思
  • 借款利息税前扣除应当注意的三个问题
  • 汇算清缴后取得上一年发票
  • 公司购车按揭利率是多少
  • 招标代理服务费取费标准
  • 招待费的增值税怎么算
  • 无形资产研究阶段发生的支出应该全部费用化
  • 可变现净值是什么意思
  • 小规模纳税人劳务费税率
  • 成本收入率和收入成本率的区别
  • windows10怎样安装
  • xp系统怎么弄成win7
  • vi编辑器是干什么的
  • 如何手动设置定位
  • Windows 8.1 RT Update 3更新将于9月发布
  • 举例说明linux的主要应用领域
  • node.js加密
  • 为什么调用不了函数
  • linux查找功能
  • ecmascript6教程
  • 利用python做一个文字小游戏
  • 超级给力的好人有哪些
  • 建立虚拟局域网有什么好处
  • 安卓手机管家推荐
  • 广告费属于什么会计科目
  • 什么叫税务备案
  • 学费报销找学校哪个部门
  • 税务局函调情况说明
  • 湖北低保查询网站官网
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设