当前位置: 代码网 > it编程>App开发>Android > Android 天气APP(二十二)改动些许UI、增加更多空气质量数据和生活建议数据展示

Android 天气APP(二十二)改动些许UI、增加更多空气质量数据和生活建议数据展示

2024年08月01日 Android 我要评论
最后为了帮助大家深刻理解Android相关知识点的原理以及面试相关知识,这里放上相关的我搜集整理的14套腾讯、字节跳动、阿里、百度等2021最新面试真题解析,我把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包知识脉络 + 诸多细节。网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录。

android:background=“@mipmap/icon_100”

android:layout_width=“30dp”

android:layout_height=“30dp”/>

<linearlayout

android:gravity=“right”

android:layout_width=“@dimen/dp_0”

android:layout_height=“wrap_content”

android:layout_weight=“1”>

<textview

android:id=“@+id/tv_temp_height”

android:textsize=“@dimen/sp_14”

android:textcolor=“#fff”

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”/>

<textview

android:id=“@+id/tv_temp_low”

android:textsize=“@dimen/sp_14”

android:textcolor=“@color/temp_min_tx”

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”/>

就是把里面的温度地段改成了两个,用不同的颜色区分开,然后进入dailyadapter

在这里插入图片描述

照着这个截图上面的修改就可以了,方法应该是都有的。

最后在渲染数据的时候增加动画

在这里插入图片描述

在这里插入图片描述

我在天气预报的返回和逐小时天气的返回数据中做了动画的渲染,注意到用了两个不同的动画,一个是底部往上弹,一个是从右往左弹。

运行之后效果如下

在这里插入图片描述

这样看起来可能舒服一些吧,

二、更多空气质量数据展示

下面就要开始写更多空气质量的页面展示了。

老样子,在appui包下新建一个moreairactivity,然后修改布局

,在修改之前我们先写一个自定义view,这当然也是需要样式的

mvplibrarystyles.xml中新增一个样式

然后在mvplibraryview包中新建一个lineprogressbar,代码如下:

package com.llw.mvplibrary.view;

import android.animation.valueanimator;

import android.annotation.suppresslint;

import android.content.context;

import android.content.res.typedarray;

import android.graphics.canvas;

import android.graphics.color;

import android.graphics.paint;

import android.graphics.rectf;

import android.util.attributeset;

import android.view.view;

import android.view.animation.accelerateinterpolator;

import com.llw.mvplibrary.r;

public class lineprogressbar extends view {

private paint mpaint;//画笔

private float mpaintwidth = 6f;//初始画笔宽度

private int mprogressbarwidth;//控件外边框宽度

private int mprogressbarheight;//控件外边框高度

private int mpercent = 0;//已转化为0至100范围的当前进度,随动画时间改变而改变

public lineprogressbar(context context) {

super(context);

}

@suppresslint(“recycle”)

public lineprogressbar(context context, attributeset attrs) {

super(context, attrs);

typedarray array = getcontext().obtainstyledattributes(attrs, r.styleable.lineprogressbar);

mprogressbarwidth = (int) array.getdimension(r.styleable.lineprogressbar_progressbar_width, 100);

mprogressbarheight = (int) array.getdimension(r.styleable.lineprogressbar_progressbar_height, 10);

}

public lineprogressbar(context context, attributeset attrs, int defstyleattr) {

super(context, attrs, defstyleattr);

}

@override

protected void onmeasure(int widthmeasurespec, int heightmeasurespec) {

setmeasureddimension(mprogressbarwidth, mprogressbarheight);

}

@override

@suppresslint(“drawallocation”)

protected void ondraw(canvas canvas) {

mpaint = new paint();

//绘制背景

mpaint.setcolor(getresources().getcolor(r.color.arc_bg_color));

mpaint.setstyle(paint.style.fill);

mpaint.setantialias(true);

mpaint.setstrokewidth(mpaintwidth);

rectf framerectf = new rectf(mpaintwidth, mpaintwidth, mprogressbarwidth - mpaintwidth, mprogressbarheight - mpaintwidth);

canvas.drawroundrect(framerectf, 15, 15, mpaint);

//填充内部进度

mpaint.setpatheffect(null);

mpaint.setcolor(color.white);

mpaint.setstyle(paint.style.fill);

mpaint.setantialias(true);

//内部进度填充长度,随动画时间改变而改变

float percent = (float) mpercent / 100f;

rectf progressrectf = new rectf(mpaintwidth, mpaintwidth, mpaintwidth + percent * (mprogressbarwidth - 2 * mpaintwidth - 2), mprogressbarheight - mpaintwidth);

canvas.drawroundrect(progressrectf, 15, 15, mpaint);

}

public void setprogress(string progress, int maxprogress) {

int percent = 0;

//得出当前progress占最大进度值百分比(0-100)

if (progress.contains(“.”)) {//float或者double类型

percent = ((int) float.parsefloat(progress) * 10) * 100 / (maxprogress * 10);

} else {//int类型

percent = integer.parseint(progress) * 100 / maxprogress;

}

if (percent < 0) {

percent = 0;

}

if (percent > 100) {

percent = 100;

}

//属性动画

valueanimator animator = valueanimator.ofint(0, percent);

animator.setduration(1000);

animator.setinterpolator(new accelerateinterpolator());

animator.addupdatelistener(new valueanimator.animatorupdatelistener() {

@override

public void onanimationupdate(valueanimator valueanimator) {

mpercent = (int) valueanimator.getanimatedvalue();

invalidate();

}

});

animator.start();

}

}

现在可以看布局文件activity_more_air.xml了,代码如下:

里面用到的背景图片

在这里插入图片描述

<?xml version="1.0" encoding="utf-8"?>

<linearlayout 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”

android:background=“@drawable/more_air_bg”

android:fitssystemwindows=“true”

android:orientation=“vertical”

tools:context=“.ui.moreairactivity”>

<androidx.appcompat.widget.toolbar

android:id=“@+id/toolbar”

android:layout_width=“match_parent”

android:layout_height=“?attr/actionbarsize”

app:contentinsetleft=“@dimen/dp_16”

app:layout_constraintend_toendof=“parent”

app:layout_constraintleft_toleftof=“parent”

app:layout_constrainttop_totopof=“parent”

app:navigationicon=“@mipmap/icon_return_white”

app:popuptheme=“@style/apptheme.popupoverlay”>

<textview

android:id=“@+id/tv_title”

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:layout_gravity=“center”

android:text=“更多空气质量”

android:textcolor=“@color/white”

android:textsize=“@dimen/sp_16” />

</androidx.appcompat.widget.toolbar>

<androidx.core.widget.nestedscrollview

android:overscrollmode=“never”

android:layout_width=“match_parent”

android:layout_height=“match_parent”>

<linearlayout

android:orientation=“vertical”

android:layout_width=“match_parent”

android:layout_height=“match_parent”>

<linearlayout

android:layout_width=“match_parent”

android:layout_height=“wrap_content”

android:layout_margin=“@dimen/dp_12”

android:background=“@drawable/shape_transparent_12”

android:orientation=“vertical”

android:padding=“@dimen/dp_12”>

<linearlayout

android:layout_width=“match_parent”

android:layout_height=“wrap_content”>

<textview

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:text=“实时空气质量”

android:textcolor=“@color/white”

android:textsize=“@dimen/sp_16” />

<textview

android:id=“@+id/tv_old_time”

android:layout_width=“0dp”

android:layout_height=“wrap_content”

android:layout_weight=“1”

android:gravity=“right”

android:text=“上次更新时间:”

android:textcolor=“@color/white”

android:textsize=“@dimen/sp_12” />

<linearlayout

android:layout_width=“match_parent”

android:layout_height=“wrap_content”

android:layout_margintop=“@dimen/dp_12”>

<linearlayout

android:layout_width=“0dp”

android:layout_height=“match_parent”

android:layout_weight=“1”

android:gravity=“center”

android:orientation=“vertical”>

<textview

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:layout_marginbottom=“8dp”

android:text=“污染指数”

android:textcolor=“#daebee”

android:textsize=“14sp” />

<com.llw.mvplibrary.view.roundprogressbar

android:id=“@+id/rpb_aqi”

android:layout_width=“120dp”

android:layout_height=“120dp”

android:layout_gravity=“center”

app:round_bg_color=“#c6d7f4”

app:round_progress_color=“#fbfef7” />

<linearlayout

android:layout_width=“0dp”

android:layout_height=“wrap_content”

android:layout_weight=“1”

android:orientation=“vertical”>

<linearlayout

android:gravity=“center_vertical”

android:layout_width=“match_parent”

android:layout_height=“wrap_content”>

<textview

android:layout_width=“@dimen/dp_44”

android:layout_height=“wrap_content”

android:gravity=“center”

android:text=“pm10”

android:textcolor=“@color/blue_one”

android:textsize=“12sp” />

<com.llw.mvplibrary.view.lineprogressbar

android:id=“@+id/progress_pm10”

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:layout_gravity=“center”

app:progressbar_width=“@dimen/dp_80”

app:progressbar_height=“@dimen/dp_10”/>

<textview

android:id=“@+id/tv_pm10”

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:gravity=“center”

android:textcolor=“@color/white”

android:textsize=“12sp” />

<linearlayout

android:gravity=“center_vertical”

android:layout_width=“match_parent”

android:layout_height=“wrap_content”

android:layout_margintop=“12dp”>

<textview

android:layout_width=“@dimen/dp_44”

android:layout_height=“wrap_content”

android:gravity=“center”

android:text=“pm2.5”

android:textcolor=“@color/blue_one”

android:textsize=“12sp” />

<com.llw.mvplibrary.view.lineprogressbar

android:id=“@+id/progress_pm25”

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:layout_gravity=“center”

app:progressbar_width=“@dimen/dp_80”

app:progressbar_height=“@dimen/dp_10”/>

<textview

android:id=“@+id/tv_pm25”

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:gravity=“center”

android:textcolor=“@color/white”

android:textsize=“12sp” />

<linearlayout

android:gravity=“center_vertical”

android:layout_width=“match_parent”

android:layout_height=“wrap_content”

android:layout_margintop=“12dp”>

<linearlayout

android:layout_width=“@dimen/dp_44”

android:layout_height=“wrap_content”

android:gravity=“center”>

<textview

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:text=“no”

android:textcolor=“@color/blue_one”

android:textsize=“12sp” />

<textview

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:text=“2”

android:textcolor=“@color/blue_one”

android:textsize=“8sp” />

<com.llw.mvplibrary.view.lineprogressbar

android:id=“@+id/progress_no2”

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:layout_gravity=“center”

app:progressbar_width=“@dimen/dp_80”

app:progressbar_height=“@dimen/dp_10”/>

<textview

android:id=“@+id/tv_no2”

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:gravity=“center”

android:textcolor=“@color/white”

android:textsize=“12sp” />

<linearlayout

android:gravity=“center_vertical”

android:layout_width=“match_parent”

android:layout_height=“wrap_content”

android:layout_margintop=“12dp”>

<linearlayout

android:layout_width=“@dimen/dp_44”

android:layout_height=“wrap_content”

android:gravity=“center”>

<textview

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:text=“so”

android:textcolor=“@color/blue_one”

android:textsize=“12sp” />

<textview

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:text=“2”

android:textcolor=“@color/blue_one”

android:textsize=“8sp” />

<com.llw.mvplibrary.view.lineprogressbar

android:id=“@+id/progress_so2”

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:layout_gravity=“center”

app:progressbar_width=“@dimen/dp_80”

app:progressbar_height=“@dimen/dp_10”/>

<textview

android:id=“@+id/tv_so2”

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:gravity=“center”

android:textcolor=“@color/white”

android:textsize=“12sp” />

<linearlayout

android:gravity=“center_vertical”

android:layout_width=“match_parent”

android:layout_height=“wrap_content”

android:layout_margintop=“12dp”>

<linearlayout

android:layout_width=“@dimen/dp_44”

android:layout_height=“wrap_content”

android:gravity=“center”>

<textview

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:text=“o”

android:textcolor=“@color/blue_one”

android:textsize=“12sp” />

<textview

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:text=“3”

android:textcolor=“@color/blue_one”

android:textsize=“8sp” />

<com.llw.mvplibrary.view.lineprogressbar

android:id=“@+id/progress_o3”

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:layout_gravity=“center”

app:progressbar_width=“@dimen/dp_80”

app:progressbar_height=“@dimen/dp_10”/>

<textview

android:id=“@+id/tv_o3”

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:gravity=“center”

android:textcolor=“@color/white”

android:textsize=“12sp” />

<linearlayout

android:gravity=“center_vertical”

android:layout_width=“match_parent”

android:layout_height=“wrap_content”

android:layout_margintop=“12dp”>

<textview

android:layout_width=“@dimen/dp_44”

android:layout_height=“wrap_content”

android:gravity=“center”

android:text=“co”

android:textcolor=“@color/blue_one”

android:textsize=“12sp” />

<com.llw.mvplibrary.view.lineprogressbar

android:id=“@+id/progress_co”

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:layout_gravity=“center”

app:progressbar_width=“@dimen/dp_80”

app:progressbar_height=“@dimen/dp_10”/>

<textview

android:id=“@+id/tv_co”

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:gravity=“center”

android:textcolor=“@color/white”

android:textsize=“12sp” />

<textview

android:layout_marginleft=“@dimen/dp_12”

android:text=“监测站空气质量”

android:textcolor=“@color/white”

android:textsize=“@dimen/sp_16”

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”/>

<androidx.recyclerview.widget.recyclerview

android:id=“@+id/rv_station”

android:layout_width=“match_parent”

android:layout_height=“wrap_content”

android:overscrollmode=“never” />

<textview

android:layout_marginleft=“@dimen/dp_12”

android:text=“未来5天空气质量预报”

android:textcolor=“@color/white”

android:textsize=“@dimen/sp_16”

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”/>

<androidx.recyclerview.widget.recyclerview

android:id=“@+id/rv_five_air”

android:layout_width=“match_parent”

android:layout_height=“wrap_content”

android:layout_marginbottom=“@dimen/dp_12”

android:overscrollmode=“never” />

</androidx.core.widget.nestedscrollview>

在这里插入图片描述

现在可以创建item的布局文件里,这里面有两个列表,自然就需要两个item的布局,

先来看第一个的布局,在layout下新建一个item_more_air_station_list.xml,这个用于展示检测站的空气质量。代码如下:

<?xml version="1.0" encoding="utf-8"?>

<linearlayout xmlns:android=“http://schemas.android.com/apk/res/android”

android:layout_width=“match_parent”

android:layout_height=“wrap_content”

android:orientation=“vertical”

android:padding=“@dimen/dp_12”>

<linearlayout

android:layout_width=“match_parent”

android:layout_height=“match_parent”

android:background=“@drawable/shape_transparent_12”

android:gravity=“center_horizontal”

android:orientation=“vertical”

android:padding=“@dimen/dp_12”>

<textview

android:id=“@+id/tv_station_name”

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:textcolor=“@color/white”

android:textsize=“@dimen/sp_18” />

<linearlayout

android:layout_width=“match_parent”

android:layout_height=“wrap_content”

android:layout_margintop=“@dimen/dp_20”

android:orientation=“vertical”>

<linearlayout

android:layout_width=“match_parent”

android:layout_height=“wrap_content”

android:orientation=“horizontal”>

<textview

android:layout_width=“0dp”

android:layout_height=“wrap_content”

android:layout_weight=“1”

android:gravity=“center”

android:text=“空气质量”

android:textcolor=“@color/blue_one”

android:textsize=“12sp” />

<textview

android:id=“@+id/tv_air_category”

android:layout_width=“0dp”

android:layout_height=“wrap_content”

android:layout_weight=“1”

android:gravity=“center”

android:textcolor=“@color/white”

android:textsize=“12sp” />

<linearlayout

android:layout_width=“match_parent”

android:layout_height=“wrap_content”

android:layout_margintop=“@dimen/dp_12”

android:orientation=“horizontal”>

<textview

android:layout_width=“0dp”

android:layout_height=“wrap_content”

android:layout_weight=“1”

android:gravity=“center”

android:text=“空气质量指数”

android:textcolor=“@color/blue_one”

android:textsize=“12sp” />

<textview

android:id=“@+id/tv_aqi”

android:layout_width=“0dp”

android:layout_height=“wrap_content”

android:layout_weight=“1”

android:gravity=“center”

android:textcolor=“@color/white”

android:textsize=“12sp” />

<linearlayout

android:layout_width=“match_parent”

android:layout_height=“wrap_content”

android:layout_margintop=“@dimen/dp_12”

android:orientation=“horizontal”>

<textview

android:layout_width=“0dp”

android:layout_height=“wrap_content”

android:layout_weight=“1”

android:gravity=“center”

android:text=“主要污染物”

android:textcolor=“@color/blue_one”

android:textsize=“12sp” />

<textview

android:id=“@+id/tv_primary”

android:layout_width=“0dp”

android:layout_height=“wrap_content”

android:layout_weight=“1”

android:gravity=“center”

android:textcolor=“@color/white”

android:textsize=“12sp” />

<linearlayout

android:layout_width=“match_parent”

android:layout_height=“wrap_content”

android:layout_margintop=“12dp”>

<textview

android:layout_width=“0dp”

android:layout_height=“wrap_content”

android:layout_weight=“1”

android:gravity=“center”

android:text=“pm10”

android:textcolor=“@color/blue_one”

android:textsize=“12sp” />

<textview

android:id=“@+id/tv_pm10”

android:layout_width=“0dp”

android:layout_height=“wrap_content”

android:layout_weight=“1”

android:gravity=“center”

android:textcolor=“@color/white”

android:textsize=“12sp” />

<linearlayout

android:layout_width=“match_parent”

android:layout_height=“wrap_content”

android:layout_margintop=“12dp”>

<textview

android:layout_width=“0dp”

android:layout_height=“wrap_content”

android:layout_weight=“1”

android:gravity=“center”

android:text=“pm2.5”

android:textcolor=“@color/blue_one”

android:textsize=“12sp” />

<textview

android:id=“@+id/tv_pm25”

android:layout_width=“0dp”

android:layout_height=“wrap_content”

android:layout_weight=“1”

android:gravity=“center”

android:textcolor=“@color/white”

android:textsize=“12sp” />

<linearlayout

android:layout_width=“match_parent”

android:layout_height=“wrap_content”

android:layout_margintop=“12dp”>

<textview

android:layout_width=“0dp”

android:layout_height=“wrap_content”

android:layout_weight=“1”

android:gravity=“center”

android:text=“二氧化氮”

android:textcolor=“@color/blue_one”

android:textsize=“12sp” />

<textview

android:id=“@+id/tv_no2”

android:layout_width=“0dp”

android:layout_height=“wrap_content”

android:layout_weight=“1”

android:gravity=“center”

android:textcolor=“@color/white”

android:textsize=“12sp” />

<linearlayout

android:layout_width=“match_parent”

android:layout_height=“wrap_content”

android:layout_margintop=“12dp”>

<textview

android:layout_width=“0dp”

android:layout_height=“wrap_content”

android:layout_weight=“1”

android:gravity=“center”

android:text=“二氧化硫”

android:textcolor=“@color/blue_one”

android:textsize=“12sp” />

<textview

android:id=“@+id/tv_so2”

android:layout_width=“0dp”

android:layout_height=“wrap_content”

android:layout_weight=“1”

android:gravity=“center”

android:textcolor=“@color/white”

android:textsize=“12sp” />

<linearlayout

android:layout_width=“match_parent”

android:layout_height=“wrap_content”

android:layout_margintop=“12dp”>

<textview

android:layout_width=“0dp”

android:layout_height=“wrap_content”

android:layout_weight=“1”

android:gravity=“center”

android:text=“一氧化碳”

android:textcolor=“@color/blue_one”

android:textsize=“12sp” />

<textview

android:id=“@+id/tv_o3”

android:layout_width=“0dp”

android:layout_height=“wrap_content”

android:layout_weight=“1”

android:gravity=“center”

android:textcolor=“@color/white”

android:textsize=“12sp” />

<linearlayout

android:layout_width=“match_parent”

android:layout_height=“wrap_content”

android:layout_margintop=“12dp”>

<textview

android:layout_width=“0dp”

android:layout_height=“wrap_content”

android:layout_weight=“1”

android:gravity=“center”

android:text=“臭氧”

android:textcolor=“@color/blue_one”

android:textsize=“12sp” />

<textview

android:id=“@+id/tv_co”

android:layout_width=“0dp”

android:layout_height=“wrap_content”

android:layout_weight=“1”

android:gravity=“center”

android:textcolor=“@color/white”

android:textsize=“12sp” />

在这里插入图片描述

比较的简单,下面在layout下创建item_more_air_five_list.xml,用于展示当前城市未来五天的空气质量预报。布局如下:

<?xml version="1.0" encoding="utf-8"?>

<linearlayout xmlns:android=“http://schemas.android.com/apk/res/android”

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:orientation=“vertical”

android:padding=“@dimen/dp_12”>

<linearlayout

android:layout_width=“wrap_content”

android:layout_height=“match_parent”

android:background=“@drawable/shape_transparent_12”

android:gravity=“center_horizontal”

android:orientation=“vertical”

android:padding=“@dimen/dp_12”>

<linearlayout

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:gravity=“center”

android:orientation=“vertical”>

<textview

android:id=“@+id/tv_date_info”

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:textcolor=“@color/white”

android:textsize=“@dimen/sp_18” />

<textview

android:id=“@+id/tv_date”

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:textcolor=“@color/white”

android:textsize=“@dimen/sp_14” />

<linearlayout

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”>

<textview

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:text=“aqi指数”

android:textcolor=“@color/white” />

<textview

android:id=“@+id/tv_aqi”

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:layout_marginleft=“@dimen/dp_20”

android:text=“空气质量”

android:textcolor=“@color/white” />

<linearlayout

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:layout_margintop=“@dimen/dp_4”>

<textview

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:text=“空气质量”

android:textcolor=“@color/white” />

<textview

android:id=“@+id/tv_category”

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:layout_marginleft=“@dimen/dp_20”

android:text=“空气质量”

android:textcolor=“@color/white” />

<linearlayout

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:layout_margintop=“@dimen/dp_4”>

<textview

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:text=“污染物”

android:textcolor=“@color/white” />

<textview

android:id=“@+id/tv_primary”

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:layout_marginleft=“@dimen/dp_20”

android:text=“空气质量”

android:textcolor=“@color/white” />

在这里插入图片描述

因为这个查询多天的空气质量之前并没有写上去,所以要在apiservice中新增一个,同时需要在app的bean包下面新建一个数据实体moreairfiveresponse,代码如下:

package com.llw.goodweather.bean;

import java.util.list;

public class moreairfiveresponse {

/**

  • code : 200

  • updatetime : 2020-08-06t09:28+08:00

  • fxlink : http://hfx.link/2ax4

  • daily : [{“fxdate”:“2020-08-06”,“aqi”:“60”,“level”:“2”,“category”:“良”,“primary”:“na”},{“fxdate”:“2020-08-07”,“aqi”:“90”,“level”:“2”,“category”:“良”,“primary”:“na”},{“fxdate”:“2020-08-08”,“aqi”:“100”,“level”:“2”,“category”:“良”,“primary”:“na”},{“fxdate”:“2020-08-09”,“aqi”:“110”,“level”:“3”,“category”:“轻度污染”,“primary”:“na”},{“fxdate”:“2020-08-10”,“aqi”:“90”,“level”:“2”,“category”:“良”,“primary”:“na”}]

  • refer : {“sources”:[“cnemc”],“license”:[“no commercial use”]}

*/

private string code;

private string updatetime;

private string fxlink;

private referbean refer;

private list daily;

public string getcode() {

return code;

}

public void setcode(string code) {

this.code = code;

}

public string getupdatetime() {

return updatetime;

}

public void setupdatetime(string updatetime) {

this.updatetime = updatetime;

}

public string getfxlink() {

return fxlink;

}

public void setfxlink(string fxlink) {

this.fxlink = fxlink;

}

public referbean getrefer() {

return refer;

}

public void setrefer(referbean refer) {

this.refer = refer;

}

public list getdaily() {

return daily;

}

public void setdaily(list daily) {

this.daily = daily;

}

public static class referbean {

private list sources;

private list license;

public list getsources() {

return sources;

}

public void setsources(list sources) {

this.sources = sources;

}

public list getlicense() {

return license;

}

public void setlicense(list license) {

this.license = license;

}

}

public static class dailybean {

/**

  • fxdate : 2020-08-06

  • aqi : 60

  • level : 2

  • category : 良

  • primary : na

*/

private string fxdate;

private string aqi;

private string level;

private string category;

private string primary;

public string getfxdate() {

return fxdate;

}

public void setfxdate(string fxdate) {

this.fxdate = fxdate;

}

public string getaqi() {

return aqi;

}

public void setaqi(string aqi) {

this.aqi = aqi;

}

public string getlevel() {

return level;

}

public void setlevel(string level) {

this.level = level;

}

public string getcategory() {

return category;

}

public void setcategory(string category) {

this.category = category;

}

public string getprimary() {

return primary;

}

public void setprimary(string primary) {

this.primary = primary;

}

}

}

apiservice中新增如下接口

/**

  • 空气质量5天预报

  • @param location 城市id

  • @return 返回空气质量5天预报数据

*/

@get(“/v7/air/5d?key=3086e91d66c04ce588a7f538f917c7f4”)

call airfiveweather(@query(“location”) string location);

现在可以创建一个新的订阅器了,在appcontract包下新建一个moreaircontract,代码如下:

package com.llw.goodweather.contract;

import com.llw.goodweather.api.apiservice;

import com.llw.goodweather.bean.airnowresponse;

import com.llw.goodweather.bean.dailyresponse;

import com.llw.goodweather.bean.moreairfiveresponse;

import com.llw.goodweather.bean.newsearchcityresponse;

import com.llw.mvplibrary.base.basepresenter;

import com.llw.mvplibrary.base.baseview;

import com.llw.mvplibrary.net.netcallback;

import com.llw.mvplibrary.net.servicegenerator;

import retrofit2.call;

import retrofit2.response;

/**

  • 更多空气质量数据订阅器

*/

public class moreaircontract {

public static class moreairpresenter extends basepresenter {

/**

  • 搜索城市 搜索站点的城市id,用于查询空气质量

  • @param location 城市名

*/

public void searchcityid(string location) {//注意这里的4表示新的搜索城市地址接口

apiservice service = servicegenerator.createservice(apiservice.class, 4);//指明访问的地址

service.newsearchcity(location,“exact”).enqueue(new netcallback() {

@override

public void onsuccess(call call, response response) {

if(getview() != null){

getview().getsearchcityidresult(response);

}

}

@override

public void onfailed() {

if(getview() != null){

getview().getdatafailed();

}

}

});

}

/**

  • 空气质量 v7

  • @param location 城市id

*/

public void air(string location) {

apiservice service = servicegenerator.createservice(apiservice.class,3);

service.airnowweather(location).enqueue(new netcallback() {

@override

public void onsuccess(call call, response response) {

if(getview() != null){

getview().getmoreairresult(response);

}

}

@override

public void onfailed() {

if(getview() != null){

getview().getdatafailed();

}

}

});

}

/**

  • 五天空气质量数据 v7

  • @param location 城市id

*/

public void airfive(string location) {

apiservice service = servicegenerator.createservice(apiservice.class,3);

service.airfiveweather(location).enqueue(new netcallback() {

@override

public void onsuccess(call call, response response) {

if(getview() != null){

getview().getmoreairfiveresult(response);

}

}

@override

public void onfailed() {

if(getview() != null){

getview().getdatafailed();

}

}

});

}

}

public interface imoreairview extends baseview {

//搜索城市id

void getsearchcityidresult(response response);

//空气质量返回数据 v7

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、oppo等大厂,18年进入阿里一直到现在。

深知大多数android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加v获取:vip204888 (备注android)
img

总结

最后为了帮助大家深刻理解android相关知识点的原理以及面试相关知识,这里放上相关的我搜集整理的14套腾讯、字节跳动、阿里、百度等2021最新面试真题解析,我把技术点整理成了视频和pdf(实际上比预期多花了不少精力),包知识脉络 + 诸多细节。

2020面试真题解析
腾讯面试真题解析

阿里巴巴面试真题解析

字节跳动面试真题解析
网上学习 android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

ai人工智能、android移动开发、aigc大模型、c c#、go语言、java、linux运维、云计算、mysql、pmp、网络安全、python爬虫、ue5、ui设计、unity3d、web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、flutter、ios开发、php开发、.net、安卓逆向、云计算

tafailed();

}

}

});

}

/**

  • 五天空气质量数据 v7

  • @param location 城市id

*/

public void airfive(string location) {

apiservice service = servicegenerator.createservice(apiservice.class,3);

service.airfiveweather(location).enqueue(new netcallback() {

@override

public void onsuccess(call call, response response) {

if(getview() != null){

getview().getmoreairfiveresult(response);

}

}

@override

public void onfailed() {

if(getview() != null){

getview().getdatafailed();

}

}

});

}

}

public interface imoreairview extends baseview {

//搜索城市id

void getsearchcityidresult(response response);

//空气质量返回数据 v7

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、oppo等大厂,18年进入阿里一直到现在。

深知大多数android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-nl114m1b-1712146775355)]
[外链图片转存中…(img-og2d8ppm-1712146775355)]
[外链图片转存中…(img-y2wvgq4y-1712146775356)]
[外链图片转存中…(img-fpsjjcyq-1712146775356)]
[外链图片转存中…(img-rlzkj4ya-1712146775356)]
[外链图片转存中…(img-4ydwtbdx-1712146775357)]
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加v获取:vip204888 (备注android)
[外链图片转存中…(img-fkjpb2en-1712146775357)]

总结

最后为了帮助大家深刻理解android相关知识点的原理以及面试相关知识,这里放上相关的我搜集整理的14套腾讯、字节跳动、阿里、百度等2021最新面试真题解析,我把技术点整理成了视频和pdf(实际上比预期多花了不少精力),包知识脉络 + 诸多细节。

[外链图片转存中…(img-vzadn2ov-1712146775357)]
[外链图片转存中…(img-qcw8x11g-1712146775357)]

[外链图片转存中…(img-poypna0i-1712146775358)]

[外链图片转存中…(img-b6utuf5b-1712146775358)]
网上学习 android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

ai人工智能、android移动开发、aigc大模型、c c#、go语言、java、linux运维、云计算、mysql、pmp、网络安全、python爬虫、ue5、ui设计、unity3d、web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、flutter、ios开发、php开发、.net、安卓逆向、云计算

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com