本篇数据来源:聚合数据,一个简单的例子,通过调用API接口进行数据解析后,加载到我们的模拟器中。开始之前我们要清楚做这个demo的一个具体步骤,下面我将一步步进行编写。

首先准备工作:

导入okhttp与Gson()的库:在build.gradle(.app)中

implementation 'com.squareup.okhttp3:okhttp:3.8.0'
implementation 'com.google.code.gson:gson:2.9.1'

还有网络请求权限在AndroidManifest.xml中加入

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

还有一点:在Android 9.0(P ,API 28)版本中,限制了http明文流量的网络请求,未加密的流量请求都会被系统禁掉。

所以如果当前应用的请求是 htttp 请求,而非 https,这样就会导系统禁止当前应用进行该请求。

我们还需要加入一行代码:

 <application...android:usesCleartextTraffic="true"...</application>

好了,现在可以开始写代码了。

一、布局代码

布局代码很简单,就一个输入框和放数据的文本以及一个按钮

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="horizontal">
<!-- 输入框 --><EditTextandroid:id="@+id/ed1"android:layout_width="250dp"android:layout_height="wrap_content"android:hint="输入你的星座" />
<!-- 按钮--><Buttonandroid:id="@+id/but1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:backgroundTint="#81B348"android:text="查询" /></LinearLayout>
<!-- 文本 --><TextViewandroid:id="@+id/tv1"android:layout_width="match_parent"android:layout_height="wrap_content"android:textColor="#0B0A0A"android:textSize="18sp" /></LinearLayout>
</FrameLayout>

关于布局文件就不多说了

二、主逻辑代码

在MainActivity编写我们的逻辑代码,也很简单1、获取控件id,2、进行网络请求,3、解析数据

上代码

package com.example.myapplicationimport android.annotation.SuppressLint
import android.os.Bundle
import android.widget.Button
import android.widget.EditText
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import com.google.gson.Gson
import okhttp3.OkHttpClient
import okhttp3.Request
import kotlin.concurrent.threadclass MainActivity : AppCompatActivity() {//定义变量获取控件lateinit var ed1: EditTextlateinit var tv1: TextViewlateinit var but1: Button@SuppressLint("SetTextI18n")override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)//获取控件ided1 = findViewById(R.id.ed1)tv1 = findViewById(R.id.tv1)but1 = findViewById(R.id.but1)//案件跳转事件but1.setOnClickListener {val a = ed1.text.toString()             //获取输入框的内容,也就是待会我们输入的星座//在子线程中开始进行数据请求,这个写法一般都是固定的使用的是GET请求thread {val request = Request.Builder().url("http://web.juhe.cn/constellation/getAll?consName=$a&type=today&key=聚合数据申请的key").build()val response = OkHttpClient().newCall(request).execute()    //调用okhttp的execute()方法获取链接返回的数据val json = response.body()?.string()                        //得到具体返回的数据val responseNews = Gson().fromJson(json, News::class.java)  //开始进行第三步,数据解析,这里我使用的是GSON(),那么我们就要先创建一个Gson()数据类if (responseNews != null) {runOnUiThread {                                         //最后关于视图刷新,也就是ui的操作需要放在主线程里tv1.setText("星座名称:" + responseNews.name + "\n"+ "查询时间:" + responseNews.datetime + "\n"+ "综合指数:" + responseNews.all + "\n"+ "幸运色:" + responseNews.color + "\n"+ "健康指数: " + responseNews.health + "\n"+ "爱情指数: " + responseNews.love + "\n"+ "财运指数: " + responseNews.money + "\n"+ "幸运数字: " + responseNews.number + "\n"+ "速配星座: " + responseNews.QFriend + "\n"+ "今日概述: " + responseNews.summary + "\n"+ "工作指数: " + responseNews.work + "\n")}}}}}
}

上述代码其实都很好理解,okhttp的请求方式基本是固定的,下面展示Gson()的数据类,然后你就能理解关于视图刷新的这个写法了

三、创建一个Gson()的数据类

其实这步应该放在第二步的,草率了....不过不影响,咋们继续,现在有个问题,就是我们要创建什么数据类呢?其实也很简单

要创建什么数据类,就要看服务器给我们返回了什么数据,以及我们需要什么数据,下面我们去看聚合数据具体给我们返回了什么数据(对了聚合数据返回的是json格式的数据)

也就是:

{
"date":20221013,
"name":"天秤座",
"QFriend":"天秤座",
"color":"浅蓝色",
"datetime":"2022年10月13日",
"health":"80",
"love":"80",
"work":"75",
"money":"80",
"number":8,
"summary":"运势的不稳定因素较多,容易出现模棱两可的态度,受到各种建议或评价的干扰。存在感比较低,过于沉默做事的姿态也会容易让别人忽略你所付出的努力。生活方面容易在无聊的事情上浪费时间,比如逛微博或是发呆等。",
"all":"85",
"resultcode":"200",
"error_code

(这样看可能清晰一点)

通过聚合数据请求我们可以看到返回的相关数据,那么现在我们就去创建一个数据类,(因为本人用的kotlin可能和java有些差别,不过差别不大,有时间我可以出一个java版本的)看代码:

package com.example.myapplication//GSON数据类
data class News(val name : String,val QFriend : String,val color : String,val datetime: String,val all : String,val health : String,val love : String,val money : String,val number : String,val summary : String,val work : String)

可以看到非常简单就对应着服务器返回的数据格式挨着创建就行,最后回到第二部的最后几行代码:

val responsexz = Gson().fromJson(json, News::class.java)  //开始进行第三步,数据解析,这里我使用的是GSON(),那么我们就要先创建一个Gson()数据类if (responseNews != null) {runOnUiThread {                                         //最后关于视图刷新,也就是ui的操作需要放在主线程里tv1.setText("星座名称:" + responseNews.name + "\n"+ "查询时间:" + responseNews.datetime + "\n"+ "综合指数:" + responseNews.all + "\n"+ "幸运色:" + responseNews.color + "\n"+ "健康指数: " + responseNews.health + "\n"+ "爱情指数: " + responseNews.love + "\n"+ "财运指数: " + responseNews.money + "\n"+ "幸运数字: " + responseNews.number + "\n"+ "速配星座: " + responseNews.QFriend + "\n"+ "今日概述: " + responseNews.summary + "\n"+ "工作指数: " + responseNews.work + "\n")}}

现在看这段代码应该比较清晰了,定义一个responsexz变量解析这个json(没错Gson就是这么神奇),然后判断只要我们请求的数据不为空就调用setText方法将解析的数据放到文本框中,其实到这基本就已经结束了

最后我们来看一下运行效果

由于我也是个安卓小白,学安卓也是因为兴趣,关于这文章我还是不太会,可能有些地方表达不清楚,欢迎到评论区一起探讨,努力一定会有回报的加油!!

使用okhttp请求聚合数据之星座运势相关推荐

  1. android 星座运势接口,2018-04-26—网络请求(例:星座运势app实现)

    上一节给大家讲了一个比较无聊的东西,这节就会派上用场了,哈哈,今天给大家讲解的是网络请求,我们做的APP很少是单机的App吧,一般情况下多多少少都会用到一些网络请求,而他具体是怎么实现的呢?今天我们来 ...

  2. TP5后端,VUE前端请求聚合数据新闻接口

    问题描述: TP5当后端,VUE当前端, 请求聚合数据新闻接口 演示效果如下: ps: 最开始加载页面的时候,只加载本地的文件(因为请求次数有限制) 问题解决: 1: vue 文件: <temp ...

  3. PHP纯手写正则爬取星座屋网站星座运势数据

    星座屋(http://www.xzw.com/fortune/)运势界面: 最终爬取数据结果展示在APP上的效果: 下面就是使用正则实现的代码,是自己一年多前花了半天时间写的.现在想来,如果使用Scr ...

  4. TP5后端,VUE前端请求聚合数据驾照题库

    选择效果: 演示效果: 1: Vue 配置: /config/index.js 'use strict' // Template version: 1.3.1 // see http://vuejs- ...

  5. TP5后端,VUE前端请求聚合数据成语大全

    PS: 聚合接口上描述的是成语大全,其实只是以用户查找字为开头的成语而已.先上演示效果: 1: VUE 前端代码 <template><div class="content ...

  6. php 星座运势_PHP纯手写正则爬取星座屋网站星座运势数据

    最终爬取数据结果展示在APP上的效果: 下面就是使用正则实现的代码,是自己一年多前花了半天时间写的.现在想来,如果使用Scrapy或者phpspider只用几行代码就搞定了,不用这么费力气了~ /** ...

  7. TP5后端,VUE前端请求聚合数据天气接口

    问题描述: TP5 当后端 VUE 当前端 请求聚合数据天气接口 问题解决: 演示效果 前端 VUE 代码: <template><div class="whether-t ...

  8. TP5后端,VUE前端请求聚合数据过去的今天

    先上效果: 1: 前端 vue 文件: <template><!--接口地址 http://v.juhe.cn/todayOnhistory/queryEvent.php参数名 类型 ...

  9. python运势预测程序_基于Python的星座运势接口调用代码实例

    [python]代码库#!/usr/bin/python # -*- coding: utf-8 -*- import json, urllib from urllib import urlencod ...

最新文章

  1. 负载均衡算法-最少连接数均衡
  2. B-Trees【设计数据密集型应用】
  3. 微型计算机中PRON是,英语词性英语中的pron指的是什么词性?? – 手机爱问
  4. matlab 暂停命令(pause和input)
  5. 【通俗讲解】BP神经网络
  6. ASP.NET MVC中的模型装配 封装方法 非常好用
  7. MaxCompute存储力持续升级,每年节省不止一个亿
  8. justify-content
  9. ElasticSearch + Canal 开发千万级的实时搜索系统【转】
  10. python爬虫好友图片_Python爬取所有微信好友头像,制作微信好友图片墙
  11. VBA小程序_遍历所有工作表_复制粘贴为数值
  12. 理解Spring面向接口编程思想
  13. GPL AND LGPL
  14. 京东数科(实习一面)
  15. 二零一九第二天 文/一个会写诗的程序员
  16. PMP证书如何续证?PMP证书续证步骤和注意事项
  17. MATLAB 2008a 激活成功后还要激活(许可证过期)
  18. 理论力学知识要点(七)
  19. 查看文件夹正在被哪个进程使用
  20. 注册测绘师学习笔记(六)

热门文章

  1. 通俗的解释什么是Promise
  2. gitlab(ce版本)安装卸载汉化数据迁移
  3. 基于51单片机3轴加速度计ADXL345计步器卡路里系统设计
  4. linux把终端嵌入桌面,Linux_ubuntu借助compiz实现终端嵌入桌面, 借助compiz,可以把gnome-termina - phpStudy...
  5. SSM毕设项目基于人脸识别的景区人数统计系统zzr18(java+VUE+Mybatis+Maven+Mysql)
  6. 为你的网站加上和风天气插件
  7. 海上有网络吗?今天介绍下无线宽带自组网通信系统
  8. java里面queries怎么写,Java程序员在写SQL时常犯的10个错误
  9. QEMU KVM Libvirt手册(10):Managing Virtual Machines with libvirt
  10. 太牛了,这个神奇工具让你的照片秒变宫崎骏漫画