由于近期网上搜索了很多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的更多相关文章

  1. Java和Android Http连接程序:使用java.net.URL 下载服务器图片到客户端

    Java和Android Http连接程序:使用java.net.URL 下载服务器图片到客户端 本博客前面博文中利用org.apache.http包中API进行Android客户端HTTP连接的例子 ...

  2. android DDMS 连接真机(己ROOT),用file explore看不到data/data文件夹的解决办法

    android DDMS 连接真机(己ROOT),用file explore看不到data/data文件夹的解决办法 问题是没有权限,用360手机助手或豌豆荚也是看不见的. 简单的办法是用RE文件管理 ...

  3. Android 网络连接判断与处理

    Android网络连接判断与处理  获取网络信息需要在AndroidManifest.xml文件中加入相应的权限. <uses-permission android:name="and ...

  4. android手机连接PC无法正常安装驱动

    工作当中我们经常会遇到Android手机连接PC的时候无法正确安装驱动,或者安装失败.当然找到正确的驱动文件时首选的解决方案,如果正确的驱动文件依旧无法安装成功我们可以打开我的电脑-->属性-- ...

  5. android - 模拟器连接本地tomcat

    在使用android真机试图连接本地的tomcat的时候,发现一直没有反应.网上搜了很多资料,加上自己不断测试,后来发现模拟器访问tomcat的时候,ip的概念跟在pc上访问tomcat用的ip,根本 ...

  6. Android设备连接Unity Profiler性能分析器

    Unity提供两种方式让Developer的Android设备连接Profiler进行性能分析: 1.通过wifi,Android设备和计算机处于同一个Wlan中. 2.通过USB ADB 普通情况我 ...

  7. Android Studio软件技术基础 —Android项目描述---1-类的概念-android studio 组件属性-+标志-Android Studio 连接真机不识别其他途径

    学习android对我来说,就是兴趣,所以我以自己的兴趣写出的文章,希望各位多多支持!多多点赞,评论讨论加关注. 最近有点忙碌,对于我来说,学习Android开发,是对于我的考验,最近一位大佬发给我一 ...

  8. Android Studio连接手机调试教程已决解

    Android Studio连接手机调试教程 Windows电脑连接安卓手机需要下载安装驱动,确保电脑联上网络. 准备条件: 1.电脑上安装应用宝软件. 2.手机开发者选项里面打开USB调试,USB安 ...

  9. Android Studio连接真机没反应?

    刚好遇到这个问题,在网上百度了一下,看到有人分享了引起该问题的几个原因: 手机设置问题.开USB调试 方法: 手机设置 - 开发人员选项 - USB调试 - 勾选 数据线问题. 有的数据线只能用来充电 ...

随机推荐

  1. int **a 和 int (*a)[]的区别

    关于理论知识隔壁们的教程说的很详细了我就不多赘述了.我这边主要贴一段代码来看看这两种东西使用上的区别到底在哪. #include <stdio.h> int main(int argc, ...

  2. 【起航计划 026】2015 起航计划 Android APIDemo的魔鬼步伐 25 App->Notification->Status Bar 状态栏显示自定义的通知布局,省却声音、震动

    这个例子的Icons Only 和 Icons and marquee 没有什么特别好说明的. 而Use Remote views in balloon 介绍了可以自定义在Extended Statu ...

  3. 《ArcGIS Runtime SDK for Android开发笔记》——翻译:ArcGIS Runtime SDK for Android 10.2.7发布

    ArcGIS Runtime SDK for Android v10.2.7 released by Dan O'Neill on October 1, 2015(发布时间:2015年10月1日) W ...

  4. springboot 修改和设置 banner

    springboot 修改和设置 banner 先上图 修改步骤 1.在src/main/resources下新建一个banner.txt文档 2.通过http://patorjk.com/softw ...

  5. java,eclipse中如何添加httpclient.jar

    1.Download 'Binary' package of the latest official release from the project download page. There sho ...

  6. 洛谷 P1509 找啊找啊找GF

    题目背景 "找啊找啊找GF,找到一个好GF,吃顿饭啊拉拉手,你是我的好GF.再见." "诶,别再见啊..." 七夕...七夕...七夕这个日子,对于sqybi这 ...

  7. ring0 SSDTHook

    SSDT 的全称是 System Services Descriptor Table,系统服务描述符表.这个表就是一个把 Ring3 的 Win32 API 和 Ring0 的内核 API 联系起来. ...

  8. C语言总结的知识点

    什么是有效数字? ------------------------- 数据类型 运算符: 函数: 程序结构: 存储结构 内存管理 关键字: ------------------------- C语言: ...

  9. Python OOP 面向对象

    1.Python实现OOP可以概括为三个概念: 继承:基于Python属性查找 多态:在x.method中,method的意义取决于x的类型 封装:方法和运算符实现行为,数据隐藏是一种惯例 2.委托: ...

  10. Javascript作业—数组去重(要求:原型链上添加函数)

    数组去重(要求:原型链上添加函数) <script> //数组去重,要求:在原型链上添加函数 //存储不重复的--仅循环一次 if(!Array.prototype.unique1){ A ...