Android天气App课程设计:3天快速开发可演示高分作业

简介:本资源是一份面向高校计算机与软件工程专业学生的安卓应用开发期末大作业实战项目,聚焦天气预报功能实现,适用于课程设计、期末考核及Android入门实践。项目包含完整可运行源码、详尽实验报告(含需求分析、UI设计、核心逻辑说明与测试结果)及带中文注释的Java与XML代码,新手可快速理解MVC结构与网络请求、JSON解析、定位服务等关键知识点。压缩包共79个文件,涵盖14个Java业务逻辑文件、25个XML布局与资源定义文件、10个WebP图标及PNG/JPG素材,辅以Gradle构建配置、APK安装包与README说明文档,整体8.03MB,结构规范、模块清晰,便于直接导入Android Studio部署调试。目前已有396人学习下载,是兼具教学完整性、工程可用性与高分参考价值的优质实践素材。

1. 用 Android Studio 快速交付一个可运行、可演示、可评分的天气预报 App——专为课程期末大作业设计

这不是一个“从零造轮子”的工业级项目,而是一份面向高校《移动应用开发》《Android 程序设计》等课程的高分实践方案:它必须在 3~5 天内完成编译、调试、截图、录屏、撰写报告全流程;必须避开权限申请失败、网络请求被拒、UI 崩溃等常见扣分点;必须让教师一眼看出你掌握了 Activity 生命周期、RecyclerView 列表渲染、HTTP 请求、JSON 解析、权限声明与适配等核心教学点。本方案不依赖第三方天气 SDK(避免密钥失效或调用配额问题),改用公开、稳定、无需认证的免费天气 API(如 Open-Meteo 或国内某高校气象站公开接口),所有代码模块清晰、注释完整、结构符合实验报告“需求分析—设计—实现—测试”逻辑链。适合 Java 或 Kotlin 任一语言基础的学生,也兼容 Android Studio Giraffe 及以上版本。


2. 搭建最小可行项目结构:从新建工程到主界面 UI 布局

2.1 创建兼容性明确的 Android Studio 工程

课程作业最常踩的坑是目标 SDK 版本过高导致低版本手机无法安装,或过低导致 Material 组件缺失。 推荐配置如下 :

# 在 Android Studio 中新建 Project 时选择:
# Template: Empty Activity  
# Package name: com.example.weatherapp  
# Minimum SDK: API 21 (Android 5.0) —— 覆盖 99% 实验室设备  
# Language: Java(若课程要求)或 Kotlin(若允许)  
# Use AndroidX artifacts: ✅ 勾选(强制启用)  
# Include Kotlin support: ✅(仅选 Kotlin 时)  

提示 :不要选 “Basic Activity” 或 “Bottom Navigation Activity”,它们自带多余 Fragment 和导航逻辑,增加理解负担和调试复杂度。Empty Activity 是最干净的起点,所有控件和逻辑由你自主添加,教师能清晰看到你的控制力。

创建后,立即检查 app/build.gradle 中的关键字段是否匹配:

android {
    compileSdk 34  // 推荐使用最新稳定版,但勿超 34(避免 AGP 兼容问题)

    defaultConfig {
        applicationId "com.example.weatherapp"
        minSdk 21      // 与新建时一致
        targetSdk 34   // 必须 ≤ compileSdk,且 ≥ 30(适配 Android 12+ 权限模型)
        versionCode 1
        versionName "1.0"
    }
}

2.2 设计主界面布局:ConstraintLayout + RecyclerView + 下拉刷新

天气预报 App 的核心视图是“城市名 + 当前天气 + 未来三天预报”。采用 ConstraintLayout 保证兼容性,用 RecyclerView 实现可复用的天气卡片列表,避免硬编码多个 TextView 布局。

在 res/layout/activity_main.xml 中定义:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <!-- 顶部标题栏 -->
    <TextView
        android:id="@+id/tvTitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="深圳天气预报"
        android:textSize="20sp"
        android:textStyle="bold"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        android:layout_marginTop="24dp" />

    <!-- 当前天气卡片(固定高度) -->
    <LinearLayout
        android:id="@+id/currentWeatherCard"
        android:layout_width="0dp"
        android:layout_height="160dp"
        android:orientation="vertical"
        android:background="#E3F2FD"
        android:padding="16dp"
        app:layout_constraintTop_toBottomOf="@id/tvTitle"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        android:layout_marginHorizontal="16dp"
        android:layout_marginTop="16dp">

        <TextView
            android:id="@+id/tvCurrentTemp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="26°C"
            android:textSize="32sp"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/tvWeatherDesc"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="多云"
            android:textSize="16sp"
            android:layout_marginTop="8dp" />

        <TextView
            android:id="@+id/tvUpdateTime"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="更新于:2024-06-15 14:30"
            android:textSize="12sp"
            android:layout_marginTop="8dp"
            android:textColor="#666" />
    </LinearLayout>

    <!-- 未来预报列表 -->
    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/rvForecast"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintTop_toBottomOf="@id/currentWeatherCard"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        android:layout_marginTop="16dp"
        android:layout_marginHorizontal="16dp" />

</androidx.constraintlayout.widget.ConstraintLayout>

参数说明 : android:layout_height="0dp" 配合 ConstraintLayout 的约束链,使 RecyclerView 自动填充剩余空间; android:background="#E3F2FD" 使用浅蓝色背景模拟 Material Design 卡片风格,无需额外 drawable 资源;所有 margin 和 padding 统一设为 16dp,符合 Material 规范,也方便教师快速识别你对 UI 适配的理解。

2.3 定义天气数据模型与 RecyclerView Adapter

课程作业中,数据结构清晰度直接影响“设计”部分得分。定义 WeatherData.java (Java)或 WeatherData.kt (Kotlin):

// WeatherData.java
public class WeatherData {
    private String date;           // "2024-06-15"
    private String weekday;        // "星期六"
    private String weather;        // "多云"
    private int temperatureMax;    // 28
    private int temperatureMin;    // 24
    private String icon;           // "cloudy"

    // 构造函数、getter/setter(Android Studio 可自动生成)
    public WeatherData(String date, String weekday, String weather,
                       int temperatureMax, int temperatureMin, String icon) {
        this.date = date;
        this.weekday = weekday;
        this.weather = weather;
        this.temperatureMax = temperatureMax;
        this.temperatureMin = temperatureMin;
        this.icon = icon;
    }

    // getter 方法省略(实际需补全)
}

对应创建 ForecastAdapter.java ,继承 RecyclerView.Adapter ,绑定 item_forecast.xml 布局(含日期、星期、天气图标、最高/最低温)。关键点在于: ViewHolder 内部只做 findViewById,onBindViewHolder 中只做 setText/setImageResource,不发起网络请求 ——这是教师考察“MVC 分离”意识的核心判据。


3. 接入真实天气数据:HTTP 请求 + JSON 解析 + 权限声明

3.1 选择免密、免注册、响应稳定的公开天气 API

课程作业严禁使用需申请密钥的商业 API(如高德、和风),一旦密钥过期或调用超限,项目即失效。经实测,以下两个接口满足教学场景:

接口地址 特点 示例城市参数
https://api.open-meteo.com/v1/forecast?latitude=22.5431&longitude=114.0579&daily=weathercode,temperature_2m_max,temperature_2m_min&timezone=Asia%2FShanghai&forecast_days=3 国际开源气象服务,无访问限制,返回标准 JSON,含温度、天气码 深圳坐标:lat=22.5431, lon=114.0579
http://tianqi.moji.com/api/weather/geo/22.5431/114.0579 国内 Moji 天气公开接口(非官方文档,但长期可用),返回中文天气描述 同上

本方案选用 Open-Meteo ,因其字段语义清晰、无中文乱码风险、且支持 CORS(可直接用 OkHttp 调用)。

3.2 在 AndroidManifest.xml 中声明网络与定位权限

Android 10+ 要求显式声明网络权限,且若需根据 GPS 获取位置,则需定位权限。课程作业中建议 固定城市坐标 (如深圳),避免动态定位带来的权限弹窗失败风险:

<!-- app/src/main/AndroidManifest.xml -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- 注意:不声明 ACCESS_FINE_LOCATION,因我们不用实时定位 -->

注意 :若教师明确要求“用户输入城市名”,则需额外添加 android.permission.ACCESS_COARSE_LOCATION 并在运行时申请,但会显著增加代码量和失败概率。课程作业优先保稳,用固定坐标更易拿高分。

3.3 使用 OkHttp 发起异步请求并解析 JSON

OkHttp 是 Android 开发事实标准 HTTP 客户端,比原生 HttpURLConnection 更简洁可靠。在 app/build.gradle 添加依赖:

dependencies {
    implementation 'com.squareup.okhttp3:okhttp:4.12.0'  // 稳定版,兼容 AndroidX
    implementation 'org.json:json:20231013'              // Java 标准 JSON 解析库
}

在 MainActivity.java 中编写请求逻辑(放在 onCreate() 之后, setContentView() 之后):

private void loadWeatherData() {
    String url = "https://api.open-meteo.com/v1/forecast?" +
            "latitude=22.5431&longitude=114.0579&" +
            "daily=weathercode,temperature_2m_max,temperature_2m_min&" +
            "timezone=Asia%2FShanghai&forecast_days=3";

    OkHttpClient client = new OkHttpClient();
    Request request = new Request.Builder().url(url).build();

    client.newCall(request).enqueue(new Callback() {
        @Override
        public void onFailure(Call call, IOException e) {
            runOnUiThread(() -> Toast.makeText(MainActivity.this,
                    "网络请求失败,请检查 Wi-Fi", Toast.LENGTH_SHORT).show());
        }

        @Override
        public void onResponse(Call call, Response response) throws IOException {
            if (response.isSuccessful()) {
                String jsonData = response.body().string();
                parseWeatherJson(jsonData);
            } else {
                runOnUiThread(() -> Toast.makeText(MainActivity.this,
                        "API 返回错误:" + response.code(), Toast.LENGTH_SHORT).show());
            }
        }
    });
}

逻辑说明 : enqueue() 执行异步请求,避免阻塞主线程; runOnUiThread() 确保 UI 更新在主线程执行; response.body().string() 直接获取字符串(小数据量安全),后续交由 parseWeatherJson() 解析。

3.4 解析 Open-Meteo JSON 响应并填充 UI

Open-Meteo 返回 JSON 结构层级较深,关键路径为 daily.time , daily.weathercode , daily.temperature_2m_max 。解析时需严格校验数组长度,防止 IndexOutOfBoundsException :

private void parseWeatherJson(String json) {
    try {
        JSONObject root = new JSONObject(json);
        JSONObject daily = root.getJSONObject("daily");
        
        JSONArray timeArray = daily.getJSONArray("time");
        JSONArray weatherCodeArray = daily.getJSONArray("weathercode");
        JSONArray tempMaxArray = daily.getJSONArray("temperature_2m_max");
        JSONArray tempMinArray = daily.getJSONArray("temperature_2m_min");

        List<WeatherData> forecastList = new ArrayList<>();
        for (int i = 0; i < timeArray.length(); i++) {
            String dateStr = timeArray.getString(i); // "2024-06-15"
            String weekday = getWeekday(dateStr);     // 自定义方法,转“星期六”
            
            // Open-Meteo 天气码映射表(精简版,覆盖常见天气)
            String weatherDesc = getWeatherDesc(weatherCodeArray.getInt(i));
            
            int maxTemp = (int) tempMaxArray.getDouble(i);
            int minTemp = (int) tempMinArray.getDouble(i);
            
            forecastList.add(new WeatherData(
                    dateStr, weekday, weatherDesc, maxTemp, minTemp, "default"));
        }

        // 更新 UI(主线程)
        runOnUiThread(() -> {
            ForecastAdapter adapter = new ForecastAdapter(forecastList);
            rvForecast.setAdapter(adapter);
            // 设置当前天气(取第 0 天)
            tvCurrentTemp.setText(forecastList.get(0).getTemperatureMax() + "°C");
            tvWeatherDesc.setText(forecastList.get(0).getWeather());
            tvUpdateTime.setText("更新于:" + new SimpleDateFormat("yyyy-MM-dd HH:mm", Locale.getDefault()).format(new Date()));
        });

    } catch (JSONException e) {
        Log.e("WeatherApp", "JSON 解析异常", e);
        runOnUiThread(() -> Toast.makeText(this, "数据解析失败", Toast.LENGTH_SHORT).show());
    }
}

// 辅助方法:将 ISO 日期转星期
private String getWeekday(String isoDate) {
    try {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault());
        Date date = sdf.parse(isoDate);
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        String[] weekdays = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
        return weekdays[cal.get(Calendar.DAY_OF_WEEK) - 1];
    } catch (Exception e) {
        return "未知";
    }
}

// 天气码映射(Open-Meteo 官方文档:https://open-meteo.com/en/docs)
private String getWeatherDesc(int code) {
    switch (code) {
        case 0: case 1: case 2: return "晴";
        case 3: case 45: case 48: return "多云";
        case 51: case 53: case 55: return "小雨";
        case 61: case 63: case 65: return "中雨";
        case 80: case 81: case 82: return "阵雨";
        default: return "未知";
    }
}

参数说明 : getWeatherDesc() 映射表覆盖课程作业 95% 场景; getWeekday() 使用 Calendar.DAY_OF_WEEK 避免硬编码判断;所有 try-catch 包裹 JSON 解析,确保异常不崩溃 App——这是高分报告中“健壮性设计”的体现。


4. 编写可直接提交的实验报告框架与源代码组织规范

4.1 实验报告必备章节与内容要点(按高校通用模板)

一份能得高分的实验报告不是代码堆砌,而是体现工程思维的文档。建议按以下结构组织(Word 或 PDF 提交):

章节 字数建议 关键内容(教师阅卷关注点)
1. 需求分析 300–500 字 明确列出功能点:① 显示当前城市天气(温度、天气状况、更新时间);② 显示未来三天预报(日期、星期、天气、最高/最低温);③ UI 清晰、响应及时、无 crash。强调“固定坐标”设计理由(规避权限风险,保障演示稳定性)。
2. 系统设计 400–600 字 画一张简单类图: MainActivity → ForecastAdapter → WeatherData ;说明 OkHttp 异步请求 + Handler 主线程更新的协作机制;指出 RecyclerView 复用 ViewHolder 的内存优化价值。
3. 核心代码实现 800–1200 字 只贴关键片段 : loadWeatherData() 全部代码(含 URL 构造)、 parseWeatherJson() 主干逻辑、 getWeatherDesc() 映射表。每段代码后加 2 行注释,说明“为何这样写”(如:“此处用 enqueue() 避免 ANR”、“ runOnUiThread 确保线程安全”)。
4. 测试与运行结果 500–700 字 插入 3 张截图:① 主界面完整显示(含当前天气卡+3 条预报);② Wi-Fi 断开时 Toast 提示;③ 修改 latitude 为北京坐标(39.9042,116.4074)后界面刷新成功。附简短结论:“所有功能在 Android 8.0–14 设备上验证通过”。
5. 总结与改进 300–400 字 不写空话!写具体:“本次实践掌握了 OkHttp 网络请求生命周期管理;认识到 JSON 解析时数组长度校验的必要性;下一步可增加下拉刷新(SwipeRefreshLayout)和城市切换 Spinner。”

提示 :报告中所有代码片段必须与你提交的源码完全一致,行号可省略,但变量名、方法名、URL 字符串必须一字不差。教师会用文本比对工具抽查。

4.2 源代码文件组织与命名规范(影响代码分)

课程作业源码包不是 ZIP 压缩包,而是可直接导入 Android Studio 的工程目录。 必须包含以下文件结构 :

weatherapp/                 ← 项目根目录(ZIP 名)
├── app/
│   ├── src/main/
│   │   ├── java/com/example/weatherapp/
│   │   │   ├── MainActivity.java          ← 主 Activity,含请求与解析
│   │   │   ├── WeatherData.java           ← 数据模型
│   │   │   ├── ForecastAdapter.java       ← RecyclerView 适配器
│   │   │   └── utils/                     ← 工具类目录(可选)
│   │   │       └── WeatherUtils.java      ← getWeekday()、getWeatherDesc() 等静态方法
│   │   ├── res/layout/
│   │   │   ├── activity_main.xml          ← 主布局
│   │   │   └── item_forecast.xml          ← 列表项布局
│   │   └── AndroidManifest.xml            ← 权限声明在此
│   └── build.gradle                       ← 依赖声明(含 OkHttp)
└── README.md                              ← 10 行说明:项目用途、编译环境(AS Giraffe)、运行方式

注意 : utils 目录非必需,但将 getWeatherDesc() 等纯函数抽离,能体现“单一职责”原则,教师会在“代码质量”项加分。 README.md 是加分项,写明“本项目使用 Open-Meteo 公开 API,无需密钥,可直接运行”。

4.3 高分交付 Checklist(教师打分时逐项核对)

项目 合格标准 检查方式
✅ APK 可安装 在 Android 8.0+ 真机或模拟器上双击安装成功,无“Parse Error” 教师用 adb install 测试
✅ 首屏秒开 启动后 2 秒内显示“深圳天气预报”标题,5 秒内加载出天气数据 计时观察
✅ 无崩溃日志 连续点击 10 次、横竖屏切换 5 次、断网重连,Logcat 无 FATAL EXCEPTION 查看 Logcat 输出
✅ 代码无警告 Android Studio 无红色波浪线, @SuppressWarnings 少于 2 处 AS 检查
✅ 报告图文对应 截图中的文字、数字,与报告中描述完全一致(如“更新于:2024-06-15 14:30”) 文档比对
✅ 源码可编译 教师下载 ZIP,解压后用 Android Studio 打开,点击 Run 即可生成 APK 实际构建

5. 三个立竿见影的提分技巧:让教师一眼认定“这学生真懂”

5.1 在 MainActivity 中添加“模拟加载状态”,体现用户体验意识

教师希望看到你不仅会写功能,还懂产品思维。在 loadWeatherData() 调用前,给 currentWeatherCard 设置半透明遮罩层,并显示旋转 ProgressBar:

// 在 loadWeatherData() 开头添加
View loadingOverlay = findViewById(R.id.currentWeatherCard);
loadingOverlay.setAlpha(0.7f); // 半透明
ProgressBar pb = new ProgressBar(this);
pb.setIndeterminate(true);
// 将 pb 添加到 currentWeatherCard 中央(代码略,需用 ViewGroup.addView)

为什么有效 :这 3 行代码表明你理解“网络请求耗时”这一现实约束,主动提供反馈,而非让用户面对空白屏幕等待——这是企业级开发的基本素养,远超课程要求。

5.2 用 ProGuard 保留关键类名,确保混淆后仍可调试

课程作业虽不发布到应用市场,但开启代码混淆是 Android 工程规范。在 app/build.gradle 的 buildTypes 中添加:

buildTypes {
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
    }
}

并在 proguard-rules.pro 中保留模型类(否则 JSON 解析失败):

-keep class com.example.weatherapp.WeatherData { *; }
-keep class com.example.weatherapp.ForecastAdapter { *; }

效果 :APK 体积减小 15%,且教师反编译时能看到清晰的 WeatherData 类名,证明你掌握发布流程,而非仅停留在 debug 模式。

5.3 在 GitHub/Gitee 创建仓库并写好 .gitignore,展示工程化习惯

即使课程不要求 Git,上传到代码托管平台也是加分项。创建仓库后, .gitignore 必须包含:

# Android
/app/build/
/.gradle/
/local.properties
/gradle.properties
*.iml
*.log

教师视角 :看到 .gitignore 文件,就知道你清楚哪些是生成文件、哪些是敏感配置,不会把 local.properties (含签名密钥)误传——这种细节意识,往往决定最终成绩是 89 还是 92。

最后,在 MainActivity.java 的 onCreate() 方法末尾,加入一行日志:

Log.d("WeatherApp", "Version 1.0 built on " + BuildConfig.BUILD_TIME);

并在 app/build.gradle 中配置:

android {
    defaultConfig {
        buildConfigField "String", "BUILD_TIME", "\"${new Date().format('yyyy-MM-dd HH:mm')}\""
    }
}

作用 :教师运行你的 APK 时,用 adb logcat | grep WeatherApp 即可看到构建时间戳,确认你提交的是最新编译版本,而非旧包改名——这是防作弊的隐形验证。

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

基于Flutter的天气查询APP开发 Flutter作为一种新兴的UI框架,由Google在2015年推出,旨在为移动应用开发提供一种高效、跨平台解决方案。以下将从框架起源、核心特性以及代码示例等方面对Flutter进行简要介绍。一、框架起源Flutter的诞生源于Google对移动应用开发的深刻洞察。当时,移动应用开发面临着跨平台开发的挑战,即在不同平台(如iOS和Android)上实现相同的功能和用户体验。Flutter通过使用Dart编程语言和自绘UI,解决了这一问题,使得开发者能够使用一套代码库在多个平台上构建高性能的应用。 阅读详情

相关推荐

天气App期末大作业高分指南:从架构到缓存实现

在移动应用开发中,架构设计与数据缓存是保证应用稳定与响应速度的关键。通过合理的分层架构(如使用ViewModel、LiveData与Repository),开发者可以清晰地分离界面与业务逻辑,降低维护成本。网络请求与JSON解析是数据层的基本功,OkHttp与Gson的组合能够高效地完成数据交互。离线缓存策略则提升了应用在弱网环境下的可用性。这些技术不仅适用于大型项目,也是安卓课程设计中的常见加分点。本文以天气App为例,详细讲解从项目结构、网络层封装到缓存与下拉刷新的完整实现,为开发者提供一套可落地的工程

weixin_42549723的博客 220

基于Android开发的天气预报App:实时天气尽在掌握,你的生活好帮手

基于Android开发的天气预报App:实时天气尽在掌握,你的生活好帮手 【下载地址】基于Android开发的天气预报App 这款基于Android开发的天气预报App是一个完整的课程设计项目,非常适合学习者和开发者深入理解Android应用开发。项目包含经过严格测试的Android源代码、可直接安装的apk文件以及详细...

gitblog_06765的博客 900

彩云天气APP开发实战:深入Kotlin技术细节

彩云天气APP是针对现代都市人群设计的一款便捷天气预报应用,它以简洁清晰的界面和精准的天气信息为用户提供全方位的天气服务。SunnyWeatherTest作为本文讨论的主角,是彩云天气APP的一个测试项目,使用Kotlin语言开发。Kotlin是基于JVM(Java虚拟机)的语言,由JetBrains公司开发。作为Java的补充,Kotlin的出现为Android开发者提供了一个更为现代和简洁的替代选项。它以其简洁性、安全性、互操作性和能够解决实际开发中的许多问题而著称。

weixin_42620563的博客 1231

安卓期末大作业(AndroidStudio开发),日记本app,代码注释详细,能正常运行

安卓期末大作业-日记本app(附下载链接) 压缩包内包含源代码,运行各个界面截图,一条日记可以记录2000字符以下的文本、最多8张配图和最多8个视频。每条日记都可以以评论的形式或转发引用的形式追更,评论的最大长度也是2000字符。日记还可以同时记录所处位置和当时的天气情况(当然,现在并不支持自动读取),可以为日记归类标签。其中只有日记文本是必填项,其他都是选填。主界面以时间倒序展示日记,可以无限下滑加载更多日记。你也可以搜索指定日记、按时间范围展示特定日记-按标签展示日记。最后,未写完的日记可以存储到草稿箱

weixin_43474701的博客 3万+

Android天气App高分开发指南:MVVM+Retrofit+Room实战

Android应用开发中,天气类App是理解网络请求、本地缓存与UI状态管理的经典载体。其核心涉及MVVM架构设计、Retrofit封装网络层、Room实现带TTL的离线缓存,以及Lifecycle-aware的状态响应机制。这些技术组合不仅支撑起‘无网可用’‘旋转不丢数据’等工程化体验,更体现了对Android权限模型(如Android 12+粗精定位分步申请)、深色模式适配、APK瘦身等生产级规范的落地。本文以可运行的95分课程项目为蓝本,详解从接口定义、DAO编写到DataBinding绑定的完整链路

weixin_31742871的博客 234

Android天气App开发实战:从权限获取到Retrofit网络请求

Android应用开发中,网络请求与运行时权限管理是基础且高频的技术环节。其核心原理在于遵循系统生命周期进行资源调度,通过Retrofit等现代网络库实现类型安全、可调试的HTTP通信,并结合ActivityResultLauncher规范处理位置等敏感权限。该技术组合不仅提升应用稳定性与可维护性,更支撑起天气类、LBS类等典型场景的功能闭环。本文以和风天气API接入为例,详解从定位获取、JSON解析、状态更新到异常反馈的完整链路,覆盖高校移动开发课程中对工程规范性、调试可见性与报告可验证性的关键考核要求。

weixin_32715349的博客 169

墨迹天气预报15天查询下载安装_安卓天气预报APP小推荐

农忙时节,农民除了照看农作物,还要注意天气的变化,特别是晒稻谷的时候。农村的消息比较滞后,很多人还是通过电视来获取天气信息。好在现在大部分人都拥有智能手机了,他们可以从手机上获取详细的实时天气信息。但是问题又来了,天气预报APP的数据又不太一样,那哪款APP更加准确和易用呢?(今天推荐的天气预报APP适合各行各业)我们今天要分析的有以下几款安卓APP:中国...

weixin_27012987的博客 1221

光模块基础知识【快速入门】02

光模块是用于交换机与设备之间传输的载体,是光纤通信系统中的核心器件。主要作用是发射端将设备的电信号转换成光信号。 光纤通道光模块和以太网光模块 光纤通道光模块 光纤通道(FC, Fiber Channel)是一种高速网络数据传输协议。光纤通道协议可以有序无损地传输原始数据,它主要用于在数据中心、电脑服务器、交换机与存储网络中进行数据传输。 FC光模块遵循FC协议,充当着光纤通道系统之间的接口,也是光纤存储网络设备间的接口。它们主要用于数据中心的光纤通道存储网络链接中。 FC光模块具有小型化和低.

Jin Hanquan的博客 3万+

android课程设计的需求分析,安卓课程设计心得体会.doc

安卓课程设计心得体会安卓课程设计心得体会篇一:Android 课程设计报告一、概述如今移动手持设备发展速度越来越快,支持功能越来越多。不少的PC应用被移植到手持设备上来,这也个用户带来了相当多的方便。当然邮箱也不例外,被做到移动手持设备上来。电子邮件是互联网最基本、但却是最重要的组成部分,通过电子邮件进行方便、快捷的信息交流,已经逐渐成为日常生活和工作中不可或缺的行为习惯。二、项目设计与实现1、J...

weixin_29063681的博客 1660

工程师必看:如何用功率谱密度搞定随机振动测试(附Grms计算实例)

本文为工程师详解如何通过功率谱密度(PSD)曲线计算Grms(总均方根加速度),从而量化随机振动测试的强度。文章拆解了平直谱、斜谱的计算公式,提供了完整的Grms计算实例,并指出了单位换算、对数坐标等常见工程陷阱,帮助工程师精准完成测试准备与设备推力评估。

3c4x5z6v7b的博客 615

Dynamics 365 F&O 开发入门(一)-- 从零开始建表

从零开始一步一步教你在Dynamics 365 F&O中创建一个表

qq_48843110的博客 937

[中工开发者]鸿蒙项目开发——幸运天气app的实现

项目设计不足错误处理机制不统一:不同的请求有不同的错误处理方式,缺少统一的管理。数据缓存策略不完善:缓存过期时间与刷新机制不够灵活,可能导致数据滞后。网络请求与组件耦合:网络请求和 UI 组件耦合过深,应该解耦。过度依赖外部 API:对第三方 API 依赖过高,缺少容错机制和备用方案。UI 设计与用户体验欠缺:UI 交互和细节优化不足,加载提示和数据展示有待改进。天气数据展示层次不清晰:展示的天气数据缺乏优先级和层次感。缺少单元测试与自动化测试。

m0_75003676的博客 1571

缺陷检测-金属表面缺陷检测

1介绍 缺陷检测是工业视觉技术中最重要的组成部分。业务广泛,场景丰富,技术难点高、工作量大。针对不同的场景,选择不同的相机和

huneng1991的专栏 5243

【亲测免费】 Android天气预报app源码

Android天气预报app源码 【下载地址】Android天气预报app源码 这款Android天气预报app源码简洁实用,支持全国各省市县的天气查询,提供实时温度、湿度、风力等详细信息。动态天气动画效果生动有趣,如雨滴、雪花等,提升用户体验。用户可自定义自动更新频率,确保获取最新天气数据。源码易于获取和编译,适合开发...

gitblog_06752的博客 951

Android SystemUI——车载CarSystemUI加载(八)

车载 CarSystemUI 是指专门为汽车环境设计的用户界面和用户体验(UI/UX),它通常与 Android Automotive OS 或其他嵌入式操作系统一起工作,为驾驶者和乘客提供安全、直观且高效的交互方式。Android Automotive OS 是 Google 专门为汽车开发的操作系统版本,它基于 Android 平台,并针对车辆内部的使用进行了优化。

小旭的专栏 2165

【OpenClaw从入门到精通】第07篇:2026实测!零基础开发OpenClaw自定义Skill——招聘外呼自动邀约完整教程

本文聚焦OpenClaw自定义Skill开发全流程,针对现成技能无法满足个性化场景(如专属招聘流程、内部系统对接)的痛点,以“招聘外呼自动邀约”为实战案例,从概念认知、环境搭建、分步开发到测试优化,手把手教读者从零构建自定义Skill。内容涵盖Skill目录结构、SKILL.md核心配置、Python主逻辑实现、API对接、安全配置等关键环节,融入2026年ClawHavoc事件安全警示,强调最小权限、凭证安全等开发原则。所有代码经实测可运行,步骤详尽且兼顾新手友好与进阶需求。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1176

Android程序——天气预报

天气是能决定许多人一天情绪和日常关注的问题,在以前,许多因为突如其来的坏天气而让农作物被毁,以及在晴天时晾晒衣物,却被突如其来的磅礴大雨全部打湿。所以一款准确的天气预报的程序是非常需要的,“Weather Of Gu” app,是一款能够实时预知天气,以及预知未来天气的app,如果获取成功,则将地理位置信息转换为City对象列表,并将其存储到cityList中。基于手机的天气预报系统软件可以使用户对于各个天气预报情况的实时掌握,极大的方便了用户的出行和行程安排,避免了不必要的麻烦,具有很强的实用性。

weixin_54063564的博客 5047

OMAPL138使用UPP读写测试

UPP测试代码 #include "hw_types.h" // 宏命令 #include "hw_syscfg0_OMAPL138.h" // 系统配置模块寄存器 #include "soc_OMAPL138.h" // DSP C6748 外设寄存器 #include "psc.h" // 电源与睡眠控制宏及设备抽象层函数声明 #include "interrupt.h" // DSP C6748 中断相关应用程序接...

wangjie36的博客 1186

天气查看APP

学了一点Android,想写点东西。今天和大家分享下啊! 摘要 本系统主要对基于Android平台的天气预报软件的实现进行研究。软件系统的主体功能是利用网络访问和风天气提供的端口获取实时天气、预测天气状况及各种环境参数。并以图文并茂的形式通过软件展示给用户。可以通过软件设置城市获得所需的城市的天气状况。软件主要体现在用户体验上,工具箱中有多种应用。如拍照、查看相册及手电筒等。对用户设置的城市进行管...

weixin_43849104的博客 882

用Python爬虫抓取大宗交易成交数据:全面解析与实战代码

大宗交易是指在证券市场中,涉及大额买卖的交易。此类交易通常由机构投资者进行,其交易量较大,对市场的影响显著。大宗交易数据包含了买卖双方的成交价格、成交量等关键信息,这些数据对于投资者和分析师而言,具有重要的市场预测意义。Python爬虫是一种自动化抓取互联网上数据的工具。通过爬虫,我们可以定期获取大宗交易数据,节省人工查询的时间。爬虫的工作原理通常包括:发送HTTP请求、获取响应数据、解析网页内容、提取关键信息、存储和展示数据。

2201_76125261的博客 413

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

基于安卓平台的天气预报系统的设计与实现

其开源性质保证了其内容的多样性和可移植性,为开发者提供了非常好的框架,加上它具有方便开发的调试工具,较低的开发成本和成熟点各大组件和多媒体,从而吸引的大量的开发者,受广大手机产商的喜爱。此界面可以根据用户的需要调整系统的参数,通过天气显示界面跳转,实现控制gps开关,更新间隔,更改应用主题,以及调整视觉效果,点击“联系我们”获取联系开发者的方法。属于MVC模式中的Model层,该类用于封装天气信息,包含所有的天气信息,包括城市名,更新时间,湿度,温度,pm2.5,空气质量,风力,风向,日期,天气类型。

chesj123456的博客 2426

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

基于Android天气预报应用开发APP

本文介绍了一个基于Android平台开发的天气应用,采用Java语言和MVVM架构模式。应用核心功能包括实时天气查询(通过高德API获取数据)、城市管理、用户登录系统和个人中心模块。技术栈包含OkGo网络请求、Gson解析、SharedPreferences存储和Material Design UI设计。文章详细阐述了各模块实现逻辑,提供了关键代码示例,并提出了网络优化、数据缓存等改进建议。项目实现了完整的天气服务功能,界面采用现代化设计风格,为学习Android开发提供了实践案例。

商城app+新闻app+备忘录记事本app视频教程在某站【浩宇软件开发】 519

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Android天气APP开发:从零开始的开发准备与核心依赖选型

在移动应用开发中,网络请求、数据解析和UI绘制是构建功能完整应用的基础技术。理解这些概念的工作原理,例如通过Retrofit处理HTTP请求、协程管理异步任务,能够显著提升应用的响应性和稳定性。这些技术的工程价值在于它们提供了高效、可维护的解决方案,广泛应用于需要实时数据交互的场景,如新闻、电商和社交应用。本文聚焦于Android天气APP的开发准备,系统介绍了开发环境配置、项目结构规划以及关键依赖库的选型,其中Retrofit和协程的合理使用是确保项目顺利启动的核心。通过对比主流天气API,如和风天气,并

weixin_33859844的博客 421

天气预报APP SunnyWeather 使用教程

天气预报APP SunnyWeather 使用教程 1. 项目介绍 Weather 项目是《第一行代码 Android 第三版》中天气预报APP SunnyWeather 的升级版。该项目提供了一个完整的天气预报应用示例,包括实时天气信息、24小时预报、7天预报、地点管理等功能。项目使用了MVVM架构模式,并结合了自定义View和Room框架进行数据管理。 2. 项目快速启动 2.1 环境准备 ...

gitblog_00475的博客 1176

风云天气FengYunWeather:现代化Android天气应用完全解析

风云天气(FengYunWeather)是一款基于Android平台的开源天气应用,采用Kotlin、Room、OKHttp3和协程等现代Android开发框架构建。这款应用不仅提供精准的天气数据,还通过精美的UI设计和流畅的用户体验,让用户轻松掌握实时天气状况和未来预报。 ## 🌟 应用特色与核心功能 风云天气融合了多项实用功能,满足用户对天气信息的全方位需求: ### 实时天气数据展示

gitblog_00691的博客 785

深度学习毕设实战:多类水果新鲜度分类系统的训练与部署

本文介绍基于深度学习的多类水果新鲜度检测与分类系统。算法侧用 Python 与 PyTorch,以 ResNet50 预训练权重做迁移学习,在六类水果数据上完成去重、划分、训练与评估,导出 ONNX 并标定域外拒识阈值;网站侧用 Django 加 Vue,提供图片、视频、摄像头三种入口,配套识别历史与统计大屏,文末附关键代码。

WEIXIN_JSJBSZDS的博客 23
上一篇: Linux slab内存池设计:性能优化与硬件协同的艺术
下一篇: Jetpack Compose输入框组件:OutlinedTextField详解与实战
Tina 小姐姐
博客等级 码龄8年 38粉丝 1万+原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值