网络资源模板--基于Android Studio 实现的天气预报App

发布于:2025-07-12 ⋅ 阅读:(14) ⋅ 点赞:(0)

目录

一、测试环境说明

二、项目简介

三、项目演示

四、部设计详情(部分)

首页

城市管理页

五、项目源码 


一、测试环境说明

电脑环境

Windows 11

编写语言

JAVA

开发软件

Android Studio  (2020)

开发软件只要大于等于测试版本即可(近几年官网直接下载也可以),若是版本低于测试版本请自行测试。项目需要根据你的软件自行适配

二、项目简介

本天气预报APP的开发涉及多项关键技术点,涵盖了Android开发的多个核心领域。

首先,采用Android Studio作为开发环境,结合Java语言实现业务逻辑,充分利用其成熟的生态和丰富的类库支持。

数据获取方面,通过OkHttp进行网络请求,从天气API异步获取JSON格式数据,并利用Gson进行解析,确保数据的高效加载与更新。

本地数据存储采用SQLite数据库,管理用户关注的城市信息及个性化设置,支持增删改查操作。

架构设计上,采用MVC模式分离数据、视图与控制逻辑,提高代码的可维护性。UI层面遵循Material Design规范,实现响应式布局,适配不同屏幕尺寸,并通过动态主题切换增强用户体验。

三、项目演示

网络资源模板--基于Android studio 天气预报App

四、部设计详情(部分)

首页

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/main_out_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/colorPrimary">

    <RelativeLayout
        android:id="@+id/main_bottom_layout"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_alignParentTop="true"
        android:layout_marginTop="0dp">

        <ImageView
            android:id="@+id/main_iv_add"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_alignParentRight="true"
            android:src="@mipmap/icon_add"
            android:padding="12dp"/>

        <ImageView
            android:id="@+id/main_iv_more"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_alignParentLeft="true"
            android:src="@mipmap/icon_more"
            android:padding="12dp"/>

        <LinearLayout
            android:id="@+id/main_layout_point"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:orientation="horizontal"></LinearLayout>
    </RelativeLayout>

    <androidx.viewpager.widget.ViewPager
        android:id="@+id/main_vp"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@id/main_bottom_layout">

    </androidx.viewpager.widget.ViewPager>

</RelativeLayout>

1. 页面的结构

该页面采用RelativeLayout作为根布局,整体分为上下两部分。顶部是一个横向的RelativeLayout,包含左右两个功能按钮(添加城市和更多设置)以及中间的小圆点指示器。

下方是一个ViewPager,用于展示不同城市的天气信息,支持左右滑动切换城市。页面结构清晰,顶部导航栏与主内容区域分离,符合常见的移动应用布局规范,确保用户操作便捷性和视觉舒适度。

2. 使用到的技术

该页面主要运用了Android ViewPager实现多城市天气的滑动切换,并结合Fragment动态加载不同城市的天气数据。

顶部导航栏采用ImageView作为功能按钮,并通过SharedPreferences存储用户选择的背景主题。

数据库操作使用SQLite管理城市列表,确保数据的持久化存储。此外,通过OnPageChangeListener监听ViewPager滑动事件,动态更新小圆点指示器,增强交互体验。

3. 页面详细介绍

该页面是天气预报应用的主界面,核心功能是展示多个城市的天气信息。用户可通过ViewPager左右滑动浏览不同城市的天气,顶部的小圆点指示器实时显示当前所在页面。

点击“添加”按钮可跳转至城市管理页,新增或删除关注城市;点击“更多”按钮则进入设置页调整主题或查看其他功能。

页面背景支持动态切换,提升个性化体验。整体设计简洁直观,确保用户能快速获取天气信息并执行相关操作。

城市管理页

package com.example.weather.city_manager;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.Toast;
import com.example.weather.R;
import com.example.weather.db.DBManager;
import com.example.weather.db.DatabaseBean;
import java.util.ArrayList;
import java.util.List;
import androidx.appcompat.app.AppCompatActivity;

/**
 * 城市管理界面
 */
public class CityManagerActivity extends AppCompatActivity implements View.OnClickListener{
    ImageView addIv,backIv,deleteIv;
    ListView cityLv;
    List<DatabaseBean> mDatas;  //显示列表数据源
    private CityManagerAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //绑定视图
        setContentView(R.layout.activity_city_manager);
        //初始化控件
        addIv = findViewById(R.id.city_iv_add);
        backIv = findViewById(R.id.city_iv_back);
        deleteIv = findViewById(R.id.city_iv_delete);
        cityLv = findViewById(R.id.city_lv);
        mDatas = new ArrayList<>();
//        添加点击监听事件
        addIv.setOnClickListener(this);
        deleteIv.setOnClickListener(this);
        backIv.setOnClickListener(this);
//        设置适配器
        adapter = new CityManagerAdapter(this, mDatas);
        cityLv.setAdapter(adapter);
    }
/*  获取数据库当中真实数据源,添加到原有数据源当中,提示适配器更新*/
    @Override
    protected void onResume() {
        super.onResume();
        List<DatabaseBean> list = DBManager.queryAllInfo();
        mDatas.clear();//清空
        mDatas.addAll(list);//添加所有
        adapter.notifyDataSetChanged();//刷新适配器
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.city_iv_add://搜索城市
                //获取已添加城市数量
                int cityCount = DBManager.getCityCount();
                if (cityCount<5) {
                    Intent intent = new Intent(this, SearchCityActivity.class);
                    startActivity(intent);
                }else {
                    Toast.makeText(this,"存储城市数量已达上限,请删除后再增加",Toast.LENGTH_SHORT).show();
                }
                break;
            case R.id.city_iv_back://返回
                finish();
                break;
            case R.id.city_iv_delete://删除城市页面
                Intent intent1 = new Intent(this, DeleteCityActivity.class);
                startActivity(intent1);
                break;
        }
    }
}

1. 页面的结构

该模块主要包含城市管理功能,由三个核心类组成:DeleteCityActivity(删除城市界面)、DeleteCityAdapter(删除城市列表适配器)和CityManagerAdapter(城市管理列表适配器)。

删除城市界面采用ListView展示所有已关注城市,每行提供删除按钮,顶部有确认和取消操作按钮。城市管理界面同样使用ListView,但仅展示城市名称和当前温度,数据来源于本地数据库。

整体采用经典的列表式布局,符合用户对城市管理功能的操作预期。

2. 使用到的技术

该模块基于BaseAdapter实现自定义列表适配器,支持动态数据绑定和视图复用。通过SQLite数据库(DBManager)管理城市数据的增删改查,结合Gson解析天气JSON数据。

交互方面,采用AlertDialog实现删除前的二次确认,提升操作安全性。

时间格式化使用SimpleDateFormat,确保数据展示规范。列表项点击事件通过ViewHolder模式优化性能,避免重复查找控件。

3. 页面详细介绍

DeleteCityActivity提供城市删除功能,用户可通过每行右侧的删除按钮选择待移除城市,点击顶部确认按钮批量执行数据库删除操作,取消按钮则触发对话框提示。

CityManagerAdapter负责城市管理界面的数据展示,从数据库获取城市名称及实时温度,并利用Gson解析天气数据。

两页面均采用高效适配器模式,确保列表滑动流畅,同时通过数据库操作保证数据的实时性和一致性,满足用户对多城市管理的核心需求。

五、项目源码 

👇👇👇👇👇快捷方式👇👇👇👇👇


网站公告

今日签到

点亮在社区的每一天
去签到