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