Android ile Hava Durumu Bilgilerini Almak
İnternet ortamında bir çok servisten JSON formatında bilgiler almak mümkün. Bu yazımızda JSON formatında Hava Durumu bilgilerini alıp ekrana yansıtacağız.
[wpdm_file id=16]Hava Durumu bilgilerini Meteoroloji Genel Müdürlüğünün web sayfasından alacağız. Sayfaları biraz incelediğimde hava durumu bilgilerini JSON formatında verdiklerine rastlamadım. Yazdığım bir PHP sayfası hava durumu bilgisini meteorolojiden alıp JSON formatına dönüştürüyor.
Hava Durumu bilgilerini Meteoroloji Genel Müdürlüğünden alan php kodunda mgm.gov.tr’deki yeni duruma göre düzenlemelere gitmek gerekmektedir. Düzenleme yapılacaktır. Bunun farkında olarak devam edebilirsiniz.
PHP sayfasının adresi :
“http://androidevreni.com/api/android/havadurumu.php?merkez=Ankara“.
Test için ankara yerine başka illler yazabilirsiniz.
Android projemizde HTTP GET ve JSON işlemlerini yapmak için Android Asynchronous Http Client kütüphanesini kullanacağız. Kütüphaneyi sayfasından Download butonuna basarak indirin.
Projemizi Oluşturalım
- Yeni bir proje oluşturun File ⇒ New ⇒ Android Project
-
İndirdiğiniz android-async-http-*.jar dosyasını libs altına kopyalayın.
-
activity_main.xml dosyasını açın. Aşağıdaki arayüz kod parçasını dosyanın içerisine yapıştırın. Arayüzümüzde illerin listesini yerleştireceğimiz bir ListView var.
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <ListView android:id="@+id/listview" android:layout_width="fill_parent" android:layout_height="fill_parent" /> </RelativeLayout>
-
MainActivity.java dosyasını açın, içerisine aşağıdaki kodları yapıştırın.
public class MainActivity extends Activity { ProgressDialog pDialog; byte[] inenDosya; ListView listView; final AsyncHttpClient client = new AsyncHttpClient(); final RequestParams params = new RequestParams(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView = (ListView) findViewById(R.id.listview); pDialog = new ProgressDialog(this); pDialog.setIndeterminate(false); pDialog.setCancelable(true); String[] iller = { "Adana", "Adiyaman", "Afyonkarahisar", "Agri", "Amasya", "Ankara", "Antalya", "Artvin", "Aydin", "Balikesir", "Bilecik", "Bingol", "Bitlis", "Bolu", "Burdur", "Bursa", "Çanakkale", "Çankiri", "Çorum", "Denizli", "Diyarbakir", "Edirne", "Elazig", "Erzincan", "Erzurum", "Eskisehir", "Gaziantep", "Giresun", "Gumushane", "Hakkari", "Hatay", "Isparta", "Mersin", "İstanbul", "İzmir", "Kars", "Kastamonu", "Kayseri", "Kirklareli", "Kirsehir", "Kocaeli", "Konya", "Kutahya", "Malatya", "Manisa", "Kahramanmaras", "Mardin", "Mugla", "Mus", "Nevsehir", "Nigde", "Ordu", "Rize", "Sakarya", "Samsun", "Siirt", "Sinop", "Sivas", "Tekirdag", "Tokat", "Trabzon", "Tunceli", "Sanliurfa", "Usak", "Van", "Yozgat", "Zonguldak", "Aksaray", "Bayburt", "Karaman", "Kirikkale", "Batman", "sirnak", "Bartin", "Ardahan", "Igdir", "Yalova", "Karabuk", "Kilis", "Osmaniye", "Duzce" }; final ArrayList<String> list = new ArrayList<String>(); for (int i = 0; i < iller.length; ++i) { list.add(iller[i]); } final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list); listView.setAdapter(adapter); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, final View view, int position, long id) { final String item = (String) parent.getItemAtPosition(position); params.put("merkez", item.toString()); pDialog.setMessage("Bilgi alınıyor lütfen bekleyin..."); pDialog.show(); client.get( "http://androidevreni.com/api/android/havadurumu.php", params, new JsonHttpResponseHandler() { @Override public void onSuccess(JSONObject jsonData) { JSONObject firstEvent = null; String data = null; try { pDialog.dismiss(); mesajGoster("İl :" + item.toString() + "nZaman :" + jsonData.getString("zaman") + "nSıcaklık: " + jsonData.getString("sicaklik") + "nNem: " + jsonData.getString("nem") + "nRüzgar: " + jsonData.getString("ruzgar") + "nBasınç: " + jsonData.getString("basinc")); } catch (JSONException e) { e.printStackTrace(); } } @Override public void onFailure(int statusCode, Throwable e, JSONObject errorResponse) { super.onFailure(statusCode, e, errorResponse); pDialog.dismiss(); mesajGoster("Karşıdan sonuç alınamadı, nbir hata oluştu, nlütfen tekrar deneyin"); } }); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; } public void mesajGoster(String mesaj) { Toast.makeText(getApplicationContext(), mesaj, Toast.LENGTH_LONG) .show(); } }
-
İnternete ulaşabilmek için gerekli izni AndroidManifest.xml dosyasında tanımlayın.
<uses-permission android:name="android.permission.INTERNET"/>
- Hava Durumu bilgisini alan ve JSON şeklinde veren havadurumu.php adlı dosyanın içeriği.
<?php $iller = array("Adana", "Adiyaman", "Afyonkarahisar", "Agri", "Amasya", "Ankara", "Antalya", "Artvin", "Aydin", "Balikesir", "Bilecik", "Bingol", "Bitlis", "Bolu", "Burdur", "Bursa", "Çanakkale", "Çankiri", "Çorum", "Denizli", "Diyarbakir", "Edirne", "Elazig", "Erzincan", "Erzurum", "Eskisehir", "Gaziantep", "Giresun", "Gumushane", "Hakkari", "Hatay", "Isparta", "Mersin", "İstanbul", "İzmir", "Kars", "Kastamonu", "Kayseri", "Kirklareli", "Kirsehir", "Kocaeli", "Konya", "Kutahya", "Malatya", "Manisa", "Kahramanmaras", "Mardin", "Mugla", "Mus", "Nevsehir", "Nigde", "Ordu", "Rize", "Sakarya", "Samsun", "Siirt", "Sinop", "Sivas", "Tekirdag", "Tokat", "Trabzon", "Tunceli", "Sanliurfa", "Usak", "Van", "Yozgat", "Zonguldak", "Aksaray", "Bayburt", "Karaman", "Kirikkale", "Batman", "sirnak", "Bartin", "Ardahan", "Igdir", "Yalova", "Karabuk", "Kilis", "Osmaniye", "Duzce"); if (!in_array($_GET['merkez'], $iller)) { exit; } header('Content-type: application/json'); $html = httpGet("http://www.mgm.gov.tr/tahmin/il-ve-ilceler.aspx?m=".strtoupper( str_replace("i", "I", $_GET['merkez']) )); $doc = new DomDocument (); $bilgiler = array(); $bilgiler2 = array(); if (@$doc->loadHTML ( $html )) { $table = $doc->getElementsByTagName ( 'table' ); foreach ( $table as $item ) { $innerHTML = ""; $children = $item->childNodes; foreach ($children as $child) { $innerHTML .= $child->ownerDocument->saveXML( $child ); $sonTD = $child->childNodes; } foreach ($sonTD as $td) { $bilgiler[] = $td->nodeValue; } } } $bilgiler2['zaman'] = $bilgiler[0]; $bilgiler2['sicaklik'] = $bilgiler[2]; $bilgiler2['nem'] = $bilgiler[4]; $bilgiler2['ruzgar'] = $bilgiler[6]; $bilgiler2['basinc'] = $bilgiler[8]; echo json_encode($bilgiler2); function get_inner_html( $node ) { $innerHTML= ''; $children = $node->childNodes; foreach ($children as $child) { $innerHTML .= $child->ownerDocument->saveXML( $child ); } return $innerHTML; } function getRandomUserAgent() { $userAgents=array( "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)", "Opera/9.20 (Windows NT 6.0; U; en)", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en) Opera 8.50", "Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows NT 5.1) Opera 7.02 [en]", "Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; fr; rv:1.7) Gecko/20040624 Firefox/0.9", "Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/48 (like Gecko) Safari/48" ); $random = rand(0,count($userAgents)-1); return $userAgents[$random]; } function httpGet($url) { $ch = curl_init(); curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_RETURNTRANSFER,true); curl_setopt($ch,CURLOPT_USERAGENT,getRandomUserAgent()); curl_setopt($ch,CURLOPT_FOLLOWLOCATION,TRUE); curl_setopt($ch,CURLOPT_MAXREDIRS,2); $output=curl_exec($ch); curl_close($ch); return $output; }
Projenin çalışır halinden görüntüler.
İyi çalışmalar.
beyfendi bu hava durumu uygulamsına gps ekleyip bulundugumuz yerin hava durumunu alabilme sansımız var mı ben bilgisayara programcılıgı okuyorum bi yardımcı olabilirsek iyi çalışmlar
Hangi yazılım programıyla yapılılıyor bu?
@Override
public void onSuccess(JSONObject jsonData) {
JSONObject firstEvent = null;
String data = null;
try {
pDialog.dismiss();
mesajGoster(“İl :” + item.toString()
+ “nZaman :”
+ jsonData.getString(“zaman”)
+ “nSıcaklık: ”
+ jsonData.getString(“sicaklik”)
+ “nNem: ”
+ jsonData.getString(“nem”)
+ “nRüzgar: ”
+ jsonData.getString(“ruzgar”)
+ “nBasınç: ”
+ jsonData.getString(“basinc”));
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override burda hata veriyo
public void onFailure(int statusCode, Throwable e,
JSONObject errorResponse) {
super.onFailure(statusCode, e, errorResponse); burda hata veriyo
pDialog.dismiss();
mesajGoster(“Karşıdan sonuç alınamadı, bir hata oluştu, lütfen tekrar deneyin”);
}