© Khmer Angkor Academy - sophearithput168

Project: Weather App (REST API)

🌤️ Project: Weather App with REST API Integration

នៅក្នុងគម្រោងនេះ យើងនឹងបង្កើត Weather App មួយដែលប្រើ OpenWeatherMap API ដើម្បីទាញយកព័ត៌មានអាកាសធាតុ។ គម្រោងនេះផ្តោតលើ REST API calls, JSON parsing, និង AsyncTask/Volley library!

📋 Features នៃ Weather App

Feature ពិពណ៌នា
🌍 City Search ស្វែងរកទីក្រុងណាមួយក្នុងពិភពលោក
🌡️ Current Weather សីតុណ្ហភាព, ការពិពណ៌នា, រូបតំណាង
💨 Wind & Humidity ល្បឿនខ្យល់ និងសំណើម
📅 5-Day Forecast ព្យាករណ៍អាកាសធាតុ 5 ថ្ងៃ
📍 Location Detection ប្រើទីតាំងបច្ចុប្បន្ន (GPS)
🌐 REST API OpenWeatherMap API integration
🔄 Pull to Refresh Update ទិន្នន័យថ្មី

📁 Project Structure

មុនពេលចាប់ផ្តើម សូមយល់ដឹងអំពីរចនាសម្ព័ន្ធ files នៃគម្រោង:

📦 WeatherApp/
├── 📂 app/
│   ├── 📂 src/
│   │   ├── 📂 main/
│   │   │   ├── 📂 java/
│   │   │   │   └── 📂 com/example/weatherapp/
│   │   │   │       ├── MainActivity.java
│   │   │   │       ├── WeatherData.java
│   │   │   │       ├── ForecastData.java
│   │   │   │       ├── ForecastAdapter.java
│   │   │   │       └── WeatherApiService.java
│   │   │   ├── 📂 res/
│   │   │   │   ├── 📂 layout/
│   │   │   │   │   ├── activity_main.xml
│   │   │   │   │   └── item_forecast.xml
│   │   │   │   ├── 📂 values/
│   │   │   │   │   ├── colors.xml
│   │   │   │   │   └── strings.xml
│   │   │   │   └── 📂 drawable/
│   │   │   └── AndroidManifest.xml
│   └── build.gradle
└── build.gradle

📝 Note: បង្កើត New Project នៅក្នុង Android Studio។ អ្នកត្រូវការ OpenWeatherMap API Key (ឥតគិតថ្លៃ) ពី openweathermap.org

🔑 Step 1: Get API Key

សូមធ្វើតាមជំហានទាំងនេះ:

  1. ចូលទៅកាន់ OpenWeatherMap
  2. បង្កើតគណនីឥតគិតថ្លៃ (Sign Up)
  3. ទទួលបាន API Key ពី Account → API Keys
  4. រង់ចាំ 10-15 នាទី ដើម្បីឱ្យ API Key active

💾 Step 2: Add Dependencies (build.gradle)

បន្ថែម Volley library សម្រាប់ network requests:

dependencies {
    implementation 'com.android.volley:volley:1.2.1'
    implementation 'com.squareup.picasso:picasso:2.8'
    implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
    implementation 'com.google.android.gms:play-services-location:21.0.1'
}

🌐 Step 3: Add Permissions (AndroidManifest.xml)

បន្ថែម permissions សម្រាប់ Internet និង Location:

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

🎨 Step 4: Weather Data Model (WeatherData.java)

បង្កើត model class សម្រាប់រក្សាទុកទិន្នន័យអាកាសធាតុ។

Java Code
Click "Run" to execute the Java code

🎨 Step 5: Forecast Data Model (ForecastData.java)

បង្កើត model class សម្រាប់ព្យាករណ៍អាកាសធាតុ។

Java Code
Click "Run" to execute the Java code

🌐 Step 6: Weather API Service (WeatherApiService.java)

បង្កើត service class សម្រាប់ API calls ជាមួយ Volley។

Java Code
Click "Run" to execute the Java code

🎨 Step 7: Main Activity Layout (activity_main.xml)

បង្កើត UI layout សម្រាប់បង្ហាញព័ត៌មានអាកាសធាតុ។

Java Code
Click "Run" to execute the Java code

🎨 Step 8: Forecast Item Layout (item_forecast.xml)

បង្កើត layout សម្រាប់ forecast item នីមួយៗ។

Java Code
Click "Run" to execute the Java code

🔄 Step 9: Forecast Adapter (ForecastAdapter.java)

បង្កើត RecyclerView adapter សម្រាប់បង្ហាញ forecast list។

Java Code
Click "Run" to execute the Java code

💻 Step 10: Main Activity (MainActivity.java)

បង្កើត main activity ដែលភ្ជាប់ទាំងអស់ជាមួយគ្នា។

Java Code
Click "Run" to execute the Java code

🎯 API Integration Concepts

1. API Endpoints

Endpoint Purpose
/weather Current weather data
/forecast 5-day weather forecast

2. JSON Response Structure

{
  "main": {
    "temp": 298.15,
    "humidity": 65
  },
  "weather": [{
    "description": "clear sky",
    "icon": "01d"
  }],
  "wind": {
    "speed": 3.5
  }
}

3. HTTP Methods

Method Usage
GET ទាញយកទិន្នន័យពី API
POST បញ្ជូនទិន្នន័យទៅ server

✨ Advanced Features (Optional)

💡 អ្នកអាចបន្ថែមបាន:

  • 🌍 Multiple cities support
  • 💾 Cache data with Room database
  • 📊 Weather charts and graphs
  • 🔔 Weather alerts/notifications
  • 🎨 Dynamic backgrounds based on weather
  • 🌙 Hourly forecast
  • 🗺️ Map integration
  • 🌡️ Temperature unit conversion (°C/°F)

🐛 Common API Issues & Solutions

Issue Solution
401 Unauthorized Check API key, wait 10-15 minutes after creating
No internet connection Check permissions, handle network errors gracefully
JSON parsing error Validate JSON structure, use try-catch blocks
City not found Show user-friendly error message
Slow loading Add loading indicator, implement caching

🎓 Learning Outcomes

បន្ទាប់ពីបញ្ចប់គម្រោងនេះ អ្នកនឹងយល់ដឹងពី:

  • ✅ REST API integration with Volley
  • ✅ JSON parsing with JSONObject
  • ✅ HTTP GET requests
  • ✅ Async network operations
  • ✅ Error handling for network calls
  • ✅ Image loading with Picasso
  • ✅ Location services (GPS)
  • ✅ SwipeRefreshLayout
  • ✅ RecyclerView with API data

✅ Congratulations! អ្នកបានបង្កើត Weather App មួយដែលប្រើ REST API ពេញលេញ! នេះគឺជា foundation ល្អសម្រាប់ apps ណាដែលត្រូវការទិន្នន័យពី external APIs!

🚀 API Testing Tips

  1. ប្រើ Postman ដើម្បីសាកល្បង API endpoints មុនពេល code
  2. ពិនិត្យមើល API documentation យ៉ាងល្អិតល្អន់
  3. រក្សាទុក API key នៅក្នុង strings.xml ឬ BuildConfig
  4. Handle rate limits (Free API មានដែនកំណត់ requests)
  5. Cache data ដើម្បីកាត់បន្ថយ API calls