由于近期网上搜索了很多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. Java Knowledge series 3

    JVM & Bytecode Abstract & Object Object in Java (1) 所有东西都是对象object.可将对象想象成一种新型变量:它保存着数据,但可要求 ...

  2. linux下查找字符串

    如果你想在当前目录下 查找"hello,world!"字符串,可以这样: grep -rn "hello,world!" * * : 表示当前目录所有文件,也可 ...

  3. Struts1.x 基本原理及注册模块的实现

    1.编写JavaBean:User,必须继承于ActionForm类 package myuser; import org.apache.struts.action.ActionForm; publi ...

  4. 关于Mysql中文乱码问题该如何解决(乱码问题完美解决方案)(转)

    这篇文章给大家介绍关于Mysql中文乱码问题该如何解决(乱码问题完美解决方案)的相关资料,还给大家收集些关于MySQL会出现中文乱码原因常见的几点,小伙伴快来看看吧   最近两天做项目总是被乱码问题困 ...

  5. Python基础学习-列表基本操作

     列表:Python的“苦力”.   列表不同于元组和字条串的地方:列表是可变的——可以改变列表的内容,并且列表有很多有用的.专门的方法. 1.list函数 因为字符串不能像列表一样被修改,所有有时根 ...

  6. LeetCode OJ Palindrome Number(回文数)

    class Solution { public: bool isPalindrome(int x) { ,init=x; ) return true; ) return false; ){ r=r*+ ...

  7. C++ POD类型

    POD( Plain Old Data)概念: Arithmetic types (3.9.1), enumeration types, pointer types, and pointer to m ...

  8. 命令搜索命令whereis与which

    whereis 命令名 #搜索命令所在路径及帮助文档所在位置,只能搜索系统命令. 选项: -b: 只查找可执行文件 -m: 只查找帮助文件 whoami whatis ls #ls 是什么命令 whi ...

  9. 手动创建maven项目+cmd+webapp+tomcat

    1.创建文件夹 2.在刚刚创建的文件夹目录下:创建一个scr文件夹和pom.xml文件 3.在pom.xml配置 <?xml version="1.0" encoding=& ...

  10. Java8函数之旅 (一) 开始认识lambda

    系列之前我想说的   最近有一段时间没写博客了,这几天回到学校,才闲下来,决定写一写最近学习到的知识,既是为了分享,也是为了巩固.之前看到过一篇调查,调查说的是学习新知识,光只是看的话,知识的获取率只 ...