TikTok Jeton Hilesi 2021 – Cevrik

TikTok, gençler arasında oldukça fazla kullanılan en popüler uygulamalar arasında kendini göstermeye devam ediyor. Bu sosyal medya uygulaması içerisinde Jetonlar mevcut ve bazı kullanıcılar TikTok jeton hilesi aramakta. Sizlerde sınırsız jeton sahibi olmak ve TikTok hilesinden yararlanmak isteyenlerdenseniz doğru yerdesiniz. Burada sizlerde TikTok jeton hilesi nasıl yapılır detaylı olarak kılavuz halinde ilerleyeceğiz.

TikTok bedava jeton ile birlikte sizlerde TikTok uygulamasında bir adım öne geçmek istemez misiniz? Bu hile ile birlikte 2021 yılına ait jeton kazanabileceğiniz sistem ile birlikteyiz. Bu sistemi sizlerde kullanarak ücretsiz filtreleri kullanabilir veya yeni çıkartmaları tamamen bedava deneyebilirsiniz.

TikTok jeton hilesi 2021 yılına ait güncellenmiş versiyonu ile birlikte sizlerin karşısına çıkıyor, piyasada benzeri bulunmayan jeton hilesini sizlerde hemen deneyerek özellikleri açabilirsiniz.

TikTok Jeton Nedir – Nasıl Kazanılır?

TikTok jetonları aslında izleyici ve yayıncılar arasında para transferi yapılabilecek bir işlem olarak biliniyor. Sizlerde alacağınız çıkartmaları herhangi bir yayıncıya göndermeniz durumunda buradan yayıncı gelir elde etmektedir. Eğer yayıncı siz iseniz farklı izleyiciler sizlere gönderdikleri çıkartmalardan belli bir kesinti sonrasında para kazanırsınız.

tiktok jetonları

Yukarıdaki gibi hediyeler ile TikTok jeton hilesi sahibi olursanız sizlerde sevdiğiniz yayıncılara hediyeler gönderebilirsiniz.

Bu Yazı İlginizi Çekebilir! YouTube Canlı Abone Sayısını Görme

TikTok Jeton Fiyatları Ne Kadar?

TikTok jeton fiyatları sürekli olarak kura bağlı olarak değişiklik gösterebilmektedir. Güncel 2021 TikTok jeton fiyatları ise şu şekildedir;

  • TikTok 100 Jeton Fiyatı: 7 TL
  • TikTok 500 Jeton Fiyatı: 35 TL
  • TikTok 2000 Jeton Fiyatı: 135 TL
  • TikTok 5000 Jeton Fiyatı: 350 TL
  • TikTok 7000 Jeton Fiyatı: 700 TL

TikTok Jeton Hilesi Nasıl Yapılır?

tiktok hileleri

Jeton hilesi yapmayı bilmeyen kullanıcılar için adım adım aşamaları inceleyerek çözümlüyoruz. İlk olarak TikTok hesabımızı aktif olarak kullanarak en az 30 gün öncesinde hesabımızı açmış olmamız gerekiyor. Eğer yeni bir hesap ile bu hileyi denerseniz maalesef aktif olarak çalışmayacaktır.

  • Hesabımızı aktif olarak kullanılan bir hesap seçtikten sonra ilk olarak hesabımız kilitli ise herkese açık şekilde ayarlamamız gerekiyor. Bunun için profilimize girerek ayarlar kısmından herkese açık hale getiriyoruz.
  • Herkese açık olan profilimize, doğruluk tespiti için isim / soy isim ve hakkında kısmına birkaç bilgi ekliyoruz.
  • Ayrıca eğer hiçbir içerik paylaşılmamış ise en az bir içerik profilimize ekliyoruz.

Tüm yukarıda belirtilen işlemleri gerçekleştiren kullanıcılar ise aşağıda bulunan link üzerinden güncel TikTok jeton hilesi 2021 linkine tıklamaları ve çıkan pencere üzerinden kullanıcı adlarını girmeleri yeterli olacaktır.

TikTok Jeton Hilesi 2021 Güncel Link

Bu işlem ile birlikte kullanıcılara 100 jeton ile 500 jeton arasında otomatik olarak aktarım sağlanmaktadır. Ayrıca işlem haftada sadece bir kez çalışmaktadır. Aynı kullanıcı adına her hafta tekrardan deneme yapabilirsiniz.

TikTok Bedava Jeton Hileleri

TikTok bedava jeton hileleri farklı siteler aracılığıyla karşımıza çıkmakta. Ancak bu sitelerde maalesef ki aktif olarak çalışan bir TikTok jeton hilesini görememekteyiz. Bu yüzden şuanda sadece aktif olarak çalışacak ve güvenilir sistemlere dikkat etmeniz sizin için daha iyi olacaktır.

Sürpriz Bedava Jeton Bakiyesi

Sitemize özel hediye olarak TikTok jetonu kazananlar arasında olmak isterseniz aşağıdaki yorum kısmına yaratıcı yorumunuzu yazabilirsiniz. Bu yorumlar arasında seçecek olduğumuz her hafta 3 kişiye jeton hediye edilecektir.

Hediyeler mail üzerinden iletişime geçilerek kullanıcı adı öğrenmemiz durumunda gönderim sağlanmaktadır. Mail adresinizi doğru girmeyi unutmayın.

TikTok Jeton Hilesi Güncel

TikTok güncel jeton hilesi 2021 yılına özel olarak güncellenmektedir. Sizlerde jeton hilesi yapmak istiyorsanız yukarıda yer alan güncel link ile bedava jeton kazanabilirsiniz.

Telegram Gruba Katılma Nasıl Yapılır?

Telegram, mesajlaşma adımında yenilikleri ile adım adım rakiplerinden daha çok büyümeye devam ediyor. Telegram özelliklerinden bir tanesi olan gruplar sayesinde kullanıcılar telefon numaralarını vermeden de farklı gruplara ulaşabiliyorlar. Peki Telegram gruba katılma işlemi nasıl yapılır, Telegram grupları nasıl bulunur öğrenmek isteyenlere adım adım bu konuda rehber kılavuzu aşağıda bulabilirsiniz.

Telegram Grupları Nasıl Bulunur?

Telegram grup bulma işlemi aslında oldukça basittir. Telegram grupları genelde kategorilerine göre isimlendirilmektedir. Örneğin Haber kategorisinde bir grup arıyorsanız bunun için arama kısmına anahtar kelime olarak haber yazarak çıkan kanalları görebilirisiniz.

telegram grup bulma

Telegram grupları bulma işlemi için diğer bir yöntem ise internet siteleri olmakta. İnternette gruplara özel olarak siteler yer almakta. Sizlerde Google yardımıyla kolaylıkla güncel gruplara ulaşabilirsiniz. Benze grup başlıkları şu şekildedir;

  • Telegram Haber Grupları
  • Telegram Dizi Grupları
  • Telegram Spor Grupları
  • Telegram +18 Grupları
  • Telegram Oyun Grupları
  • Telegram Müzik Grupları
  • Telegram Ders Grupları

Telegram Gruba Katılma Yöntemleri

Telegram gruplarına giriş yapmak isteyen kullanıcılar için birden fazla yöntem bulunmaktadır.

Telegram Arama ile Gruba Katılma

Telegram gruplara katılma işlemi olarak uygulama içerisinde yer alan Arama kısmı diyebiliriz. Buradan bulduğunuz Telegram grubunun adını yazarak ilgili gruba gidin. Daha sonra çıkan mesaj alanının en altında yer alan Katıl seçeneğine tıklayarak gruba giriş yapabilirsiniz.

Telegram Grup Davet Linki ile Gruba Katılma

telegram grup linki

Telegram gruba katılma yöntemi olarak ikinci bir seçenek ise Telegram grup davet linki oluyor. Eğer herhangi bir internet ortamından ya da bir arkadaşınızdan Telegram grup linki almış iseniz linke tıkladıktan sonra sizi o grubun mesaj sayfasına yönlendirecektir. Yönlendirme sonrasında ise yine aynı şekilde Katıl butonuna tıklayarak görüşmeye başlayabilirsiniz.

Popüler Telegram Grupları

Telegram’ın popüler grupları arasında yer alan bazı kanalları sizler için aşağıda listeledik. Buradan tıklama işlemi sayesinde Telegram uygulamasına yönlenerek grup katılma işlemini gerçekleştirebilirsiniz.

Yukarıdaki kanallar ile alakalı hiçbir bağımız bulunmamaktadır. Sadece örnek amaçlı sunulmuştur. Eğer sizlerin de yararlı olabileceğini düşündüğünüz Telegram grupları varsa bizlere aşağıda bulunan yorum kısmından iletebilirsiniz.

Bu Yazı İlginizi Çekebilir! Telegram Hesap Silme Nasıl Yapılır?

Telegram Hesap Silme Nasıl Yapılır?

Telegram, sohbetleri şifreleyerek ve özellik bakımından diğer sohbet uygulamalarına göre daha sağlam bir mesajlaşma uygulaması olarak görünmektedir. Ancak yeni bir mesajlaşma uygulamasına geçmek isteyen kullanıcılar var ise bu ilerlemede Telegram hesap silme en iyi durum olacaktır.

Maalesef ki Telegram hesabı silme mobil uygulama ayarlar üzerinden direk olarak bizlere sunulmuyor. Bunun için 2 seçenek ortaya çıkartan uygulamada isterseniz hesabınızı belirli bir süre devre dışı bırakabilir veya Telegram hesabınızı tamamen silebilirsiniz. Eğer hesabınızı tamamen silmek istiyorsanız adım adım kılavuzu takip etmeye başlayın.

Kullanıcılar Telegram Hesabını Neden Silmek İstiyorlar?

Telegram birden fazla özelliğe sahip olsa da, bazı kullanıcılar Telegram hesap silme işlemini uygulamak isteyebilirler, bunun birden fazla nedeni olabilir. İşte o nedenlerden bazıları şunlar;

1- Telegram Yerine Farklı Bir Uygulama Tercih Etmek

Telegram uygulaması kullanıcılar için en iyi mesajlaşma aracı olmaktan çıkmış olabilir. Yaşadığı yere göre farklı bir mesajlaşma uygulamasına geçmek isteyen kullanıcılar olabilmekte.

2- Arkadaşlarınız Telegram’dan Ayrılıyorsa

Eğer kullanıcının arkadaşları Telegram uygulamasından vazgeçerek farklı bir uygulamaya geçiş yapıyorsa bu durumda o kullanıcıda hesabını kapatmak isteyebilmektedir.

3- Telegram Politikalarının Endişe Vericiliği

Kullanıcı Telegram politikalarından endişe ediyor ise uygulamadan tamamen vazgeçebilir. Çünkü uygulama içerisinde mesajlarının güvenliğinden emin olmak isteyen kullanıcı politikaları incelediğinde şüphe duyuyor mu detaylı olarak bilmek ister.

Telegram Hesabı Nasıl Devre Dışı Bırakılır?

Telegram varsayılan olarak altı ay botunca etkin olmadığı durumda hesabınızı silmektedir. Bunun yanında sizlerde bu ayarı değiştirerek sürenin kısalığını veya uzunluğunu ayarlayabilmektesiniz. İsterseniz altı ay sonrasında isterseniz üç ay veya bir yıl olarak ayarlama sağlayabilirsiniz.

telegram hesabı devre dışı bırakmatelegram hesabı devre dışı bırakma

Bu ayarı değiştirmek isteyen kullanıcılar için kendi kendine imha etme seçeneği ile birlikte değişiklik sağlanmakta. Bunun için uygulamaysa giriş yaparak ayarlar kısmından Gizlilik ve Güvenlik bölümünü seçin. Çıkan sayfadan ise “Gelişmiş” bölümüne tıklayın.

Bu alanda Hesabımı Sil butonuna tıklayın ve imha etme özelliğinin süresini buradan kendi isteğinize göre ayarlayabilirsiniz. Eğer hesabınızı aynı gün devre dışı bırakmak istiyorsanız bunun için bir seçenek bulunmamakta. Belirtilen süreler içerisinde uygulamayı hiç kullanmamız durumunda hesabınız devre dışı bırakılmaktadır.

Telegram Hesap Nasıl Silinir?

Telegram hesabınızı silmek mi istiyorsunuz? Silme işlemi için aşağıdaki yöntemi kullanmanız gerekmektedir. Bu yöntem ile birlikte sizlerde aynı gün içerisinde tamamen uygulama verileriyle birlikte Telegram hesap silme işlemini gerçekleştirebilirsiniz.

telegram hesap kapatma

Telegram hesabını silmek isteyen kullanıcılar My Telegram Web Portal bölümüne giriş yaparak oturum açmaları gerekmektedir. Çıkan ekranda Hesabı Sil bağlantısına tıklayın ve çıkan metin kutusunda ayrılma nedenini yazarak Hesabımı Sil butonuna tıklayın. Evet seçeneğini seçerek hesap silme işlemini kalıcı olarak gerçekleştirebilirsiniz.

Telegram Hesap Sildikten Sonra Ne Olur?

Telegram hesap silme işleminden önce bilmeniz gereken bilgiler şu şekildedir.

  • Hesabını silen kullanıcının mesajları ve verilerinin tamamen silindiğini ve yeniden alınamayacağı belirtilmekte.
  • Eğer oluşturduğunuz kanal veya bir grup var ise çalışmaya devam eder. Ancak tek yönetici siz iseniz Telegram rastgele farklı bir kullanıcıyı yönetici yapmaktadır.
  • Hesabını silen kullanıcı birkaç gün boyunca tekrardan hesap açmaya çalışırsa Telegram buna izin vermemektedir.

Telegram Hesabını Silmeden Önce Verileri Nasıl Dışa Aktarabilirim?

Telegram hesap silmeden önce içerisindeki mesajları, grupları veya diğer verilerinizi aktarmak için aşağıdaki adımları takip edin.

Telegram bilgisayar uygulamasını yükleyerek hesabınızı açın. Uygulama içerisinde bulunan sağ üst köşedeki üç çizgi çubuğunu kullanarak Ayarlar bölümüne giriş yapın. Ayarlar içerisinden Telegram Verilerini Dışa Aktar seçeneğine tıklayın.

telegram verileri dışa aktarma

Dışa aktarma seçenekleri arasından istediğiniz sadece sohbetler mi yoksa diğer kanallar ve fotoğraflar ile videolar dahil olacak mı detaylı olarak seçim yapabilirisiniz. Hatta gönderdiğiniz çıkartmaları bile bilgisayarınıza yedek alabilirsiniz.

Dışa aktar butonuna tıkladıktan sonra Telegram birkaç dakika sonra işlemi tamamlayarak sonuçlandıracaktır. Sizlerde verilerinizi görmek için Verilerimi Göster seçeneğine tıklayarak inceleyin veya bilgisayarınıza indirin.

Telegram Benzeri Uygulamalar Nedir?

Telegram, birçok alanda kullanılan bir mesajlaşma platformudur. Sizde Telegram uygulamasından çıkmaya karar verdiyseniz bunun için aşağıda bulunan benzer uygulamalara da göz atabilirsiniz.

  • WhatsApp
  • Signal
  • Facebook Messenger
  • Line
  • WeChat
  • Skype
  • Viber

Bu yazı ilginizi çekebilir! Whatsapp Web Hesabını Nereden Kapatabilirim?

Laravel Dersleri – Laravel Uygulama Yapısı

Merhaba arkadaşlar,
Mobilhanem.com için hazırladığımız “Laravel Eğitimleri”nin üçüncü dersi ile devam ediyoruz. Bu dersimizde, “ Laravel Uygulama Yapısı ” konusunu anlatacağız.

Kurmuş olduğumuz sistemde geliştirme yapabilmemiz için bir IDE (Integrated development environment)’ye ihtiyacımız bulunmaktadır.

IDE olarak:

  • PhpStorm ( Önerilir )
  • Eclipse
  • Netbeans

yada istediğiniz bir IDE kullanabilirsiniz.

 

Laravel Anadizin Yapısı

app: Bu klasör içerisinde uygulamanın asıl kodları bulunacaktır.

bootstrap: Uygulamanın autoload ve cache (önbellek) kısımlarını barındırmaktadır.

config: Uygulamanın ayar dosyaları bu klasörde bulunmaktadır.

database: Veritabanı operasyonları için kullanılan “Seeds” ve “Migrations” bu klasörde bulunmaktadır.

public: Bu klasör uygulamanın “document root” kısmıdır. Laravel’in çalışmasını başlatır ayrıca “Assets” (Javascrip, CSS, Resimler vb.) kısmını barındırır.

resources: Bu klasörde herhangi bir işlem yapılmamış (Sıkıştırma, Birleştirme, Gizleme vs) dosyalar, view (görünüm) dosyaları ve dil dosyaları bulunmaktadır.

storage: Bu klasör uygulamanın depolama alanıdır. İçerisinde, dosya yüklemelerini, önbellekleme (cache) dosyalarını ve uygulamanın log dosyalarını barındırır.

tests: Bu klasör test dosyalarını barındırır.

vendor: Bu klasörde uygulamanın “Composer Dependencies” (paket bağımlılıkları) bulunmaktadır.

 

Laravel App Klasörü Yapısı

Uygulamamızın ana klasörü burasıdır diyebiliriz. Ayrıca içerisinde birçok ek klasör bulunmaktadır.

Console: Tüm “artisan” komutları bu klasörde bulunmaktadır.

Http: “Controllers”, “Middleware”, “Request” bu klasörde bulunmaktadır.

Exceptions: Özel “Exception Handlers” bu klasörde bulunmaktadır.

Providers:  “Providers” (Servis Sağlayıcılar) bu klasörde bulunmaktadır.

 

Bu dersimizde “Laravel Uygulama Yapısına” genel hatlarıyla göz attık. İlerleyen derslerde burada bahsettiğimiz konuları daha ayrıntılı inceleyeceğiz.  Konu hakkındaki sorularınızı konu altından veya Sorucevap.mobilhanem.com üzerinden sorabilirsiniz.

21

 Udemy İndirimli Ders | Udemy İndirimi |Mobilhanem

Merhaba Arkadaşlar,
Yılın en büyük kampanyası boyunca tüm Udemy kurslarına yılın en düşük fiyatıyla kayıt olun! Biz mobilhanem yazarları olarak en çok yararlandığımız kaynak şüphesiz Udemy kursları. Öğrenmek istediğimiz ve ya öğrenmemiz gereken bir teknolojiyi öncelikle Udemy kursu satın alarak giriş yapıyor ve ilerletiyoruz. Birçok ücretli ve ücretsiz kurs bulunan platformda neredeyse yazılımın her alanında ders bulunmaktadır.

Bir  defa aldığımız kurs ömür boyu bizim olduğu için istediğimiz zaman derslere devam ediyor ve kendimizi geliştirebiliyoruz. Udemy’de ki kampanyaları takip ederekte kursları daha uygun fiyatlara almaya çalışıyoruz.100’lerce lira olan kurslar 25 tl gibi çok makul fiyatlara satışa çıkıyor.

Sizlerde kısa süren kampanyadan yararlanarak kendinizi geliştirmek istediğiniz alanda kurs satın alabilir , kursları izleyerek kendinizi geliştirebilir , anlamadığınız noktalarda kurs hocasına soru sorabilir ve memnun kalmadığınız takdirde 30 gün içinde iade edebilirsiniz.

Bizler sizler için popüler ve alanındaki en iyi dersleri seçmeye çalıştık.

Sizlerde yukarıdaki dersleri 25 tl’den satın alarak kişisel gelişiminize katkı sağlayabilirsiniz.

Hepinize iyi kodlamalar!!!

 

 

0

Php OOP Dersleri – Overriding ve Overloading

Merhaba arkadaşlar mobilhanem.com için hazırladığımız php derslerimizde bu ders Overriding ve Overloading  işlemlerine bakacağız. Nesne yönelimli kodlama yaparken bu iki işlem işimizi kolaylaştırmaktadır. Türkçe anlamı ile ezmek ve aşırı yüklemek anlamlarına gelen bu iki yöntemi inceleyelim.

Override İşlemi

Override yani ezme işlemi genellikle base classta var olan bir methodun türetilen methodda tekrardan oluşturulmasıdır. Yani örnek verecek olursak:

width = $w;

public function getWidth()
return $this->width;

public function setWidth($w)
$this->width = $w;

public function alanHesapla()
return pow($this->width,2);

class kup extends kare

public function __construct($w)
parent::__construct($w);

// override Methodumuz
public function alanHesapla()
return parent::alanHesapla()*6;

// normal sınıfımızdan nesnemizi çağırdık.
$kare = new kare(5);
echo “Oluşturulan karenin Alanı: “.$kare->alanHesapla().”br 2dir.
“;

$kup = new kup(5);
echo ” Oluşturulan Küpün Alanı: “.$kup->alanHesapla().”br 2dir.
“;

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

<?php

 

class kare

protected $width;

public function __construct($w)

$this->width = $w;

public function getWidth()

return $this->width;

public function setWidth($w)

$this->width = $w;

public function alanHesapla()

return pow($this->width,2);

 

class kup extends kare

public function __construct($w)

parent::__construct($w);

// override Methodumuz

public function alanHesapla()

return parent::alanHesapla()*6;

 

 

// normal sınıfımızdan nesnemizi çağırdık.

$kare = new kare(5);

echo “Oluşturulan karenin Alanı: “.$kare->alanHesapla().“br 2dir.
;

 

 

$kup = new kup(5);

echo ” Oluşturulan Küpün Alanı: “.$kup->alanHesapla().“br 2dir.
;

Yukarıdaki kodda işaretli satırlara bakarsak alanHesapla() methodu baseClass ta olmasına rağmen kalıttığımız sınıfta da aynı isimde method oluşturup küpün alanını bulduk. Buradaki asıl mantık baseClasstaki alanHesapla() methodu işimizi görmediği için küpün alanını hesaplamak için yeni bir alanHesapla methodu oluşturarak üst sınıftaki methodu ezmektir.

Peki neden farklı bir isimde method oluşturmayıp üst sınıfın methodunu ezdik?

Şuan sadece iki class olduğu için methodları aklımızda tutabiliriz. Kare, küp, dikdörtgen gibi birsürü geometrik şekilleri bir baseClassta toplayıp hepsini ayrı ayrı kareAlani(), kupAlani()…. gibi farklı methodlar oluşturmamız bizim kafamızı bir hayli karıştırırdı. Bu yüzden override işlemi yaparak tek methodda istediğimiz geometrik şeklin çevresini hesapladık.

 

Overload İşlemi

Overload (Aşırı yükleme) işlemi ise bir methodun farklı parametreler ile birden fazla tanımlanmasıdır. Çağırırken ise kaç parametre ile çağırırsak çağırılan parametreye uygun methodumuz çağırılır.

Bir methodun aşırı yüklenebilmesi için dönüş tipinin aynı olması gerekmektedir.

Php de overloadin işlemi yapılması direk olarak mümkün değil ama overloading işlemini yapmamızı sağlayan iki adet fonksiyonumuz mevcut. Bu fonksiyonlar:

 

func_num_args(); // fonksiyon çağırılırken parametre sayısını geri döndürür.

Örneğin: myFunc(1,2,3,4); // 4 değerini döndürür

func_get_arg($i);  //  indisine göre parametreleri almamızı sağlar.

Bu iki fonksiyon ile overloading işlemi yapalım.

function yazdir()

for($i=0;$i<func_num_args();$i++)
echo func_get_arg($i)." ";

echo "


“;

yazdir(“Vehbi”);
yazdir(“Vehbi”, “Akdoğan”);
yazdir(“Vehbi”, “Akdoğan”,”Erzurum”);

function yazdir()

for($i=0;$i<func_num_args();$i++)

echo func_get_arg($i).” “;

echo


;

 

yazdir(“Vehbi”);

yazdir(“Vehbi”, “Akdoğan”);

yazdir(“Vehbi”, “Akdoğan”,“Erzurum”);

 

şeklinde çıktı alabiliriz.

Bu işlemi fonksiyon kullanmadan parametreleri dizi olarak göndererekte yapabiliriz ama parametre sabit 1 tane olduğu içintam anlamıyla  overloading işlemi olarak tanımlayamayız. Örneğin:

 

function yazdir($param)

foreach($param as $val)
echo “$val “;

echo “


“;

yazdir([“Vehbi”]);
yazdir([“Vehbi”, “Akdoğan”]);
yazdir([“Vehbi”, “Akdoğan”,”Erzurum”]);

function yazdir($param)

foreach($param as $val)

echo “$val “;

echo


;

 

yazdir([“Vehbi”]);

yazdir([“Vehbi”, “Akdoğan”]);

yazdir([“Vehbi”, “Akdoğan”,“Erzurum”]);

 

Bir dersimizin daha sonuna geldik. Bir sonraki dersimizde görüşmek üzere 🙂

 

Konuyla ilgili yorumlarınızı konu altından yapabilirsiniz, ayrıca sorularınızı yine konu altından ve Mobilhanem Soru&Cevap bölümünden sorabilirsiniz.

Tüm php dersleri için tıklayınız..

 

 

 

0

Kotlin – Android’in Yeni Resmi Programlama Dili

Merhaba Arkadaşlar,
Google her yıl düzenlediği I/O etkinliğinde bu sene biz Android geliştiricilerine bir süpriz yaptı. 17-19 Mayıs tarihleri arasında düzenlenen I/O 2017 etkinliğinde Android için yeni bir programlama dilini tanıttı. Bu dil JetBrains firmasının geliştirmiş olduğu Kotlin Programlama dili.

Senelerdir Google ile Java dilinin sahibi Oracle firması arasında patent davaları devam ediyor. Bundan kaynaklı olarak Google’n başka bir yazılım dilini destekleyeceği zaten bekleniyordu. Bugüne kadar söylentiler hep Apple firmasının geliştirdiği ve yine açık kaynak kodlu olan Swift yazılım diliydi. Fakat Google en büyük rakiplerinden biri olan Apple firmasının yazılım dilini kullanmak yerine, Android Studio’nun altyapısını kullandığı Intellij Idea IDE’nin sahibi/geliştiricisi olan JetBrains firmasının geliştirdiği yazılım dilini (Kotlin) tercih etti.

Bu dil aynı java gibi JVM (Java Virtual Machine) üzerinde çalışabilen bir dildir. Yani bir defa yaz her platformda çalıştır mantığıyla çalışmaktadır. Java veya Kotlin dilinde yazılan bir program çalıştırıldığında öce byte kodlara dönüştürülmekte ve JVM’in okuyup / yorumlayabileceği bir hal almaktadır. JVM ve JVM’in çalışma mantığı ile ilgili yazımıza buradan ulaşabilirsiniz. Android’de kendi geliştirdiği JVM’ni (ART) kullanmaktadır. Yani bizim Java ile yazdığımız uygulamamız çalıştırma anında veya ilk kurulumunda byte koda dönüştürülmekte ve Art üzerinde çalışmaktadır. Kotlin’de aynı yapıda olacağı için Kotlin’le yazılan programımız byte kodlara dönüştürülecek ve ART üzerinde çalışabilecektir.

Syntax olarak java’ya benzemektedir ve OOP(Object Orianted Programing) bir dildir. Yani nesne tabanlı geliştirme yapılmaktadır. Java dili ile geliştirme yapmış olan arkadaşlarımız çok fazla zorlanmadan bu dil ile geliştirme yapabilecektir. Kotlin dilini geliştirmeye JetBrains ve Google beraber devam edecekler fakat dilin sahibi Google değil JetBrains firması olacaktır.

Java ile geliştirme yapmaya devam edebileceğiz. Fakat ilerleyen zamanlarda ne olur, java desteği kesilir mi bunu şuandan bilmemiz zor. Android Studio 3.0 ile birlikte Kotlin ile geliştirme yapmaya başlayabileceğiz. Android Studio 3.0 indirip denemek isterseniz tıklayınız.  Biz mobilhanem.com ekibi olarak gelişmeleri dikkatli bir şekilde takip etmeye devam edeceğiz. Eğer beklenen popülerliğe ulaşabilirse bizde Kotlin ile ilgili derslere başlayacağız.

Kotlin dersleri için tıklayınız.

 

5

Android LinearLayout Kullanımı | Android Dersleri

Merhaba Arkadaşlar,
Mobilhanem.com sitemiz üzerinden anlattığımız/yayınladığımız Android Eğitimleri yazı serimizde bu dersimizde Android LinearLayout Kullanımı ile devam ediyoruz. Nedir bu Layout kavramı ,ne işe yarar şimdi incelemeye başlayalım.

Arayüz tasarımı ve layout türleri ile ilgili ön bilgilendirmeyi bu dersimizde yapmıştım. Bu dersimizde de Linear Layout konusunda biraz daha ayrıntıya girmeye çalışacağız bildiğiniz üzere android dersleri kısmının dışında temel olarak yine anlattığımız bu dersimizide inceleyebilirsiniz. LinearLayout aslında iki koşulda kullanma ihtiyacı duyuyoruz birincisi  android bileşenlerini yatay konumlandırmak için ; ikincisi de  android bileşenlerini dikey konumlandırabilmek için. Bu özelliğide orientation ile sağlıyoruz. Aşağıdaki xml yapısında gördüğünüz gibi android:orientation = “horizontal” dediğimizde yatay olarak EditText ve Buttonu gösterdik. ( android:layout_weight=”1″ EditText ve Buttonda da var bu bileşenlerin eşit bir biçimde ekranda göstermesini sağlamaktadır. )

Android LinearLayout Kullanım Örnekleri

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

<?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”

    tools:context=“com.mobilhanem.linearlayoutexample.MainActivity”>

 

    <LinearLayout

        android:orientation=“horizontal”

        android:id=“@+id/linearLayout”

        android:layout_width=“match_parent”

        android:layout_height=“wrap_content”>

 

        <EditText

            android:layout_weight=“1”

            android:layout_width=“match_parent”

            android:layout_height=“wrap_content” />

 

        <Button

            android:text=“Buton”

            android:layout_weight=“1”

            android:layout_width=“match_parent”

            android:layout_height=“wrap_content” />

 

 

    </LinearLayout>

 

</RelativeLayout>

Erkan çıktımız:

Aşağıdaki xml yapısında gördüğünüz gibi android:orientation = “vertical” dediğimizde yatay olarak EditText ve Buttonu gösterdik.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

<?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”

    tools:context=“com.mobilhanem.linearlayoutexample.MainActivity”>

 

    <LinearLayout

        android:orientation=“vertical”

        android:id=“@+id/linearLayout”

        android:layout_width=“match_parent”

        android:layout_height=“wrap_content”>

 

        <EditText

            android:layout_weight=“1”

            android:layout_width=“match_parent”

            android:layout_height=“wrap_content” />

 

        <Button

            android:text=“Buton”

            android:layout_weight=“1”

            android:layout_width=“match_parent”

            android:layout_height=“wrap_content” />

 

 

    </LinearLayout>

 

</RelativeLayout>

Ekran çıktımız:

 

LinearLayout u android:layout_centerInParent = “true” ile cihaza göre tam ortaladık ve android:background ile de arka plana renk kodu verdik böylece LinearLayout un kapladığı kısım mavi oldu.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

<?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”

    tools:context=“com.mobilhanem.linearlayoutexample.MainActivity”>

 

    <LinearLayout

        android:background=“@color/colorPrimary”

        android:layout_centerInParent=“true”

        android:orientation=“vertical”

        android:id=“@+id/linearLayout”

        android:layout_width=“match_parent”

        android:layout_height=“wrap_content”>

 

        <EditText

            android:layout_weight=“1”

            android:layout_width=“match_parent”

            android:layout_height=“wrap_content” />

 

        <Button

            android:text=“Buton”

            android:layout_weight=“1”

            android:layout_width=“match_parent”

            android:layout_height=“wrap_content” />

 

 

    </LinearLayout>

 

</RelativeLayout>

Ekran çıktımız:

 

Aşağıdaki kod yapısına baktığımızda LinearLayout da android:weightSum kavramını kullandık ve  android:weightSum = “3” dedikten sonra kapladığı alanda yatay olarak 3 birim yer ayırmış oldu içerisinde yer alan butonların birine android:layout_weight=”1″ , diğerine ise  android:layout_weight=”2″ olarak konumlandırdık. Ekran görüntüsüne de bakacak olursak; 3 birimlik alanda 2 birim ve 1 birim alan butonların farklı boyutlarda konumlandığını göreceksiniz. weightSum değerine kaç veriyorsak o değere göre bileşenleri sabitlemek önemli. Hem performans açısından hemde konumlandırmayı weight değerine göre düzgün bir şekilde yapabilmek için butonların width değerlerine 0 dp verdik.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

<?xml version=“1.0” encoding=“utf-8”?>

<LinearLayout xmlns:android=“http://schemas.android.com/apk/res/android”

    android:layout_width=“match_parent”

    android:layout_height=“match_parent”

    android:weightSum=“3”

    android:orientation=“horizontal”>

 

 

        <Button

            android:id=“@+id/btn_blue”

            android:layout_width=“0dp”

            android:layout_height=“wrap_content”

            android:layout_weight=“1”

            android:text=“First Button” />

 

        <Button

            android:id=“@+id/btn_green”

            android:layout_width=“0dp”

            android:layout_height=“wrap_content”

            android:layout_weight=“2”

            android:text=“Second Button” />

 

</LinearLayout>

Ekran çıktımız:

 

android:gravity=”center” kullanarak en dışta bulunan LinearLayout umuzu ekrana göre ortaladık, böylece içinde bulunan butonlarda ekranın tam ortasında konumlanmış oldu.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

<?xml version=“1.0” encoding=“utf-8”?>

<LinearLayout xmlns:android=“http://schemas.android.com/apk/res/android”

    android:layout_width=“match_parent”

    android:layout_height=“match_parent”

    android:gravity=“center”

    android:orientation=“horizontal”>

 

 

        <Button

            android:id=“@+id/btn_blue”

            android:layout_width=“0dp”

            android:layout_height=“wrap_content”

            android:layout_weight=“1”

            android:text=“First Button” />

 

        <Button

            android:id=“@+id/btn_green”

            android:layout_width=“0dp”

            android:layout_height=“wrap_content”

            android:layout_weight=“2”

            android:text=“Second Button” />

 

</LinearLayout>

Ekran çıktımız: 

Aşağıdaki xml yapısına baktığımızda ise LinearLayout ları yatay ve dikey olarak birlikte kullanabildiğimizi görüyoruz. En dıştaki LinearLayout dikey bir şekilde konumlandırdık. Alt kısmındaki iki buton un yatay olarak konumlandığı yerde ise diğer LinearLayoutu kullandık.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

<LinearLayout

    xmlns:android=“http://schemas.android.com/apk/res/android”

    android:layout_width=“match_parent” android:layout_height=“match_parent”

    android:orientation=“vertical”

    android:background=“#c56504”

    android:padding=“10dp” >

 

    <TextView

        android:id=“@+id/emailTextView”

        android:layout_width=“match_parent”

        android:layout_height=“wrap_content”

        android:padding=“5dp”

        android:text=“Email :”

        android:textColor=“#FFFFFF”

        android:textSize=“18sp” />

    <EditText

        android:id=“@+id/emailEditText”

        android:layout_width=“match_parent”

        android:layout_height=“wrap_content”

        android:hint=“Email adresinizi girin”

        android:inputType=“textEmailAddress”>

    </EditText>

    <EditText

        android:id=“@+id/passwordEditText”

        android:layout_width=“match_parent”

        android:layout_height=“wrap_content”

        android:hint=“Şifrenizi girin”

        android:inputType=“textVisiblePassword”>

    </EditText>

    <Button

        android:id=“@+id/saveButton”

        android:layout_width=“match_parent”

        android:layout_height=“wrap_content”

        android:text=“Giriş” />

    <LinearLayout

        android:weightSum=“2”

        android:layout_width=“match_parent”

        android:layout_height=“wrap_content”

        android:orientation=“horizontal” >

        <Button

            android:id=“@+id/createAccountButton”

            android:layout_width=“0dp”

            android:layout_height=“wrap_content”

            android:layout_weight=“1”

            android:text=“Yeni Hesap” />

        <Button

            android:id=“@+id/forgetPasswordButton”

            android:layout_width=“0dp”

            android:layout_height=“wrap_content”

            android:layout_weight=“1”

            android:text=“Şifremi unuttum” />

    </LinearLayout>

</LinearLayout>

Ekran çıktımız:

Aşağıdaki layout yapısına baktığımızda LinearLayout a android:layout_marginLeftandroid:layout_marginRightandroid:layout_marginTopandroid:layout_marginBottom değerlerine 20dp verdik yani 20dp olarak sağdan, soldan,aşağıdan ve yukarıdan boşluk bırakmış olduk. android:layout_margin = “20dp” yaparakda bu dediğimiz özelliği sağlayabilirdik diğer değerleri silip sadece margin değeri verip kendinizde görebilirsiniz.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

<RelativeLayout

    xmlns:android=“http://schemas.android.com/apk/res/android”

    android:layout_width=“match_parent”

    android:layout_height=“match_parent”>

 

    <LinearLayout

        android:orientation=“vertical”

        android:layout_marginLeft=“20dp”

        android:layout_marginTop=“20dp”

        android:layout_marginBottom=“20dp”

        android:layout_marginRight=“20dp”

        android:layout_width=“match_parent”

        android:layout_height=“wrap_content”>

 

        <EditText

            android:hint=“Kullanıcı Adı”

            android:layout_width=“match_parent”

            android:layout_height=“wrap_content” />

 

        <EditText

            android:hint=“Şifre”

            android:layout_width=“match_parent”

            android:layout_height=“wrap_content” />

 

        <Button

            android:text=“Giriş”

            android:layout_width=“match_parent”

            android:layout_height=“wrap_content” />

 

 

    </LinearLayout>

</RelativeLayout>

Ekran çıktımız:

 

Evet arkadaşlar LinearLayout Kullanımı‘nı sizlere detaylıca anlatmaya çalıştım. Bir sonraki dersimizde layout serisinden devam edeceğiz o zamana kadar layout lar ile ilgili konuları incelemeniz faydalı olacaktır.

Tüm Android Ders, Proje ve Kaynak Kodlar için tıklayınız.

Mobilhanem.com üzerinden anlattığımız android uygulama geliştirme derslerine devam edeceğiz. Konu hakkında sorunuzu yorum alanından sorabilirsiniz. Konu dışı sorularınızı ve tüm yazılımsal sorularınızı sorucevap.mobilhanem.com sitemizden de sorabilirsiniz.

Bir dahaki dersimizde görüşmek dileğiyle..

12

Laravel Model Yapısı ve Kullanımı | Laravel Dersleri

Merhaba Mobilhanem.com takipçileri,
Laravel ile eğitim serimizin yeni dersinde Laravel Model yapısını anlatmaya çalışacağım.

Laravel Model Nedir?

Laravel Model, MVC yapısında veritabanı işlemlerinin yapıldığı bölümdür. Daha önceki yazılarımdan birinde Controller yapısından bahsederken, backend işlemlerinin de Controller tarafından yapıldığından bahsetmiştim. Controller, Model aracılığı ile bu işlemleri yapmaktadır. Yani Model, veritabanı iletişiminden sorumlu kısımdır.

Artisan Kullanarak Model Oluşturma

Daha önceki yazılarımda bahsettiğim gibi Laravel Artisan CLI bizim işimizi kolaylaştırmaktadır. Bu komut satırını öğrenmenin hız kazanma adına yararı olduğunu düşünüyorum. Artisan kullanarak Laravel Model oluşturmak için öncelikle komut satırı kullanarak Laravel ana dizine erişiyoruz. Benim bilgisayarım için bu adres;

“C:xampphtdocsmobilhanem>”

Daha sonra aşağıda yer alan kod bloğunu yazıyoruz(ya da kopyala yapıştır yapıyoruz).

php artisan make:model Page

php artisan make:model Page

Yukarıda yer alan kod satırı sayesinde ‘Page’ Model dosyasını oluşturuyoruz. Model oluşturma başarı ile sonuçlandıysa app klasörünün altında Page isimli bir dosya olmuşması gereklidir.

laravel model oluşturmalaravel model oluşturma

Tabi burada unutmamamız gereken Model ile kullanılacak veritabanı tablosununda olması. Bu işlem için isterseniz manuel olarak bir tablo oluşturabilirsiniz ya da yine Artisan kullanarak Migration oluşturabilirsiniz.Henüz Migration yapısından bahsetmediğimiz için biz bu yazıda manuel olarak bir tablo oluşturalım. Veritabanı değişkenlerini .env dosyasından alacağız buradaki değişikliklerin yapılmış olmasına dikkat edelim. Eğer .env size yabancı geldi ise 4 – Laravel Dersleri – Laravel Konfigürasyonu yazıya bir göz atmanızı tavsiye ederim.

Yine kendi kurulumuma göre benim .env dosyamdaki veritabanı ile ilgili kısım şu şekildedir;

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=mobilhanem
DB_USERNAME=root
DB_PASSWORD=

tabi lokal bir kurulum olduğu için şifre kısmı boş bırakılmıştır. Gerçek sunucuda bu bölümün güçlü bir şifre ile dolu olması gereklidir.

Phpmyadmin yardımı ile mobilhanem adlı bir veritabanı oluşturup içerisine pages tablosunu ekledim. Tablo yapısı ise

id => int 11, primary key, autoincrement

baslik => varchar 100

icerik => text

aktif => int 1, default 0

Burada Laravel Model için önemli bir konuya dikkat etmeniz gerekmektedir. Oluşturduğunuz Model adı ile veritabanındaki tablo arasında bir ilişki vardır. Bu ilişki oluşturduğunuz tablonun, Model isminin küçük harf ile başlayan ve İngilizce olarak çoğul yapılmış hali olmasıdır.

Page (model) => pages (tablo)

City (model) => cities (tablo)

Peki bu şart mı? tabi ki hayır fakat proje takip edilebilirliği ve hız bakımından tavsiye edilen methoddur. Diyelim ki siz bunu yapmak istemiyor veya daha önceki projenizi Laravel yapısına taşımak istiyorsunuz. Tablo isminizi ‘sayfalar’ olarak kullanmak için Laravel Model içerisine  $table değişkeni belirtmeniz gerekli.

protected $table = ‘sayfalar’;

protected $table = ‘sayfalar’;

Yine aynı şekilde Primary Key olarak id kullanmayacaksanız eğer onu da,

protected $primaryKey = ‘sayfa_id’;

protected $primaryKey = ‘sayfa_id’;

olarak belirtmeniz gerekli.

Yukarıda bahsettiğim gibi bu yazıda Migration yapısını anlatmayacağım fakat Migration kullanarak oluşturulan tablolarda timestamps değişkeni vardır. Bu değişken tablonuza ‘created_at’ ve ‘updated_at’ kolonları ekler. Biz manuel oluşturduğumuz tablomuza bunları eklemediğimiz için Model yapımıza bunları tabloda aramaması gerektiğini söylememiz gerek. Yoksa Model hata oluşturacaktır. Bunun için,

public $timestamps = false;

public $timestamps = false;

satırı Model içerisine eklememiz gereklidir.

Laravel Model yapısında hangi kolonun yazılabilir olduğu sizin tarafınızdan mutlaka belirtilmelidir. Yukarıdaki örnek tablomuzda ‘aktif’ kolonunun değiştirilmesini istemediğimizi düşünürsek bunun için Model içerisine

protected $fillable = [‘baslik’,’icerik’];

protected $fillable = [‘baslik’,‘icerik’];

Burada gördüğünüz gibi ‘aktif’ ve ‘id’ kolonlarımız yok. Bunların olmaması Laravel sistemine bunların manipüle edilmemesi gerektiği, korunması gerektiğini belirtir. Yani buraya yazmadığımız kolonlar Controller ile değiştirilemez. Laravel için bu bir çeşit güvenlik önlemidir ve bu önlem Mass Assignment olarak adlandırılır.

Eğer biz tüm alanların değiştirilebilir olmasını istiyorsak ya da sadece ‘id’ kolonunun korunmasını istiyorsak ve tablomuzda 30 adet kolon varsa bunu tek tek yazmamız mı gerekecek? Tabi ki hayır. Sürekli bizim iyiliğimizi düşünen Laravel bunun içinde çözüm oluşturmuş ‘guarded’.

protected $guarded = [];

ya da

protected $guarded = [‘id’];

protected $guarded = [];

 

ya da

 

protected $guarded = [‘id’];

Bu şekilde belirttiğimiz kolonlar harici olanların hepsinin değiştirilebilir olduğunu belirtmiş oluyoruz.

Son olarak yukarıdaki kod satırlarının Model içerisindeki yerleşimi aşağıda yer alan resimdeki gibi olmalıdır.

laravel model son halilaravel model son hali

Mobilhanem.com için yazdığım bu eğitimde temel olarak Laravel Model yapısını tanımlamak ve Laravel ile gelen Artisan (CLI) komut satırı kullanarak Model oluşturmayı anlatmaya çalıştım. Daha fazla detaylı bilgi için laravel dökümanından yararlanabilirsiniz.

Tüm Laravel Derslerimiz için tıklayınız.

Mobilhanem.com üzerinden yayınladığım laravel eğitimlerine devam edeceğiz. Yazımız ile ilgili tüm sorularınızı yorum bölümden ulaştırabilirsiniz. Bunun dışındaki diğer sorularınız için sorucevap.mobilhanem.com sitesini kullanabilirsiniz.

Umarım sizin için yararlı olmuştur. Okuduğunuz için teşekkürler. Daha fazla kişinin okuması için paylaşmayı unutmayın…

125

Android Studio Layout Inspector Kullanımı

Merhaba Arkadaşlar,
Mobilhanem.com üzerinden anlattığımız/yayınladığımız Android Uygulama Geliştirme derslerimize bu dersimizde Android Studio Layout Inspector kullanımından bahsedeceğim. Layout Inspector Android Studio 2.2 güncellemesi ile birlikte biz android geliştiricilerinin kullanımına sunuldu.

Layout Inspector Nedir ?

Uygulama geliştirirken biz android geliştiricilerinin en büyük sorunlarından biri yapmış olduğumuz tasarımın , çalışma anında farklı ekranlarda bozulmasıdır.  Android Studio’nun kendi layout editöründe düzgün gözüken tasarım çalıştığı anda farklı gözükebilmekte , tasarım bozulabilmekte veya bizim istediğimiz gibi çalışmamaktadır. Eskiden böyle durumlarda cihazımıda Android Geliştirici seçeneklerinden uygulamayı debug etmeye çalışmaktaydık, fakat yeterli olmuyor ve daha zahmetli bir işlemdi.

Bu zahmetli işlemi daha kolaylaştırmak ve yazmış olduğumuz uygulamanın tasarımını çalışma esnasında daha detaylı inceleyebilmemiz için Android Studio 2.2. ile birlikte biz geliştiricilere bu özellik sunuldu.

Layout Inspector Kullanımı ?

Gelelim nasıl kullanıldığına. Öncelikle uygulamamızı çalıştırıyoruz.

 

İster emülatörden olsun ister gerçek cihazdan farketmez. Uygulamamızı çalıştırdıktan sonra Android Studio menülerinden Tools -> Android -> Layout Inspector ‘a tıklıyoruz.

 

 

 

 

Veya Android Monitor sekmesinden solda bulunan Layout Inspector iconuna tıklıyoruz.

 

 

 

 

Çıkan ekranda görüntülemek istediğimiz ekranı seçiyoruz ve devam ediyoruz. Yukarıda belirttiğim gibi uygulamanın çalıştığı cihazın emülatör ve ya gerçek cihaz olması farketmez.

 

 

 

 

 

Tıkladıktan sonra bizim açık olan ekranımızın görüntüsü , hiyerarşik yapısı ve kullanılan componentlerin bilgileri cihazdan alınıyor ve Android Studio üzerinde aşağıdaki gibi yeni tabda görüntüleniyor.

Gördüğünüz gibi ortada bizim açık olan ekranımınız ekran görüntüsü var. Ekran üzerinde bulunan tüm componentler (List itemi, butonlar, textler vs ..) bir çizgi içerisinde bizlere gösteriliyor. İstersek bu componentlere tıklayarak anlık durum bilgisini sağ taraftaki ekranda görüntüleyebiliriz. Örneğin buton tıklanabilir mi , mevcut durumda eni boyu ve ekrandaki yeri gibi daha bir çok bilgiye sağ taraftan ulaşabiliriz. Sol taraftaki ekranda ise componentlerin liste halinde ve iç içe yapısını görüntüleyebilir istrsek componentimizi oradan seçebiliriz.

Ekranımızı cihaz üzerinden değiştirdiğimizde ve yeni ekranı incelemek istediğimizde yukarıdaki işlemleri tekrardan yapmamız gerekir. Yani açılan tabda biz ekranı değiştirdikçe güncellenme olmayacaktır. Önceden incelediğimiz ekranları tekrardan incelemek istersek projenin ana dizininde( build, app, gradle dosyalarının olduğu dizin) captures klasörü altında önceki ekranlara ulaşabiliriz.

Ben kendi çalıştığım projelerimde ekranlar sorunsuz çalışsa bile Layout Inspector ile ekranları incelemekteyim ve her seferinde bi yerleri düzeltmek/geliştirmekteyim. Sizlerede her ekranınızı bu şekilde incelemenizi öneririm.

Tüm Android Ders, Proje ve Kaynak Kodlar için tıklayınız.

Bu dersimde anlatmak istediklerim bu kadar. Bir dahaki dersimde görüşmek dileğiyle kendinize iyi bakın.

0

Android In-app Billing (Uygulama İçi Satın Alma)

package com.pasaoglu.mobilhanem.inappbilling;

 

import android.os.Bundle;

import android.support.annotation.Nullable;

import android.support.v7.app.AppCompatActivity;

import android.view.View;

import android.widget.Button;

import android.widget.Toast;

 

import com.android.billingclient.api.BillingClient;

import com.android.billingclient.api.BillingClientStateListener;

import com.android.billingclient.api.BillingFlowParams;

import com.android.billingclient.api.ConsumeResponseListener;

import com.android.billingclient.api.Purchase;

import com.android.billingclient.api.PurchasesUpdatedListener;

 

import java.util.List;

 

import butterknife.BindView;

import butterknife.ButterKnife;

import butterknife.OnClick;

import butterknife.Optional;

 

public class MainActivity extends AppCompatActivity implements PurchasesUpdatedListener

 

    private BillingClient mBillingClient;

 

    @BindView(R.id.btn_three_buy_health)

    Button btn_three_buy_health;

 

    @BindView(R.id.btn_ten_buy_health)

    Button btn_ten_buy_health;

 

    @BindView(R.id.btn_twenty_buy_health)

    Button btn_twenty_buy_health;

 

    @BindView(R.id.btn_fifty_buy_health)

    Button btn_fifty_buy_health;

 

    @Override

    protected void onCreate(Bundle savedInstanceState)

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        ButterKnife.bind(this);

 

        mBillingClient = BillingClient.newBuilder(this).setListener(this).build();

        mBillingClient.startConnection(new BillingClientStateListener()

            @Override

            public void onBillingSetupFinished(@BillingClient.BillingResponse int billingResponseCode)

                if (billingResponseCode == BillingClient.BillingResponse.OK)

                    // The billing client is ready. You can query purchases here.

                    // BUTONLARI AKTIF ET

                    enableOrDisableButtons(true);

 

                 else

                    //TODO Kullanıcıya uyarı ver

                    Toast.makeText(MainActivity.this, “Ödeme sistemi için google play hesabını kontrol ediniz”, Toast.LENGTH_SHORT).show();

                    enableOrDisableButtons(false);

                

            

 

            @Override

            public void onBillingServiceDisconnected()

                // Try to restart the connection on the next request to

                // Google Play by calling the startConnection() method.

                //TODO Kullanıcıya uyarı ver

                enableOrDisableButtons(false);

                Toast.makeText(MainActivity.this, “Ödeme sistemi şuanda geçerli değil”, Toast.LENGTH_SHORT).show();

            

        );

    

 

    private void enableOrDisableButtons(boolean isEnabled)

        btn_three_buy_health.setEnabled(isEnabled);

        btn_ten_buy_health.setEnabled(isEnabled);

        btn_twenty_buy_health.setEnabled(isEnabled);

        btn_fifty_buy_health.setEnabled(isEnabled);

    

    @Optional

    @OnClick(R.id.btn_three_buy_health)

    void buyThreeHealth(View view)

        buyProduct(“3_buy_health”);//Buradaki id Google Play’de tanımlanan id

    

    @Optional

    @OnClick(R.id.btn_ten_buy_health)

    void buyTenHealth(View view)

        buyProduct(“10_buy_health”); //Buradaki id Google Play’de tanımlanan id

    

    @Optional

    @OnClick(R.id.btn_twenty_buy_health)

    void buyTwentyHealth(View view)

        buyProduct(“20_buy_health”);//Buradaki id Google Play’de tanımlanan id

    

    @Optional

    @OnClick(R.id.btn_fifty_buy_health)

    void buyFiftyHealth(View view)

        buySubscription(“50_buy_health”);//Buradaki id Google Play’de tanımlanan id

    

 

    private void buyProduct(String skuId)

        //Bir defa satın almak için

        //Buradaki skuId , google playde tanımladığımız id’ler olmalı

        BillingFlowParams flowParams = BillingFlowParams.newBuilder()

                .setSku(skuId)

                .setType(BillingClient.SkuType.INAPP)

                .build();

        mBillingClient.launchBillingFlow(this, flowParams);

    

 

    private void buySubscription(String skuId)

        //haftalık,aylık,3 aylık,6 aylık ,yıllık üyelik için

        //Buradaki skuId , google playde tanımladığımız id’ler olmalı

        BillingFlowParams flowParams = BillingFlowParams.newBuilder()

                .setSku(skuId)

                .setType(BillingClient.SkuType.SUBS)

                .build();

        mBillingClient.launchBillingFlow(this, flowParams);

    

 

    @Override

    public void onPurchasesUpdated(int responseCode, @Nullable List purchases) //satın alma işlemi bittikten sonra bu method otomatik çağırılır

        if (responseCode == BillingClient.BillingResponse.OK

                && purchases != null) //satın alma başarılı

            for (final Purchase purchase : purchases)

                mBillingClient.consumeAsync(purchase.getPurchaseToken(), new ConsumeResponseListener()

                    @Override

                    public void onConsumeResponse(int responseCode, String purchaseToken)

                        if (responseCode == BillingClient.BillingResponse.OK)

                            //satın alma tamamlandı yapacağınız işlemler

                        

                    

                );

            

         else if (responseCode == BillingClient.BillingResponse.USER_CANCELED) //kullanıcı iptal etti

            // Handle an error caused by a user canceling the purchase flow.

            billingCanceled(); //kullanıcı iptal etti

 

         else

            billingCanceled(); //bir sorun var

        

    

 

    private void billingCanceled()

        //Kullanıcı iptal ettiğinde yapılacak işlemler

    

 

    

 

 

Algoritma Soruları ve Çözümleri – 3 | Algoritma Dersleri

Merhaba arkadaşlar,
Mobilhanem.com üzerinden anlattığımız/yayınladığımız Algoritma Eğitimleri serimize devam ediyoruz. Bu yazımızda sizlere dinamik programlamanın temellerini anlatmak üzere hazırladığımız En Uzun Ortak Alt Küme (Longest Common Subsequence) algoritmasında bahsedeceğiz.

Elimizde iki tane liste olduğunu varsayalım. Sayı veya Harflerden oluşsun hiç farketmez bu iki küme arasında sıralı bir şekilde en uzun ortak alt kümeyi nasıl buluruz.?

Aklınıza gelen ilk cevap listelerden birini referans alarak diğer listede, seçtiğimiz listedeki her bir elemanı tek tek aratmak olacaktır.

Basit bir örnek üzerinden kısaca açıklayalım.

Örnek

1. Liste: A, B, T, C, D, E, F, G, Z
2. Liste: A, B, X, D, F, G, T

Referans olarak 1.listeyi ele alalım. Bu kısımda tercih size kalmış isterseniz 2.listeyi de referans olarak alabilirdiniz değişen hiçbir şey olmayacaktır.

İlk olarak A (1. listenin ilk elemanı) 2.listede tüm elemanlar ile kıyaslanacaktır eğer var ise kaydedilecektir. Aynı şekilde 2. eleman içinde aynı şeyi yapacağız. (B) sürekli bu şekilde kıyaslama yaparak tüm listede sıralı ortak elemanları bulacağız.

Sonuç: [A, B, D, F, G] şeklinde olacaktır.

Java Kodu

for (int i=0; i<stringList2.size(); i++)
for (int j=i; j<stringList.size(); j++)
if (stringList2.get(i).equals(stringList.get(j)))
stringCommons.add(stringList.get(j));

System.out.println(stringCommons); // [A, B, D, F, G]

for (int i=0; i<stringList2.size(); i++)

    for (int j=i; j<stringList.size(); j++)

        if (stringList2.get(i).equals(stringList.get(j)))

            stringCommons.add(stringList.get(j));

        

    

 

System.out.println(stringCommons); // [A, B, D, F, G]

Bu problemde birden fazla sıralı alt küme bulabilirsiniz fakat hedefinizin en uzun ortak alt kümeyi bulmak olduğunu unutmayınız.

Buraya kadar herşey yolunda fakat yazının başında bu algoritmanın dinamik programlama temelli bir algoritma olduğunu söylemiştik fakat şuana kadar yaptıklarımızda bunun izleri görünmüyor. Her bir elemanı tek tek dolaştık ve kıyaslama yaparak sonuca ulaştık fakat dinamik programlama yaklaşımını göz önüne alırsanız eğer bu problemi daha kısa bir zamanda çözmemizin mümkün olacağını anlarsınız.

Gelin bir de bu problemi şu şekilde çözelim.

Aşağıda verilen tablo örneğimizdeki değerler referans alınarak verilmiştir.

Bu tabloyu yorumlayacak olursak sağ alt köşede ki değer bizim bulacağımız en uzun ortak alt kümenin uzunluğudur. Gerçektende cevaba bakacak olursak [A, B, D, F, G] 5 elemanlı olduğu doğrulanacaktır.

Gördüğünüz üzere 1. listeyi satrılara 2. listeyi ise sütunlara dizdik yanlarına birer satur ve sutün 0 lar ile doldurduk. Her satır ve sütunda aynı elemana karşılık gelen değerlerin değerini 1 arttırmış olduk. Yani 7.satır 6.sütuna baktığımız zaman D harflerinin kesiştiğini göreceksiniz. Adım adım bu şekilde devam ettiğimiz zaman sağ alt köşeye doğru gidildiğini ve en son bulunan değerin ise cevabın yani en uzun ortak alt kümenin eleman sayısını (uzunluğunu) verdiğini göreceksiniz.

Peki tablodaki diğer değerler neye göre dolduruluyor. ?

Her eleman kontrol edilirken solundaki ve üzerinde eleman referans alarak değerlendirilir. Örneğin 4.satır(B) ve 3.sütun(A) da bulunan 1 rakamı üzerindeki ve solundaki rakama bakılarak en büyüğü hangisi ise o yazılarak seçilmiştir. Çünkü A ve B harfleri aynı harfler değil dolayısıyla ortak eleman değil. Fakat 4.satır(B) ve 4.sütun(B) da bulunan 2 rakamı sol üst tarafta bulunan 1 rakamının 1 fazlası olarak ifade edilir. Ortak eleman ve ortak olmayan elemanların değerlendirilmesi bu şekildedir.

Dinamik programlama yaklaşımında kesiştiği noktaları göz önüne alarak diğer durumları değerlendirmeye katmaz isek daha kısa zamanda algoritmayı tamamlamış olacağız. Tabloda bulunan kırmızı renkli rakamlar satır ve sütun bazında ortak elemanları ifade etmektedir.

Java Kodu

int computeLCS(char[] seq1, char[] seq2)
int N = seq1.length;
int M = seq2.length;
int[][] lcs_table = new int[N + 1][M + 1];
for (int i = 0; i <= N; i++)
for (int j = 0; j <= M; j++)

return lcs_table[N][M];

int computeLCS(char[] seq1, char[] seq2)

        int N = seq1.length;

        int M = seq2.length;

        int[][] lcs_table = new int[N + 1][M + 1];

        for (int i = 0; i <= N; i++)

            for (int j = 0; j <= M; j++) j == 0)

                    lcs_table[i][j] = 0;

                else if (seq1[i1] == seq2[j1])

                    lcs_table[i][j] = 1 + lcs_table[i 1][j 1];

                else

                    lcs_table[i][j] = Math.max(lcs_table[i 1][j], lcs_table[i][j 1]);

            

        

        return lcs_table[N][M];

    

Daha fazla ayrıntı için buradan faydalanabilirsiniz.

Umarım faydalı bir algoritma olmuştur.

Hoşçakalın.

0