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()
            }
        }
    }
目录
相关文章
|
16天前
|
移动开发 Java Android开发
构建高效Android应用:探究Kotlin与Java的性能差异
【4月更文挑战第3天】在移动开发领域,性能优化一直是开发者关注的焦点。随着Kotlin的兴起,其在Android开发中的地位逐渐上升,但关于其与Java在性能方面的对比,尚无明确共识。本文通过深入分析并结合实际测试数据,探讨了Kotlin与Java在Android平台上的性能表现,揭示了在不同场景下两者的差异及其对应用性能的潜在影响,为开发者在选择编程语言时提供参考依据。
|
17天前
|
数据库 Android开发 开发者
构建高效Android应用:Kotlin协程的实践指南
【4月更文挑战第2天】随着移动应用开发的不断进步,开发者们寻求更流畅、高效的用户体验。在Android平台上,Kotlin语言凭借其简洁性和功能性赢得了开发社区的广泛支持。特别是Kotlin协程,作为一种轻量级的并发处理方案,使得异步编程变得更加简单和直观。本文将深入探讨Kotlin协程的核心概念、使用场景以及如何将其应用于Android开发中,以提高应用性能和响应能力。通过实际案例分析,我们将展示协程如何简化复杂任务,优化资源管理,并为最终用户提供更加流畅的体验。
|
26天前
|
调度 数据库 Android开发
构建高效Android应用:Kotlin协程的实践与优化
在Android开发领域,Kotlin以其简洁的语法和平台友好性成为了开发的首选语言。其中,Kotlin协程作为处理异步任务的强大工具,它通过提供轻量级的线程管理机制,使得开发者能够在不阻塞主线程的情况下执行后台任务,从而提升应用性能和用户体验。本文将深入探讨Kotlin协程的核心概念,并通过实例演示如何在实际的Android应用中有效地使用协程进行网络请求、数据库操作以及UI的流畅更新。同时,我们还将讨论协程的调试技巧和常见问题的解决方法,以帮助开发者避免常见的陷阱,构建更加健壮和高效的Android应用。
35 4
|
28天前
|
移动开发 Java Android开发
构建高效Android应用:Kotlin协程的实践之路
【2月更文挑战第31天】 在移动开发领域,性能优化和流畅的用户体验一直是开发者追求的目标。随着Kotlin语言的流行,其异步编程解决方案——协程(Coroutines),为Android应用带来了革命性的并发处理能力。本文将深入探讨Kotlin协程的核心概念、设计原理以及在Android应用中的实际应用案例,旨在帮助开发者掌握这一强大的工具,从而提升应用的性能和响应能力。
|
29天前
|
安全 Android开发 开发者
构建高效Android应用:Kotlin与协程的完美结合
【2月更文挑战第30天】在移动开发领域,性能优化和流畅的用户体验是关键。本文深入探讨了如何通过结合Kotlin语言和协程技术来提升Android应用的性能和响应能力。我们将分析Kotlin的优势,介绍协程的基本概念,并通过实际案例展示如何在应用中实现协程以简化异步编程,从而提供更加高效的解决方案。
|
18天前
|
Java Android开发 开发者
构建高效Android应用:Kotlin协程的实践与优化
在响应式编程范式日益盛行的今天,Kotlin协程作为一种轻量级的线程管理解决方案,为Android开发带来了性能和效率的双重提升。本文旨在探讨Kotlin协程的核心概念、实践方法及其在Android应用中的优化策略,帮助开发者构建更加流畅和高效的应用程序。通过深入分析协程的原理与应用场景,结合实际案例,本文将指导读者如何优雅地解决异步任务处理,避免阻塞UI线程,从而优化用户体验。
|
23天前
|
Java 编译器 Android开发
构建高效Android应用:探究Kotlin与Java的性能差异
在开发高性能的Android应用时,选择合适的编程语言至关重要。近年来,Kotlin因其简洁性和功能性受到开发者的青睐,但其性能是否与传统的Java相比有所不足?本文通过对比分析Kotlin与Java在Android平台上的运行效率,揭示二者在编译速度、运行时性能及资源消耗方面的具体差异,并探讨在实际项目中如何做出最佳选择。
17 4
|
2天前
|
移动开发 Android开发 开发者
构建高效Android应用:采用Kotlin进行内存优化的策略
【4月更文挑战第18天】 在移动开发领域,性能优化一直是开发者关注的焦点。特别是对于Android应用而言,由于设备和版本的多样性,确保应用流畅运行且占用资源少是一大挑战。本文将探讨使用Kotlin语言开发Android应用时,如何通过内存优化来提升应用性能。我们将从减少不必要的对象创建、合理使用数据结构、避免内存泄漏等方面入手,提供实用的代码示例和最佳实践,帮助开发者构建更加高效的Android应用。
5 0
|
2天前
|
运维 安全 Cloud Native
安全访问服务边缘(SASE):网络新时代的安全与连接解决方案
SASE(安全访问服务边缘)是一种云基安全模型,结合了网络功能和安全策略,由Gartner在2019年提出。它强调身份驱动的私有网络、云原生架构和全面边缘支持,旨在解决传统WAN和安全方案的局限性,如高延迟和分散管理。SASE通过降低IT成本、提升安全响应和网络性能,应对数据分散、风险控制和访问速度等问题,适用于移动办公、多分支办公等场景。随着网络安全挑战的增加,SASE将在企业的数字化转型中扮演关键角色。
|
3天前
|
网络协议 Java API
深度剖析:Java网络编程中的TCP/IP与HTTP协议实践
【4月更文挑战第17天】Java网络编程重在TCP/IP和HTTP协议的应用。TCP提供可靠数据传输,通过Socket和ServerSocket实现;HTTP用于Web服务,常借助HttpURLConnection或Apache HttpClient。两者结合,构成网络服务基础。Java有多种高级API和框架(如Netty、Spring Boot)简化开发,助力高效、高并发的网络通信。