)
从零到一手把手教你用Android Studio和Java打造个人专属天气App附完整源码天气预报应用是移动开发入门的经典项目。它不仅涵盖了网络请求、数据解析、UI设计等核心技能还能让你快速获得一个可实际运行的作品。本文将用最直观的方式带你从零开始构建一个功能完整的天气应用。1. 开发环境准备在开始编码之前我们需要确保开发环境配置正确。Android Studio是官方推荐的IDE它内置了Android SDK和必要的工具链。1.1 安装Android Studio前往 Android开发者官网 下载最新版本。安装过程中注意勾选以下组件Android SDKAndroid Virtual Device (AVD)Intel HAXM如果使用Intel处理器安装完成后首次启动时会下载Gradle和其他依赖项这可能需要一些时间。1.2 创建新项目打开Android Studio选择Start a new Android Studio project然后按照以下步骤操作选择Empty Activity模板设置项目名称如MyWeatherApp包名通常采用反向域名格式如com.example.myweatherapp语言选择Java最低API级别建议选择API 21Android 5.0提示API级别过低会限制可用功能过高则会减少设备兼容性。API 21覆盖了约95%的活跃设备。2. 项目架构设计良好的架构能让代码更易维护和扩展。我们采用改进的MVC模式app/ ├── model/ # 数据模型和网络请求 ├── view/ # 界面布局和控件 └── controller/ # 业务逻辑和适配器2.1 添加依赖库在app/build.gradle文件的dependencies块中添加以下依赖implementation com.squareup.retrofit2:retrofit:2.9.0 implementation com.squareup.retrofit2:converter-gson:2.9.0 implementation com.google.code.gson:gson:2.8.8 implementation androidx.recyclerview:recyclerview:1.2.1同步项目后这些库将帮助我们处理网络请求和数据解析。3. 实现核心功能3.1 获取天气API密钥我们使用和风天气的免费API。注册开发者账号后可以在控制台获取API Key。免费版足够用于学习和测试。在AndroidManifest.xml中添加网络权限uses-permission android:nameandroid.permission.INTERNET /3.2 创建数据模型根据API返回的JSON结构我们定义对应的Java类。例如当前天气数据public class NowWeather { SerializedName(temp) private String temperature; SerializedName(text) private String weatherText; // 省略getter和setter }3.3 实现网络请求使用Retrofit创建API服务接口public interface WeatherService { GET(weather/now) CallWeatherResponse getNowWeather( Query(location) String location, Query(key) String apiKey ); }然后在控制器中初始化Retrofit实例Retrofit retrofit new Retrofit.Builder() .baseUrl(https://api.heweather.net/) .addConverterFactory(GsonConverterFactory.create()) .build();4. 构建用户界面4.1 主界面布局使用ConstraintLayout构建响应式界面。关键元素包括当前位置显示当前温度天气状况图标未来几天预报列表androidx.constraintlayout.widget.ConstraintLayout TextView android:idid/locationText app:layout_constraintTop_toTopOfparent app:layout_constraintStart_toStartOfparent/ ImageView android:idid/weatherIcon app:layout_constraintTop_toBottomOfid/locationText/ !-- 其他UI元素 -- /androidx.constraintlayout.widget.ConstraintLayout4.2 未来预报列表使用RecyclerView展示多天预报。首先创建项目布局文件item_forecast.xml然后实现适配器public class ForecastAdapter extends RecyclerView.AdapterForecastAdapter.ViewHolder { private ListDailyForecast forecasts; // 实现必要的方法 }5. 功能优化与调试5.1 添加位置权限为了获取用户当前位置需要添加并请求以下权限uses-permission android:nameandroid.permission.ACCESS_FINE_LOCATION/运行时权限请求代码示例if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) ! PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, LOCATION_PERMISSION_REQUEST); }5.2 错误处理网络请求可能失败需要添加适当的错误处理call.enqueue(new CallbackWeatherResponse() { Override public void onFailure(CallWeatherResponse call, Throwable t) { runOnUiThread(() - Toast.makeText(MainActivity.this, 网络请求失败, Toast.LENGTH_SHORT).show()); } Override public void onResponse(CallWeatherResponse call, ResponseWeatherResponse response) { // 处理成功响应 } });6. 项目打包与发布6.1 生成签名密钥发布前需要为应用签名keytool -genkey -v -keystore my-release-key.jks -keyalg RSA \ -keysize 2048 -validity 10000 -alias my-alias6.2 配置构建类型在app/build.gradle中配置release构建类型android { signingConfigs { release { storeFile file(my-release-key.jks) storePassword password keyAlias my-alias keyPassword password } } buildTypes { release { signingConfig signingConfigs.release minifyEnabled true proguardFiles getDefaultProguardFile(proguard-android.txt), proguard-rules.pro } } }完成这些步骤后你就可以通过Android Studio的Generate Signed Bundle/APK向导打包应用了。