Android Kotlin 连接 http
由于近期网上搜索了很多Android连接到http的方法, 可是2013年以前的方法现在都不能用了,要么报错,要么被遗弃,岁月留下来的东西只能自己整理了。
其实很简单,就一个HttpUtil通用类。可以实现Get和Post方法,其他东西,里面可以随便改改,基本就这样吧。
参数的话,我用了一个 strUrlPath网址、params键值对、encode编码(如utf-8)。
package Util import android.os.Handler
import android.os.Message
import android.view.View
import android.widget.Button
import java.io.BufferedReader
import java.io.ByteArrayOutputStream
import java.io.IOException
import java.io.InputStream
import java.io.InputStreamReader
import java.io.OutputStream
import java.net.HttpURLConnection
import java.net.MalformedURLException
import java.net.URL
import java.net.URLEncoder /**
* Created by Jason_Jan on 2017/7/5.
*/ object HttpUtil { private var handler: Handler? = null
private var my_result: String? = null fun httpGet(strUrlPath: String, params: Map<String, String>, encode: String): String {
var strUrlPath = strUrlPath
/* byte[] data = getRequestData(params, encode).toString().getBytes();//获得请求体*/
/* String target="http://emb.mobi/register";*/
var result: String? = null
val append_url = getRequestData(params, encode).toString()
strUrlPath = strUrlPath + "?" + append_url
try {
val url = URL(strUrlPath)
val urlConn = url.openConnection() as HttpURLConnection
urlConn.connectTimeout = 5000//超时时间
urlConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded")//设置头部信息,其实没什么用 //主角开始登场,不注意就是几个小时的调试,输入流
val `in` = InputStreamReader(urlConn.inputStream) val buffer = BufferedReader(`in`)
var inputLine: String? = null
//循环逐行读取输入流中的内容 result = ""//每次清空数据 while (buffer.readLine().apply { inputLine = this } != null) {
result += inputLine!! + "\n"
} `in`.close()
urlConn.disconnect() } catch (e: MalformedURLException) {
e.printStackTrace()
} catch (ioe: IOException) {
ioe.printStackTrace()
return "err:" + ioe.message.toString()
} return result!! } private fun getRequestData(params: Map<String, String>, encode: String): StringBuffer {
val stringBuffer = StringBuffer() //存储封装好的请求体信息
try {
for ((key, value) in params) {
stringBuffer.append(key)
.append("=")
.append(URLEncoder.encode(value, encode))
.append("&")
}
stringBuffer.deleteCharAt(stringBuffer.length - 1) //删除最后的一个"&"
} catch (e: Exception) {
e.printStackTrace()
} return stringBuffer
} fun httpPost(strUrlPath: String, params: Map<String, String>, encode: String): String {
val data = getRequestData(params, encode).toString().toByteArray()
try {
val url = URL(strUrlPath) val http = url.openConnection() as HttpURLConnection
http.connectTimeout = 5000
http.doInput = true
http.doOutput = true
http.requestMethod = "POST"
http.useCaches = false//使用post方式不能用缓存
//设置请求体的类型是文本类型
http.setRequestProperty("Content-Type", "application/x-www-form-urlencoded")
//设置请求体的长度
http.setRequestProperty("Content-Length", data.size.toString())
//获得输出流,向服务器写入数据
val out = http.outputStream
out.write(data) val response = http.responseCode
if (response == HttpURLConnection.HTTP_OK) {
val inputStream = http.inputStream
return dealResponseResult(inputStream)
} } catch (ioe: IOException) {
ioe.printStackTrace()
return "err:" + ioe.message.toString()
} return "-1"
} fun dealResponseResult(inputStream: InputStream): String {
var resultData: String? = null //存储处理结果
val byteArrayOutputStream = ByteArrayOutputStream()
val data = ByteArray(1024)
var len = 0
try {
while (inputStream.read(data).apply { len = this } != -1) {
byteArrayOutputStream.write(data, 0, len)
}
} catch (e: IOException) {
e.printStackTrace()
} resultData = String(byteArrayOutputStream.toByteArray())
return resultData
}
}
使用方式很简单--HttpUtil.方法名(参数),返回一个string,之后用Json解析工具来解析。
其次重中之重,安卓网络连接有点坑。下面从两个方面谈谈。
1.getoutputstream这里,一直报错。解决方案:build.gradle
compile 'com.squareup.retrofit:retrofit:1.8.0'
compile 'com.squareup.okhttp:okhttp:2.1.0'
compile 'com.squareup.okhttp:okhttp-urlconnection:2.1.0'
2.其次,在AndroidManifest.xml中
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
Android Kotlin 连接 http的更多相关文章
- Java和Android Http连接程序:使用java.net.URL 下载服务器图片到客户端
Java和Android Http连接程序:使用java.net.URL 下载服务器图片到客户端 本博客前面博文中利用org.apache.http包中API进行Android客户端HTTP连接的例子 ...
- android DDMS 连接真机(己ROOT),用file explore看不到data/data文件夹的解决办法
android DDMS 连接真机(己ROOT),用file explore看不到data/data文件夹的解决办法 问题是没有权限,用360手机助手或豌豆荚也是看不见的. 简单的办法是用RE文件管理 ...
- Android 网络连接判断与处理
Android网络连接判断与处理 获取网络信息需要在AndroidManifest.xml文件中加入相应的权限. <uses-permission android:name="and ...
- android手机连接PC无法正常安装驱动
工作当中我们经常会遇到Android手机连接PC的时候无法正确安装驱动,或者安装失败.当然找到正确的驱动文件时首选的解决方案,如果正确的驱动文件依旧无法安装成功我们可以打开我的电脑-->属性-- ...
- android - 模拟器连接本地tomcat
在使用android真机试图连接本地的tomcat的时候,发现一直没有反应.网上搜了很多资料,加上自己不断测试,后来发现模拟器访问tomcat的时候,ip的概念跟在pc上访问tomcat用的ip,根本 ...
- Android设备连接Unity Profiler性能分析器
Unity提供两种方式让Developer的Android设备连接Profiler进行性能分析: 1.通过wifi,Android设备和计算机处于同一个Wlan中. 2.通过USB ADB 普通情况我 ...
- Android Studio软件技术基础 —Android项目描述---1-类的概念-android studio 组件属性-+标志-Android Studio 连接真机不识别其他途径
学习android对我来说,就是兴趣,所以我以自己的兴趣写出的文章,希望各位多多支持!多多点赞,评论讨论加关注. 最近有点忙碌,对于我来说,学习Android开发,是对于我的考验,最近一位大佬发给我一 ...
- Android Studio连接手机调试教程已决解
Android Studio连接手机调试教程 Windows电脑连接安卓手机需要下载安装驱动,确保电脑联上网络. 准备条件: 1.电脑上安装应用宝软件. 2.手机开发者选项里面打开USB调试,USB安 ...
- Android Studio连接真机没反应?
刚好遇到这个问题,在网上百度了一下,看到有人分享了引起该问题的几个原因: 手机设置问题.开USB调试 方法: 手机设置 - 开发人员选项 - USB调试 - 勾选 数据线问题. 有的数据线只能用来充电 ...
随机推荐
- python模块详解 random os
random模块 常用方法 random.random() 随机产生一个小于1的浮点数 import random print(random.random()) #0.4153761818276826 ...
- sharepoint2010列表的分页实现迅雷样式效果
利用ListItemCollectionPosition和AspNetPage分页控件实现,效果图如下: 后台分页代码如下: #region 私有方法 /// <summary> /// ...
- java学习笔记之基础知识
1.class不加修饰符默认default,只在当前包里能用. 2.构造函数前面的修饰符的作用类似class的,限制引用的权限. 3.java对象的创建其实就是类的实例化,类的实例化就是在堆上copy ...
- 《最牛B的Linux Shell命令》笔记
1.以sudo 运行上一条命令 sudo !! 大家应该都知sudo,不解释.但通常出现的情况是,敲完命令执行后报错才发现忘了sudo.如下: ➜ ~ cp ~/download/CentOS7-Ba ...
- soap使用xml调用webapi后返回xml信息进行JSON转换处理,以顺丰查询接口为例
expressUrl = string.Format(可以卸载配置文件的域名URL + "/bsp-oisp/ws/expressService"); StringBuilder ...
- AJAX(三):GET与POST
1.使用场景get是最常见的请求类型,最常用于向服务器查询某些信息仅次于get的是post请求,通常用于向服务器发送应该被保存的数据 2.使用get请求经常会发生一个错误,就是查询字符串的个是有问题, ...
- 1.4 配置备份策略(Policy)
1.1 配置备份策略(Policy) 一个备份策略由四部分组成. Attributes(属性) Policy是否Active Policy类型 由此Policy产生的任务的优先级 使用的Storage ...
- burpsuite 出现 ssl_error_no_cypher_overlap
解决方案一:1.浏览器地址栏输入 about:config2.查找 security.tls.version.fallback-limit 和 security.tls.version.min,并将值 ...
- 旧文备份:怎样利用好单片机上的存储器资源来实现OD的存储与访问
我们知道OD(对象字典)是CANopen的核心,所有功能都是围绕它开展的,是协议栈的数据中心,良好的OD实现是协议栈高效稳定运行的基础,而OD的实现最基本的一点就是怎么去保存它.因为OD的内容比较杂, ...
- Django之模型(model)中的choices字段的使用
转载自:http://quke.org/post/django-model-choices.html Django模型中的字段有个choices属性,这个属性可以提供被选数据,choices的参数是一 ...