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.
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.