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调试 - 勾选 数据线问题. 有的数据线只能用来充电 ...
随机推荐
- CRM的划分
CRM提供完整的客户生命周期管理解决方案,帮助您管理各项与客户有关的事件,包括市场.销售以及客户支持等方面,优化事件处理流程,从而赢得更多客户,并提高客户满意度. 按企业经营类型划分 ...
- Android 切换主题换肤实现
思路以及实现 1.主题的切换以及实现 首先我们先来明确个概念,现在我所说的切换主题,就切换整个app的颜色风格,当然也有少部分的图片的切换.注意哦 我这边说的是少部分图片哦!如果是大面积的换图片的吧! ...
- Appium 滑动界面swipe用法
Appium 滑动API:Swipe(int start x,int start y,int end x,int y,duration) 解释:int start x-开始滑动的x坐标, int st ...
- tcpdump确认服务器连接的交换机信息
Displaying CDP info via tcpdump or snoop Cisco Discovery Protocol is a management protocol that Cisc ...
- C#保存图片到数据库并读取显示图片的方法
private void button2_Click_1(object sender, System.EventArgs e) { string pathName; if (this.openFile ...
- Microsoft EDP(enterprise database protection)配置策略中的三种Rule template
搭建Microsoft EDP环境: Microsoft 10 insider preview,Microsoft Intune,ie10(要安装插件silverlight) 这里暂时只说在进行配置策 ...
- Spring MVC框架下提交Date数据无法在controller直接接收
主要有两步,controller中添加initBinder方法,再创建一个时间类型数据转换类就OK了. 1.在Controller中创建方法: // 相关包 import java.text.Date ...
- Selenium入门10 弹出框的处理 switch_to.alert
三种弹出框alert(一个按钮),confirm(两个确认,取消),prompt(两个按钮+输入框). 切换到弹框: switch_to_alert() 新版的selenium用: brows ...
- Android(java)学习笔记141:Android下的逐帧动画(Drawable Animation)
1. 帧动画: 帧动画顾名思义,一帧一帧播放的动画就是帧动画. 帧动画和我们小时候看的动画片的原理是一样的,在相同区域快速切换图片给人们呈现一种视觉的假象感觉像是在播放动画,其实不过是N张图片在一帧一 ...
- Poj(2421),Prim最小生成树
题目链接:http://poj.org/problem?id=2421 最小生成树的变形,有的村庄已经连接了,就直接把他们的权值赋为0,一样的做最小生成树,Prim算法. #include <s ...