android开发,使用kotlin学习HTTP访问网络

简介: android开发,使用kotlin学习HTTP访问网络



HTTP协议的简介

在日常生活中,我们使用手机APP时,APP展示的数据基本上都是通过网络接口从服务器中获取的。

HTTP是一种请求/响应模式的协议,当客户端与在服务器建立连接后,向服务器发送请求,称为HTTP请求,服务器收到请求后会做出响应,称为HTTP响应

HTTP协议的请求

HTTP有两种常用的请求方式,它们分别是GET,POST。

  • GET:请求指定的页面消息,并返回实体主体。
  • POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件),数据被包含在请求体中。POST请求可能会导致新的资源的·建立或已有资源的修改。

GET和POST的区别

  1. GET提交的数据会放在URL之后,以“?”分隔URL和传输数据,参数以“&”相连,如EditPosts.aspx?name=text1&id=123456。POST是把提交的数据放在HTTP包的主体中。
  2. GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST提交的数据没有限制。
  3. GET提交的数据会带来安全问题,比如一个登录页面,通过GET请求方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问这台服务器,就可以从历史记录获取该用户的用户名和密码。

使用httpURLConnection访问网络

1.url:包含请求地址的类

  • URL(path):包含请求路径的构造方法
  • openConnection():得到连接对象

2.HttpURLConnection:代表与服务器连接的类

  • requestMethod:设置请求方式,有GET和POST
  • requestTimeout:设置连接超时时间,单位为ms
  • readTimeout:设置读取服务器放回数据的时间
  • 断开连接():断开连接

3.HttpURLConnection的使用

在分线程,发送请求,得到响应数据

1.得到路径,创建URL对象。

val url=URL("https://www.baidu.com")

2.打开连接,得到HttpURLConnection对象

connection=url.openConnection() as HttpURLConnection

3.设置请求

GET:

connection.requestMethod="GET"

POST :

connection.requestMethod="POST"
val output=DataOutputStream(connection.outputStream)
output.writeBytes("username=admin&password=123456")

4.设置秒连接超时,读取数据超时

connection.connectTimeout=8000
connection.readTimeout=8000

5.得到InputStream,并读取成String

val input=connection.inputStream
val reader=BufferedReader(InputStreamReader(input))
reader.use {
        reader.forEachLine {
        response.append(it)
        }
}

6.断开连接

connection?.disconnect()

7.声明网络权限

<uses-permission android:name="android.permission.INTERNET" />

4.练习

(要在有网络的模型机)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".HttpActivity">
    <Button
        android:id="@+id/sendRequestBtn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="发送请求"
        />
    <ProgressBar
        android:id="@+id/progress1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <TextView
            android:id="@+id/responseText"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>
    </ScrollView>
</LinearLayout>
class HttpActivity : AppCompatActivity() {
    lateinit var send:Button
    lateinit var responseText:TextView
    lateinit var progressBar1:ProgressBar
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_http)
        send=findViewById(R.id.sendRequestBtn)
        responseText=findViewById(R.id.responseText)
        progressBar1=findViewById(R.id.progress1)
        progressBar1.visibility=View.INVISIBLE
        send.setOnClickListener {
            progressBar1.visibility=View.VISIBLE
            sendRequestWithHttpURLConnection()
        }
    }
    private fun sendRequestWithHttpURLConnection() {
        thread{
            var connection:HttpURLConnection?=null
            try {
                val response=StringBuilder()
                val url=URL("https://www.baidu.com")
                connection=url.openConnection() as HttpURLConnection
                connection.requestMethod="GET"
                connection.connectTimeout=8000
                connection.readTimeout=8000
                val input=connection.inputStream
                val reader=BufferedReader(InputStreamReader(input))
                reader.use {
                        reader.forEachLine {
                            response.append(it)
                        }
                    }
                showResponse(response.toString())
            }catch (e:Exception){
                e.printStackTrace()
            }finally {
                progressBar1.visibility=View.INVISIBLE
                connection?.disconnect()
            }
        }
    }
    private fun showResponse(response: String) {
        runOnUiThread {
            responseText.text=response
        }
    }
}
<uses-permission android:name="android.permission.INTERNET" />

使用OkHttp访问网络

OkHttp不仅在接口封装上做得简单易用,就连在底层实现上也是自成一派,比起HttpURLConnection有过之而无不及。

OkHttp的使用步骤:

1.添加OkHttp库的依赖

implementation 'com.squareup.okhttp3:okhttp:4.1.0'

2.创建OkHttpClient的实例

val client=OkHttpClient()

3.创建Request对象

GET:

val request=Request.Builder()
               .url("https://www.baidu.com")
              .build()

POST:

val requestBody=FormBody.Builder()
                    .add("username","admin")
                    .add("password","123456")
                    .build()
val request=Request.Builder()
                    .url("https://www.baidu.com")
                    .post(requestBody)
                    .build()

4.创建Call对象,发送请求

val response=client.newCall(request).execute()

5.得到服务器返回的数据

val responseData=response.body?.string()

简单的实例:

private fun sendRequestWithokHttp() {
        thread {
            try {
                val client=OkHttpClient()
                val request=Request.Builder()
                    .url("https://www.baidu.com")
                    .build()
                val response=client.newCall(request).execute()
                val responseData=response.body?.string()
                if(responseData!=null) {
                    showResponse(responseData)
                }
            }
            catch (e:Exception){
                e.printStackTrace()
            }
        }
    }
目录
相关文章
|
10天前
|
移动开发 JavaScript 应用服务中间件
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
86 5
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
16天前
|
移动开发 前端开发 Android开发
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
187 12
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
18天前
|
移动开发 Rust JavaScript
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
293 3
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
2月前
|
开发工具 Android开发
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
354 11
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
|
15天前
|
移动开发 Android开发
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
65 0
|
2月前
|
Java 开发工具 Maven
【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
142 6
|
4月前
|
移动开发 Java 编译器
Kotlin与Jetpack Compose:Android开发生态的演进与架构思考
本文从资深Android工程师视角深入分析Kotlin与Jetpack Compose在Android系统中的技术定位。Kotlin通过空安全、协程等特性解决了Java在移动开发中的痛点,成为Android官方首选语言。Jetpack Compose则引入声明式UI范式,通过重组机制实现高效UI更新。两者结合不仅提升开发效率,更为跨平台战略和现代架构模式提供技术基础,代表了Android开发生态的根本性演进。
136 0
|
11月前
|
SQL 安全 网络安全
网络安全与信息安全:知识分享####
【10月更文挑战第21天】 随着数字化时代的快速发展,网络安全和信息安全已成为个人和企业不可忽视的关键问题。本文将探讨网络安全漏洞、加密技术以及安全意识的重要性,并提供一些实用的建议,帮助读者提高自身的网络安全防护能力。 ####
239 17
|
11月前
|
SQL 安全 网络安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将从网络安全漏洞、加密技术和安全意识三个方面进行探讨,旨在提高读者对网络安全的认识和防范能力。通过分析常见的网络安全漏洞,介绍加密技术的基本原理和应用,以及强调安全意识的重要性,帮助读者更好地保护自己的网络信息安全。
198 10
|
11月前
|
存储 SQL 安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将介绍网络安全的重要性,分析常见的网络安全漏洞及其危害,探讨加密技术在保障网络安全中的作用,并强调提高安全意识的必要性。通过本文的学习,读者将了解网络安全的基本概念和应对策略,提升个人和组织的网络安全防护能力。

热门文章

最新文章

下一篇
开通oss服务