Merhaba arkadaşlar, bu yazımda döviz kurlarını doviz.com sitesinin sunduğu api ile json parse ederek, listeye aktaran otomatik yenileyen ve istediğiniz zamanda yenileme yapabileceğiniz bir uygulama olacak.
Bu uygulamanın ekran görüntüsü olacak.
Koda geçersek;
Her zaman ki gibi JavaFx – FXML Application olarak projemizi oluşturuyoruz.
Currency adında yeni bir class oluşturuyoruz, bu class bizim jsondan çekeceğimiz verileri tutacak.
public class Currency { public double selling; public double buying; public double change_rate; public String name; public String fullName; public String code; public int curr; public double getSelling() { return selling; } public void setSelling(double selling) { this.selling = selling; } public double getBuying() { return buying; } public void setBuying(int buying) { this.buying = buying; } public double getChange_rate() { return change_rate; } public void setChange_rate(double change_rate) { this.change_rate = change_rate; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getFullName() { return fullName; } public void setFullName(String fullName) { this.fullName = fullName; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } /** * @return the currency */ public int getCurrency() { return curr; } /** * @param currency the currency to set */ public void setCurrency(int curr) { this.curr = curr; } }
FXMLDocumentController classına geçersek,
Gerekli tanımlamaları yapıyoruz.
@FXML private ListView list_currency; @FXML private Label lbl_currencyName; @FXML private Label lbl_buying; @FXML private Label lbl_selling; @FXML private Label lbl_changeRate; @FXML private Label lbl_code; @FXML private RadioButton rb_refreshAutomatic; //kur listelerini tutacak listemiz //listview observableList ile çalıştığı için bu şekilde tanımlıyoruz ObservableList currList = FXCollections.observableArrayList();
initialize methodu ilk çalışan fonksiyonumuz
@Override public void initialize(URL url, ResourceBundle rb) { //Api adresi tanımlanıyor String urlDoviz = "https://www.doviz.com/api/v1/currencies/all/latest"; //Fonksiyona gönderiliyor getJsonData(urlDoviz); }
getJsonData fonksiyonunda Json verimizi Stringe dönüştürüyoruz. Burada ki işlemleri daha kısaltabiliriz fakat BufferedReader vs. gibi classlarıda göstermek istedim.
//Apide ki bilgileri stringe çevirecek fonksiyon public void getJsonData(String url){ Currency[] currency = new Currency[68]; String result = ""; try { URL urlDoviz = new URL(url); HttpURLConnection urlDovizCom = (HttpURLConnection) urlDoviz.openConnection(); InputStreamReader inputStreamReader = new InputStreamReader(urlDovizCom.getInputStream()); try (BufferedReader bufferedReader = new BufferedReader(inputStreamReader)) { String line = ""; while((line = bufferedReader.readLine()) != null){ result += line; } } } catch (MalformedURLException ex) { Logger.getLogger(FXMLDocumentController.class.getName()).log(Level.SEVERE, null, ex); } catch (IOException ex) { Logger.getLogger(FXMLDocumentController.class.getName()).log(Level.SEVERE, null, ex); } //json datayı parse edecek fonksiyona gönderiyoruz getJsonParseData(result); }
Json verimizi çektikten sonra parse etme işlemine geçiyoruz. getJsonParseData fonksiyonu buna yarayacak.
public void getJsonParseData(String json){ //Listview'da kur isimlerini göstereceğimiz liste ObservableList currListName = FXCollections.observableArrayList(); try { //bizim jsonumuz dizi şeklinde olduğu için array olarak çektik JSONArray jsonArray = new JSONArray(json); //for döngüsünde her bir dizide ki elemanları teker teker çekiyoruz //en sonunnda da Currency türünde diziye atıyoruz for (int i = 0; i < jsonArray.length(); i++) { Currency currency = new Currency(); currency.fullName = jsonArray.getJSONObject(i).getString("full_name"); currency.name = jsonArray.getJSONObject(i).getString("name"); currency.code = jsonArray.getJSONObject(i).getString("code"); currency.selling = jsonArray.getJSONObject(i).getDouble("selling"); currency.buying = jsonArray.getJSONObject(i).getDouble("buying"); currency.change_rate = jsonArray.getJSONObject(i).getDouble("change_rate"); currency.curr = jsonArray.getJSONObject(i).getInt("currency"); currList.add(currency); } //bunu aynı for içinde de yapabilirdik for (int i = 0; i < jsonArray.length(); i++) { currListName.add(jsonArray.getJSONObject(i).getString("full_name")); } //listView'a isimleri atıyoruz list_currency.setItems(currListName); //ilk açıldığında ilk indexde ki elemanın verilerini ekranda göstereceğiz lbl_buying.setText(Double.toString(currList.get(0).buying)); lbl_selling.setText(Double.toString(currList.get(0).selling)); lbl_changeRate.setText(Double.toString(currList.get(0).change_rate)); if (currList.get(0).change_rate<0) { lbl_changeRate.setTextFill(Color.web("#FF0000")); }else{ lbl_changeRate.setTextFill(Color.web("#008000")); } lbl_currencyName.setText(currList.get(0).fullName); lbl_code.setText(currList.get(0).code); } catch (JSONException ex) { Logger.getLogger(FXMLDocumentController.class.getName()).log(Level.SEVERE, null, ex); } }
Bu işlemlerden sonra aslında çoğu işimiz bitti, şimdi buttonlarda vs. yapılacak işlemleri ayarlayalım. getCurrencyPass fonksiyonu listViewda kur seçtiğimizde detaylarını labellara aktaracak.
@FXML private void getCurrencyPass(MouseEvent event) { //seçilen isimi aktarıyoruz String fullName = list_currency.getSelectionModel().getSelectedItem(); for (int i = 0; i < currList.size(); i++) { //eğer seçilen kişi ilk listedeki elemanında ismin aynısı ise if (fullName.equals(currList.get(i).fullName)) { lbl_buying.setText(Double.toString(currList.get(i).buying)); lbl_selling.setText(Double.toString(currList.get(i).selling)); lbl_changeRate.setText(Double.toString(currList.get(i).change_rate)); if (currList.get(i).change_rate<0) { lbl_changeRate.setTextFill(Color.web("#FF0000")); }else{ lbl_changeRate.setTextFill(Color.web("#008000")); } lbl_currencyName.setText(currList.get(i).fullName); lbl_code.setText(currList.get(i).code); } } }
Ekrandaki kurları yenile butonunda çalışacak fonksiyonumuzu yazalım.
@FXML private void refreshCurrency(ActionEvent event) { //yukarıda yazdığımız fonksiyonları tekrar tetikliyoruz getJsonData("https://www.doviz.com/api/v1/currencies/all/latest"); }
Bunuda yazdıktan sonra otomatik olarak kurları yenileyecek fonksiyonumuzu yazıyoruz.
@FXML private void refreshAutomatic(ActionEvent event) { //eğer seçilmiş ise if(rb_refreshAutomatic.isSelected()){ //milisaniye şeklinde çalışır bu yüzden 1 dakikanın milisaniye cinsinden yazıyoruz Timeline timeline = new Timeline(new KeyFrame(Duration.millis(60000), new EventHandler() { @Override public void handle(ActionEvent event) { //tekrar tetikliyoruz getJsonData("https://www.doviz.com/api/v1/currencies/all/latest"); } })); //sürekli tekrar etmesi için INDEFINITE olarak ayarlıyoruz timeline.setCycleCount(Animation.INDEFINITE); timeline.play(); } }
Uygulamanın dosyasını buradan indirebilirsiniz.
Hocam dosyalar verdiğiniz linkte mevcut değil. Tekrar günceller misiniz?
BeğenBeğen
Merhabalar kusura bakmayın aslında dropbox üzerinde aktif olarak duruyor fakat link bozulmuş sanırım aşağıdaki linkten indirebilirsiniz;
https://www.dropbox.com/s/l5iwzuh1ubviils/DovizCom.rar?dl=0
BeğenBeğen
Maalesef doviz.com artık api erişimini kesti.
BeğenBeğen