Tüm Rehberler

Hava Durumu API (OpenWeatherMap)

İleri ⏱ 100 dk
BÖLÜM 2 / 2

HTTP İsteği ve JSON Parse

Java'nın yerleşik HttpURLConnection sınıfı veya Executors kullanarak Thread üzerinde veri okuyoruz.

Unity Editör Adımları

Arka plan thread'i başlatarak URL'e bağlan.
Gelen veriyi InputStream üzerinden oku ve JSONObject'e dönüştür.
csharp
package com.example.weatherapp;
import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import androidx.appcompat.app.AppCompatActivity; import org.json.JSONObject; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.util.concurrent.Executors;

public class MainActivity extends AppCompatActivity {
    String API_KEY = "SİZİN_API_KEYİNİZ";
    @Override protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
        EditText editCity = findViewById(R.id.editCity); Button btnSearch = findViewById(R.id.btnSearch); TextView txtWeather = findViewById(R.id.txtWeather);

        btnSearch.setOnClickListener(v -> {
            String city = editCity.getText().toString();
            Executors.newSingleThreadExecutor().execute(() -> {
                try {
                    URL url = new URL("https://api.openweathermap.org/data/2.5/weather?q=" + city + "&appid=" + API_KEY + "&units=metric");
                    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                    BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
                    StringBuilder result = new StringBuilder(); String line;
                    while((line = reader.readLine()) != null) result.append(line);
                    
                    JSONObject json = new JSONObject(result.toString());
                    String temp = json.getJSONObject("main").getString("temp");
                    String desc = json.getJSONArray("weather").getJSONObject(0).getString("description");
                    
                    new Handler(Looper.getMainLooper()).post(() -> {
                        txtWeather.setText(city.toUpperCase() + "\nSıcaklık: " + temp + "°C\nDurum: " + desc);
                    });
                } catch (Exception e) { e.printStackTrace(); }
            });
        });
    }
}

API istekleri asla ana iş parçacığında (UI Thread) çalıştırılamaz, çökme yaşanır. Executors bu yüzden gereklidir.

Önceki Bölüm
Rehberi Tamamladın! 🎉