Android – Döviz Kurları (JSON)

Merhaba arkadaşlar bu yazıda daha önce JavaFx kullanarak yaptığımız projenin android versiyonunu yapacağız. O yazıya da buradan ulaşabilirsiniz.

Basitçe göstermek gerekirse uygulamamız son halinde aşağıdaki şekilde olacak;

 

Şimdi ilk olarak manifest dosyasından başlamak istiyorum;

3

Yukarıda gördüğünüz gibi manifest dosyasına internete erişebilmek için izin ekliyoruz.

Daha sonra bu uygulama iki ekranda çalışacağı için ikinci activity’yi yaratmamız gerekli.

4

Yukarıda gösterdiğim şekilde ismi vs. tamamen size kalmış şekilde yaratabilirsiniz.
Bu işlemi yaptığınızda manifest dosyası yukarıdaki gibi olur.

Koda geçmeden önce her zamanki gibi oluşturacağımız sınıfın kodlarını yazmak istiyorum. Bir önceki yazıda JSON’ın yapısını anlatmıştım. Bu yüzden burada bunun detayına girmeyeceğim. Bizim JSON’ımız da currency_name, selling_buying gibi parametreler var ve bizde bunları tutabilmek için bir sınıf oluşturmamız gerekli aşağıdaki gibi;

public class DovizCom {
    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(double 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;
    }

    public int getCurr() {
        return curr;
    }

    public void setCurr(int curr) {
        this.curr = curr;
    }
}

Bu class’ı oluşturdak sonra asıl koda geçebiliriz.

//heryerden erişebilmek için en yukarıda tanımladık
    ListView listCurrency;
    String[] currList;
    DovizCom[] currArray = new DovizCom[68];
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        listCurrency = (ListView) findViewById(R.id.listCurrency);
        //class çağırılıyor
        JsonParsing jsonParsing = new JsonParsing();

        jsonParsing.execute();
        //listView'a tıklandığında çalışacak method
        listCurrency.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView adapterView, View view, int position, long id) {
                Intent myIntent = new Intent(MainActivity.this, CurrencyInfo.class);
                myIntent.putExtra("code", currArray[position].code);
                myIntent.putExtra("buying", currArray[position].buying);
                myIntent.putExtra("change_rate", currArray[position].change_rate);
                myIntent.putExtra("curr", currArray[position].curr);
                myIntent.putExtra("selling", currArray[position].selling);
                myIntent.putExtra("full_name", currArray[position].fullName);
                MainActivity.this.startActivity(myIntent);
            }
        });
    }

Yukarıda ki kod ilk çalışacak koddur. Tavsiyem burayı sadece

jsonParsing.execute()

kısmına kadar incelemenizdir. Buradan sonra aşağıdaki kod satırları çalışmaya başlayacak.

//androidde json ile veri çekebilmek için en iyi yöntem AsyncTask
    protected class JsonParsing extends AsyncTask{
        String result = "";
        @Override
        protected Void doInBackground(Void... voids) {
            try {
                //URL olarak api adresi verilir
                URL doviz_url = new URL("https://www.doviz.com/api/v1/currencies/all/latest");
                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(doviz_url.openStream()));
                String line = "";
                //her bir satır teker teker kaydedilir
                while((line=bufferedReader.readLine()) != null){
                    result += line;
                }
                bufferedReader.close();

                JSONArray jsonArray = new JSONArray(result);
                currList = new String[jsonArray.length()];
                //arrayde ki parametreler ayrıştırılır
                for (int i=0 ; i<jsonArray.length(); i++){
                    JSONObject jsonObject = jsonArray.getJSONObject(i);
                    DovizCom dovizCom = new DovizCom();
                    dovizCom.buying = jsonObject.getDouble("buying");
                    dovizCom.selling = jsonObject.getDouble("selling");
                    dovizCom.change_rate = jsonObject.getDouble("change_rate");
                    dovizCom.curr = jsonObject.getInt("currency");
                    dovizCom.name = jsonObject.getString("name");
                    dovizCom.fullName = jsonObject.getString("full_name");
                    dovizCom.code = jsonObject.getString("code");
                    currArray[i]=dovizCom;
                }
                //listviewda gösterilecek veriler ayarlanır
                for (int i=0; i<jsonArray.length(); i++){
                    JSONObject jsonObject = jsonArray.getJSONObject(i);
                    currList[i]=jsonObject.getString("full_name");
                }


            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (JSONException e) {
                e.printStackTrace();
            }
            return null;
        }
        //bütün işlemler bittikten sonra listview'a aktarılır
        @Override
        protected void onPostExecute(Void aVoid) {
            ArrayAdapter adapter = new ArrayAdapter(getBaseContext(), simple_list_item_1, currList);
            listCurrency.setAdapter(adapter);
        }
    }

Buraya kadar sorunsuz gidebilmişsek eğer uygulamayı çalıştırdığımızda ListView’da veri olduğunu görebileceğizdir. Bu arada yukarıdaki ArrayAdapter’a gönderdiğimiz “simple_list_item_1” Android Studio’nun bize sunduğu basit bir liste itemi, eğer listview’da sadece text olacaksa bunu kullanabilirsiniz. Daha sonra kendi özelleştireceğimiz ListView adapterlerini de göstereceğim inşallah.

Şimdi listView’da her hangi bir tıklamadan sonra nasıl çalıştıracağımıza bakalım. Bunun için yukarıda yazdığımız koddaki kesite bakmamız gerekli.

listCurrency.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView adapterView, View view, int position, long id) {
                Intent myIntent = new Intent(MainActivity.this, CurrencyInfo.class);
                myIntent.putExtra("code", currArray[position].code);
                myIntent.putExtra("buying", currArray[position].buying);
                myIntent.putExtra("change_rate", currArray[position].change_rate);
                myIntent.putExtra("curr", currArray[position].curr);
                myIntent.putExtra("selling", currArray[position].selling);
                myIntent.putExtra("full_name", currArray[position].fullName);
                MainActivity.this.startActivity(myIntent);
            }
        });

Burada yaptığımız yeni bir intent oluşturuyoruz. Bu bize yeni activity çalıştırmamıza olanak sağlıyor. putExtra methodu ile sonraki activity’de işimize yarayacak verileri gönderiyoruz.

Şimdi ikinci activity’e geçiyoruz.

Buranın tasarımı yukarıdaki ekran görüntülerinde görünüyor zaten.

public class CurrencyInfo extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_currency_info);
        //ekranda ki textViewları tanımladık
        TextView txt_currency_name = (TextView) findViewById(R.id.txtCurrencyName);
        TextView txt_buying = (TextView) findViewById(R.id.txtBuying);
        TextView txt_curr_code = (TextView) findViewById(R.id.txtCurrCode);
        TextView txt_curr_rate = (TextView) findViewById(R.id.txtCurrRate);
        TextView txt_selling = (TextView) findViewById(R.id.txtSelling);

        //yaşayan intentler çekiliyor.
        Intent intent = getIntent();
        txt_currency_name.setText(intent.getStringExtra("full_name"));
        /**burada sonda yazdığımız değer, eğer herhangi bir veri gelmezse default olarak
         * ne çekeceğini gösteriyor.
         */
        txt_buying.setText(Double.toString(intent.getDoubleExtra("buying",0.00)));
        txt_selling.setText(Double.toString(intent.getDoubleExtra("selling",0.00)));
        if (intent.getDoubleExtra("change_rate",0.00)<0)
            txt_curr_rate.setTextColor(getResources().getColor(R.color.colorRed));
        else
            txt_curr_rate.setTextColor(getResources().getColor(R.color.colorGreen));

        txt_curr_rate.setText(Double.toString(intent.getDoubleExtra("change_rate",0.00)));
        txt_curr_code.setText(intent.getStringExtra("code"));
    }
}

Gerekli açıklamaları kod içinde yaptığımı düşünüyorum. Ama yinede sormak istediğniz bir şey olursa yorum bırakabilirsiniz. En kısa zamanda dönmeye çalışırım.

Uygulamayı buradan indirebilirsiniz.

Java-Web Crawler

Merhabalar arkadaşlar bugun ki yazımızda basit fakat çok işinize yarayabilecek bir konu olan ‘web crawler’ denemesi yapacağız.

Öncelikle Jsoup kütüphanesini indirmemiz gerekiyor.Aşağıdaki link’ten indirebilirsiniz;
https://jsoup.org/download (jsoup-1.9.2.jar)  dosyasını indirip açtığınız projedeki library kısmına Add JAR derseniz işleminiz hallolacaktır.

Şimdi parse edeceğimiz site ekşisözlük.com 🙂 Bu sitede arama yaptırıp daha sonra çıkan entryleri console üzerinde yazdıracağız.Çok basit bir işlem hemen koda geçelim.

asd
Şekilden bakarsak bizim ilk entrymiz class=”content” div lerinin altında bizde bunu kullanarak çekeceğiz gerekli bilgileri.

public static void main(String[] args) {
        /*
        Consoldan aramamızı alıyoruz.
        */
        Scanner reader = new Scanner(System.in);
        System.out.println("Aramak istediğiniz entry nedir ?");
        String input = reader.nextLine();
        /*
        Parse edeceğimiz bölüm
        */
        String url = "https://eksisozluk.com/?q="+input;
        try {
            Document doc = Jsoup.connect(url).get();//urldeki tüm bilgileri çekiyoruz
            Elements links = doc.getElementsByClass("content");//content classlarını eledik
            for(int i=0 ; i<links.size(); i++){
                System.out.println(links.get(i).text()+"\n");//yazdırdık
            }
        } catch (IOException ex) {
            Logger.getLogger(EntrySearch.class.getName()).log(Level.SEVERE, null, ex);
        }
        
    }

Yazdığımız program bu kadar kolay kütüphane bizim için her şeyi yapıyor zaten 🙂
Eğer texti ben kendim almak istiyorum derseniz regex’lere göz atın derim güzel bir deneme oluyor 🙂

 

Android – Recorder

Merhaba arkadaşlar Android kategorisinde ilk yazım ses kayıtçısı (recorder) yapımı ile ilgili olacak. Arayüz’den başlayalım önce;

1.png

Arayüzümüz bu şekilde olacak kullandığım logoları Google’dan aratarak kendinize göre sizde düzenleyebilirsiniz. Öncelikle manifest dosyasına bir kaç izin eklememiz gerekiyor.

<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

Bunların ilki telefonda ki mikrofonu kullanarak kayıt etmemize yarayacak.İkincisi ise harici hafızaya kayıt edebilmemizi sağlayacak. Tasarım için xml kodları aşağıdadır ;

<?xml version="1.0" encoding="utf-8"?>
<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="com.example.arslan.recorder.MainActivity">

    <Button
        android:layout_width="250dp"
        android:layout_height="250dp"
        android:id="@+id/kayit"
        android:icon="@drawable/stop"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:background="@drawable/play"
        android:onClick="record"
        android:text="@string/record"
        android:textColor="#0" />

    <Button
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:onClick="dinle"
        android:id="@+id/listen"
        android:background="@drawable/listen"
        android:layout_below="@+id/kayit"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="40dp" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="Dinle"
        android:id="@+id/textView"
        android:layout_below="@+id/listen"
        android:layout_centerHorizontal="true" />
</RelativeLayout>

Asıl main activity kodlarına gelmeden önce son bir şey daha yapmamız gerekiyor.Butonun ne zaman kayıt ne zaman durdurma işlemine geçtiğini anlayabilmek için bir tane xml dosyası açacağız.Bunu mainActivity dosyasının olduğu dizine açabilrsiniz “New-XML-Layout XML File”

<?xml version="1.0" encoding="utf-8"?> 
<resources>     
<string name="app_name">AudioRecord</string>     
<string name="action_settings">Settings</string>     
<string name="record">Kayıt</string>     
<string name="stop">Durdur</string> 
</resources>

Şimdi kodlara gelirsek; İlk önce en baştaki tanımlamalarımızı yapıyoruz.

private Button btn_kayit;
    private MediaRecorder recorder;
    private MediaPlayer mediaPlayer;
    private final String filePath = Environment.getExternalStorageDirectory().getPath() + "/kayit.3gp";

Daha sonra;

        public void record(View view){
        String kayitString = getResources().getString(R.string.record);//oluşturduğumuz string.xml dosyasından kayit için gerekli stringi çektik
        String stopString = getResources().getString(R.string.stop);//aynı şekilde durdurmak için olanı çektik
        if (kayitString.equals(btn_kayit.getText().toString())){//eğer butona basıldığında text'i kayit ise kayit edecek
            startRecording();
            btn_kayit.setText(stopString);
            btn_kayit.setBackgroundResource(R.drawable.stop);//butonun iconu durdur iconu olacak
        }
        else{//değilse durduracak
            stopRecording();
            btn_kayit.setText(kayitString);
            btn_kayit.setBackgroundResource(R.drawable.play);//butonun iconu kaydet ikonu olacak
        }
    }

Aşağıdaki diğer kulaklık şeklinde icona sahip olan butonumuz ise aşağıdaki kodlara sahip olacak.

public void dinle(View view){
        mediaPlayer = new MediaPlayer();//media playeri aldık
        mediaPlayer.setVolume(1.0f, 1.0f);
        try {
            mediaPlayer.setDataSource(filePath);//dosya yolunu belirtmiştik yukarda
            mediaPlayer.prepare();//hazırlıyoruz
            mediaPlayer.start();//başlatıyoruz
            mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {

                @Override
                public void onCompletion(MediaPlayer arg0) {
                    mediaPlayer.stop();
                    mediaPlayer.release();
                    mediaPlayer = null;
                }
            });
        }
        catch (Exception e) {
        }
    }

Şimdi arada geçen metodları yazalım;

private void startRecording(){
        recorder = new MediaRecorder();
        recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
        recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
        recorder.setOutputFile(filePath);
        try{
            recorder.prepare();
            recorder.start();

        } catch (IOException e) {
            e.printStackTrace();
        }

    }

Durdurmak için olanıda yazalım;

private void stopRecording(){
        if (recorder != null) {
            recorder.stop();
            recorder.reset();
            recorder.release();//recorder'i serbest bırakıyoruz
            recorder = null;
        }
    }

Bu yazımda gelecegiyazanlar.turkcell.com.tr’den yararlandım umarım bir yararı olmuştur. Kodları buradan indirebilirsiniz.
Hepinize başarılar.