Merhaba arkadaşlar bu yazımda JavaFx’te yaptığımız uygulamanın android uygulamasını hazırlayacağız. Api olarak yine Open Weather Api kullanacağız. Linkimiz ise şu formatta olacak ;
http://api.openweathermap.org/data/2.5/weather?q=SEHİR&appid={KEY}
Key için openweatherapi.com adresinden üyelik girişi yapmanız gerekli olacak ücretsiz zaten çok fazla sürmez üye olmanız.
Linke şehir girip açtığımızda şu şekilde bir Json verisi elde edicez;
{"coord": {"lon":-0.13,"lat":51.51}, "weather":[ {"id":500, "main":"Rain", "description":"light rain", "icon":"10n"} ], "base":"stations", "main":{ "temp":287.98, "pressure":999, "humidity":89, "temp_min":287.55, "temp_max":288.71 }, "wind":{ "speed":1.03, "deg":223, "gust":1.54 }, "rain":{ "1h":0.51 }, "clouds":{ "all":92}, "dt":1465863017, "sys":{ "type":3, "id":10115, "message":0.0455, "country":"GB", "sunrise":1465875768, "sunset":1465935552 }, "id":2643743, "name":"London", "cod":200 }
Bu Json’a göre kodlarımız şekillenecek şimdi kodlara geçersek;
public class MainActivity extends AppCompatActivity { private TextView txt_Sehir, txt_Sicaklik, txt_Weather, txt_Aciklama; private Button buton; private EditText editText; private ImageView image; String sehir; //tanımlamalarımızı yaptık. @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); txt_Sehir = (TextView) findViewById(R.id.txt_sehir); txt_Aciklama = (TextView) findViewById(R.id.txt_aciklama); txt_Sicaklik = (TextView) findViewById(R.id.txt_sicaklik); txt_Weather = (TextView) findViewById(R.id.txt_weather); buton = (Button) findViewById(R.id.button); editText = (EditText) findViewById(R.id.editText); image = (ImageView) findViewById(R.id.imageView); //arayüzdeki componentlere atadık buton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { JsonParse jsonParse = new JsonParse(); sehir = String.valueOf(editText.getText());//edit textten veriyi sehir adlı değişkene atadık new JsonParse().execute();//jsonParse AsynTask metodumuzu çalıştırdık. } }); } //AsynTask olayını başka bir yazıda açıklayacağım inşallah ama internetten araştırabilirsiniz çok güzel anlatan siteler var. protected class JsonParse extends AsyncTask<Void, Void, Void>{ String result_main =""; String result_description = ""; String result_icon = ""; int result_temp; String result_city; Bitmap bitImage; @Override protected Void doInBackground(Void... params) { String result=""; try { URL weather_url = new URL("http://api.openweathermap.org/data/2.5/weather?q="+sehir+"&appid=5519df78a91952f50079565124888a76");//Url'mizi aldık BufferedReader bufferedReader = null; bufferedReader = new BufferedReader(new InputStreamReader(weather_url.openStream()));//url'yi okuyacak bufferReader'a gönderdik String line = null; while((line = bufferedReader.readLine()) != null){//satırları tek tek aldık ve ekledik result += line; } bufferedReader.close(); JSONObject jsonObject = new JSONObject(result);//string ifadeye çevirdik JSONArray jsonArray = jsonObject.getJSONArray("weather");//şimdi jsona bakarsanız weather isimli bir dizi var o diziyi aldık JSONObject jsonObject_weather = jsonArray.getJSONObject(0);//ilk indexi aldık result_main = jsonObject_weather.getString("main");//ilk indexin main adlı değişkenini çektik result_description = jsonObject_weather.getString("description"); result_icon = jsonObject_weather.getString("icon"); //tek tek işimize yarayacakları aldık JSONObject jsonObject_main = jsonObject.getJSONObject("main");//main diye son kısımlarda bir değişken var onuda aldık Double temp = jsonObject_main.getDouble("temp");//main'in içinden sıcaklığı aldık result_city = jsonObject.getString("name");//en sondaki kısımdan city ismini aldık result_temp = (int) (temp-273);//Kelvin olduğu için Celcius'a çevirdik URL icon_url = new URL("http://openweathermap.org/img/w/"+result_icon+".png");//resim dosyasını burada saklıyor api adresimiz bitImage = BitmapFactory.decodeStream(icon_url.openConnection().getInputStream());//Android'de image olarak kullanamadığımız için bitmap formatına çevirdik } catch (IOException e) { e.printStackTrace(); } catch (JSONException e) { e.printStackTrace(); } return null; } @Override protected void onPostExecute(Void aVoid) { txt_Sicaklik.setText(String.valueOf(result_temp)); txt_Weather.setText(result_main); txt_Sehir.setText(result_city); txt_Aciklama.setText(result_description); image.setImageBitmap(bitImage); super.onPostExecute(aVoid); //tek tek gerekli olan kısımlara yerleştirdik aldığımız verileri } } }
Programımızı çalıştırdıktan sonra nasıl görünecek derseniz ;
Programın dosyasını buradan indirebilirsiniz.
merhaba,uygulamanız çok yararlı oldu ancak size bir sorum olucak hava durmu sonuçlarını türkçe vermesi için ne yapabilirim
BeğenBeğen
Yorumunuz için teşekkür ederim api desteği ingilizce olduğu için mecburen ingilizce sonuç alıyoruz ama google translatenin api desteği olması lazım onu araştırıp kullanabilirsiniz diye umuyorum.
BeğenBeğen
hava durumu sınuçlarını nasıl türkçe alabiliriz
BeğenBeğen
Acaba dosyayı tekrar upload edebilir misiniz ?
BeğenBeğen
Merhaba Hasan Bey, teşekkür ederim yorumunuz için linki güncelledim indirebilirsiniz.
BeğenBeğen
Merhana İsmet Bey javayı biliyor musunuz bir sorum olacakdı da
BeğenBeğen
Merhaba Ahmet bey, buyrun sorabilirsiniz umarım cevaplayabilirim.
BeğenBeğen
Kullanıcının girdiği sayı veya kelimeleri ayrı ayrı dizilere aktarıp ekrana yansıtan programın kodları gerek bana 3 gündür uğraşdım lakin yapamadım siz yardımcı olabilir misiniz acaba ?
BeğenBeğen
Kullanıcının girdiği sayıları veya kelimeleri belirli bir sayı kadar girdikten sonra falan toptan mı gösterecek hepsini ?
BeğenBeğen
Kullanici bir isim girecek ardindan sayi girecek ve bunlari ayri ayri gostercek
BeğenBeğen
Tamam anladım, gün içerisinde yazıp gönderirim insallah.
BeğenBeğen
ahmet bey mail adresinizi verirseniz gönderebilirim.
BeğenBeğen
rozetli70@gmail.com şunu unuttum
kullanıcı sayı girecek ve ardından yazı girecek ve bunları ayrı ayrı dizilere aktarcak mesela
Sayı giriniz :
5
yazı giriniz :
ahmet
sayı : 5
yazı: ahmet gibi olursa çok iyi olur hocam
BeğenBeğen
Hocam çok teşekkürler.
Androidde yeni sayılırım fakat sayenizde api mantığı oturmuş oldu. Bi çok kaynağa baktım hava durumu için ama hepsi karışıktı ve key nedir nasıl/nereye yerleştirilir bir türlü anlayamamıştım. Sayenizde çok iyi anladım Allah razı olsun 🙂
Bu tür yazılarınızın artması dileğiyle, başarılar 🙂
BeğenBeğen
Allah cumlemizden razi olsun. Guzel yorumunuz icin cok tesekkur ederim 🙂
BeğenBeğen
Merhaba, bu olayı bi çok kez yaptıracagım için(farklı activitylerde) ve her bir activity de ayrı ayrı tanımlamak yerine o sınıftan nesne olusturup ornegin
islemler ii=new islemler(sehirAdi); dedigimde sehir adını yollayacagım ve bilgileri alacağım şu şekilde ii.gelenSicaklik, ii.gelenAciklama vs. sonra da txt_aciklama.setText(ii.gelenAciklama);
diyecegim ama olmuyor. Nasıl yapabilirim acaba?
BeğenBeğen
Merhaba,
Şu anda ilgilenemediğim için kusura bakmayın akşam örnek bir kod yazıp göndereceğim inşallah.
BeğenBeğen
Teşekkürler bekliyorum 🙂
Bir de her hangi bi web sitesini api olarak kullanabilme şansımız var mı_? jsoup konusunu araştırdım fakat kullanıcı adı ve şifre istenen bi site örneğin facebook(tabii apisi yokmuş gibi düşünürsek) gibi. Hesabı olanlar giriş yapıp içeriklerini görebilecek. Bu mümkün mü? kendi api ımızı yaratmak yani
BeğenBeğen
Selenium framework var, emin değilim tam olarak istediğin bu mu ama, selenium ile kullanıcı girişi yaptırabilirsin web crawler gibi butonlara tıklayabiliyorsun vs. api olmadan uygulamayı webde gezindirebilirsin.
BeğenBeğen
Merhaba örnek kod bloğu yazmak için vakit bulamadım ama şu linke bakarsanız gayet mantıklı bir çözüm sunulmuş override ederek ;
https://stackoverflow.com/questions/12575068/how-to-get-the-result-of-onpostexecute-to-main-activity-because-asynctask-is-a
BeğenBeğen
projeniz ascı2 de olmayan karakterler ıcerıyor dıo ınject etmıo projeyı bı yardımcı olsanız acıllll ?
BeğenBeğen
Projeyi indirdikten sonra tam olarak ne yapıyorsunuz?
BeğenBeğen