10 Kasım 2013 Pazar

ArrayList, Dictionary, List , Hashtable veri tipleri C#

//ArrayListArrayList liste = new ArrayList();
liste.Add("bir");
liste.Add("iki");
liste.Add(false);
foreach (var element in liste)
{
Console.WriteLine(element);
}

//Dictionary
Dictionary<string, int> dict = new Dictionary<string, int>();dict.Add("bir", 1);
dict.Add("iki", 2);
string veri = dict["bir"];
string veri2= dict["iki"];
//List
List<string> liste = new List<string>();
liste.Add("bir");
liste.Add("iki");
foreach (string element in liste)
{
Console.WriteLine(element);
}
List<string> liste = new List<string>();
liste.Add("bir");
liste.Add("iki");
foreach (string element in liste)
{
Console.WriteLine(element);
}
//Hashtable
Hashtable table = new Hashtable();
table["bir"] = 1;
table["iki"] = 2;
Hashtable table = new Hashtable();
table["bir"] = 1;
table["iki"] = 2;

List tipinde tamsayı içeren listede aradığınız veri var mı kontrolü nasıl yapılır C#

Bir tamsayılar listesi içinde bir değer varsa doğru, değilse yalnış değerini döndürmek istediğinizi varsayalım.
//Listemizi oluşturalım
List<int> liste = new List<int> { 1,2,3,4,5,6 };

//5 liste içinde var mı diye kontrol ediyoruz, varsa doğru dönecek
bool birinciDegerListedeVar = liste.IndexOf(5) != -1;

Hashtable'lar hakkında - C#

Hashtable'dan key olmadan nasıl kayıt alınabilir?
Bazen doldurduğunuz hashtable tipindeki listeden key değeri olmadan verileri 
almanız lazım olabilir, işte aşağıdaki kodla bunu yapabilirsiniz. 
Bu arada biraz da HashTable'larla alakalı bilgi verebilirim.
Hashtable liste= new Hashtable();
string value="";  string key="";
        foreach (DictionaryEntry dictionaryEntry in liste)        {
            value=dictionaryEntry.Value.ToString();
            key=dictionaryEntry.Key.ToString();
        }
HashTable doldurmak;
Hashtable hashtable = new Hashtable();
 hashtable[1] = "Bir";
 hashtable[2] = "İki";
 hashtable[13] = "Üç";
veya
Hashtable hashtable = new Hashtable();    
hashtable.Add("1", "10");   
hashtable.Add("2", "20");
hashtable.Add("3", "30");
hashtable.GetKey(20);//gelen değer 2 olacak...
//Hashtable içindeki anahtar değerleri almak için 
foreach (int key in hashtable.Keys)
{
    Console.WriteLine(key);
}
//Hashtable içindeki değerleri almak için 
foreach (string value in hashtable.Values)
{
    Console.WriteLine(value);
}

12 Ağustos 2013 Pazartesi

Android'de USB bağlantısının otomatik algılanması ve programdan bağlanan aletin tanıtılması

Android aletinize USBden bağlanan bir aletle otomatik bağlantı yapması ve aleti tanıması için gereken kod aşağıdaki gibidir.

private void USBBaglantilariniYap()
{
   IntentFilter filter = new IntentFilter();
   filter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED);
   filter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED);
   registerReceiver(mUsbReceiver, filter);
}

@Override
protected void onNewIntent(Intent intent) {
USBBaglantilariniYap();
};

BroadcastReceiver mUsbReceiver = new BroadcastReceiver() {
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(action)) {
            // never come here(when attached, go to onNewIntent)
        connectFunction();
        } else if (UsbManager.ACTION_USB_DEVICE_DETACHED.equals(action)) {
            disconnectFunction();
        }
    }
};

Bunun yanısıra
res/xml/device_filter.xml dosyasını yaratıp içine aletle ilgili vendor-id bilgilerini girmeniz gerekmekte.

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <usb-device vendor-id="0403" product-id="6001" class="0" subclass="0" protocol="0"></usb-device>
</resources>


AndroidManifest.xml altında da USB otomatik algılansın diye aşağıdaki ayarları yapmanız gerekiyor.

<activity
            android:name="com.projeAdi.MainActivity"
            android:label="@string/app_name" android:launchMode="singleTask">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
            </intent-filter>
         <meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"  android:resource="@xml/device_filter" />
        </activity>

Android küçük bilgiler

Bir sayfadan bir başka sayfaya geçmek için
startActivity(new  Intent("com.projeadi.gidileceksayfa"));

Bir butonu tamamen görünmez yapmak
buttonAdi.setVisibility(View.GONE);

Yeniden görünür yapmak
buttonAdi.setVisibility(View.VISIBLE);

Bir string'i genel değişkenlerden ekrana yazdırmak için
getString(R.string.uyari)

Android sayfalar arasında değişken geçirmek

İki ekran arasında bir butona basılarak değer geçirilmesi aşağıdaki şekilde sağlanabilir.

“gelisnedeni” isimli bir değişkene “guncelle” değeri ekleniyor.
Intent ile nereye bu değişkenin taşınacağı ayarlanıyor.

buttonOrnek.setOnClickListener(new View.OnClickListener() {
   @Override
   public void onClick(View v) 
   {
     Bundle bundle = new Bundle();
     bundle.putString("gelisNedeni", "guncelle");
                          
     Intent intent = new Intent(getApplicationContext(), GidilecekClassAdresi.class);
     intent.putExtras(bundle);
     intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
     startActivityForResult(intent, 0);
   }
}

GidilecekClassAdresi içinde değeri almak için onCreate fonksiyonu içinde aşağıdaki kod bloğu kullanılabilir.

Bundle recdData = getIntent().getExtras();

gelisNedeni = recdData.getString("gelisNedeni");

3 Nisan 2013 Çarşamba

Datediff fonksiyonu ile SQL'de iki tarihle ilgili işlemler yapmak

select ‘Yıl Farkı’, datediff(yyyy, ‘2005-01-22 10:20:00′, ‘2008-01-22 16:20:00′)
Sonuç=> 3
select ‘Ay Farkı’, datediff(m, ‘2008-01-22 10:20:00′, ‘2008-12-22 16:20:00′)
Sonuç=>11
select ‘Gün Farkı’, datediff(d, ‘2008-01-22 10:20:00′, ‘2008-01-29 16:20:00′)
Sonuç=> 7
select ‘Saat Farkı’, datediff(hh, ‘2008-01-22 10:20:00′, ‘2008-01-22 16:20:00′)
Sonuç=> 6
select ‘Dakika Farkı’, datediff(mi, ‘2008-01-22 10:20:00′, ‘2008-01-22 16:20:00′)
Sonuç=> 360
select ‘Saniye Farkı’, datediff(s, ‘2008-01-22 10:20:00′, ‘2008-01-22 10:20:30′)
Sonuç=> 30

Android programlamada wireless network üzerinden debugging nasıl yapılır?

Özellikle USB bağlantıları ile ilgili kodlamalarda wireless hata kontrolü yapılması gerekebiliyor. Bunu yapmak çok kolay.
Eclipse ile gelen sdk klasörünüzde 
adt-bundle-windows-x86\sdk\platform-tools içinden adb.exe'nin olduğu yerde Shift + Sağ Mouse Tuşuna basarak "Komut Penceresini Burada Çalıştır" tuşuna basın.
Komut penceresinde adb devices yazarsanız o anlık bağlı olan aletleri görebilirsiniz.
Neyse

adb tcpip 5555   --> yazarak, portu tanımlayın,
adb connect 192.168.0.101:5555     --> yazarak da alete bu port üzerinden erişim açın. 192.168.0.101  yerinde android aletinizin wireless'a bağlanmakta kullandığı IP adresini yazmalısınız. Bunu aletin üzerindeki wireless internet ayarlarında bağlı olduğu ağ üzerine tıklayarak öğrenebilirsiniz.
Geri dönmek için yine aynı ekranda 
adb usb yazmanız yeterli.

17 Mart 2013 Pazar

Java ile android içinde listelerin kullanımı List<>,ArrayList,HashMap'ler

Android içindeki Java kodunda sıkça ihtiyaç duyduğum listelemelerle ilgili biraz bilgi vermek istiyorum.
Nesnelerden oluşan bir liste yaratmak için
List<Nesne> listeAdi =new ArrayList<Nesne>();    kullanılabilir.

Veya bir key value yani anahtar değerle verilere erişmeniz gerekebilir, bunun için HashMap kullanabilirsiniz.
Map<Integer, Nesne> listeAdi = new HashMap<Integer, Nesne>();

Bir listenin içinde başka bir liste tutmak isterseniz, örneğin bir byte listesi (byte array) aradığınız budur.
List<byte[]> listeAdi =  new LinkedList<byte[]>();

Listede nesnelerin listesini tutmak içinse yine HashMap'ten yararlanmanız gerekecek, bunun kullanımı ise,
Map<Integer, List<Nesne>> listeAdi = new HashMap<Integer, List<Nesne>>();

Normal bir liste ise
int[] listeAdi=new int[listeboyutu]; veya String[] listeAdi=new String[listeboyutu];

Kolay gelsin

Java da String'lerin birbirleriyle karşılaştırılması

Java içinde String değerleri karşılaştırmak için if(string1==string2) ifadesi kullanılmaz. 
String karşılaştırmaları için   if(string1.equals("string2")) ifadesini kullanmalısınız.

Integer yani tamsayı değerleri karşılaştırmak için ise if(integer1==integer2) kullanılabilir.

12 Mart 2013 Salı

Bilgisayarınızdaki Sound Effects yani Ses Efektleri çalışmıyorsa

Bazen bilgisayarınızda değiştirdiğiniz ses efektleri çalışmıyor. Windows'un çözümü şu;

c:\Windows\System32\cmd.exe dosyasına sağ tuş ile basıp yönetici olarak çalıştır diyorsunuz.
Daha sonra açılan ekrana
sfc /scannow
komutu ile taratma yapıyorsunuz. Bu bir süre devam ediyor ve ekranda "Sistem tarama işleminin doğrulama aşaması başlatılıyor" diyor. Doğrulama tamamlandıktan sonra bilgisayarınızı yeniden başlatıyorsunuz.

Umarım işe yarar.

1 Mart 2013 Cuma

Biraz da Android Programlama

Bir .net programcısı iseniz ve Android programlamaya geçmeyi düşünüyor şunu söylemeliyim, korkmanıza gerek yok. Android programlamasını Java ile yapabiliyorsunuz. Eclipse arayüzünden programlama yapacağınız aleti tanıttığınızda, ta da...Normal bir proje sürecine ulaşmış oldunuz. Ayrıca testinizi dış makina yani telefonunuzda veya bir tablet üzerinde yaptığınızda ulaştığınız haz çok daha fazla.
Yıllar önce Java ile programlama yapmıştım ama o zamanlar gerek yazılım arayüzü gerekse "library"lerin hepsinin elle eklenmesi gibi sorunlardan, itiraf ediyorum, Java'dan nefret etmiştim. Şimdilerde Android üzerinde geliştirme yapmam gerekti ve bende bir amanın ne yapacağım, yine Java'nın karanlık dünyasında debeleneceğim hissiyatı başladı. İlk önce "bu benim bittiğim andır" diye diye Eclipse arayüzünü kurdum ama  açtıktan sonra artık eskisi kadar karanlık bir Java dünyası olmadığını farkettim. İşler aynı eski dosya yapısında olsa da özellikle C# yazılımcısı iseniz Java çok basit gelecek.

Android programlamasında anlayacağınız üzere Eclipse arayüzünü ve kullandığım test aletinde SqlLite veritabanını kullanıyorum. İnternette kaynak olarak aradıklarınızın aşağı yukarı tamamını http://developer.android.com adresinden temin edebiliyorsunuz. Ama yapılacakları size basitçe listeleyeyim.

1- Öncelikle http://developer.android.com/sdk/index.html#ExistingIDE  adresinden toplu olarak yazılım yapacağınız arayüzü indiriyorsunuz. Bu indirilecek pakette
  • Eclipse + ADT plugin
  • Android SDK 
  • Android Platform-tools
  • En yeni Android platform
  • emulatorünüz için en yeni resimler bulunuyor.
Bu paketin içinden çıkan 
  1.  adt-bundle-<os_platform>.zip isimli dosyayı açıp kendi makinenızda geliştirme yapacağınız bir klasöre çıkartıyorsunuz.
  2. adt-bundle-<os_platform>/eclipse/ klasörü içinden de eclipse uygulamasını başlatıyorsunuz. Artık geliştirmeye başlamaya hazırsınız. 
2- Bir sonraki adım geliştirme yapacağınız aletin eclipse tarafından tanındığından emin olmak. 
Oluşabilen sorun : Aletiniz makinanızda açılabiliyor ve tanımlı gözüküyor ama eclipse debug listesinde görüntülenmiyor. 
Bazı durumlarda Eclipse sizin aletinizi tanımıyor, hata veriyor veya debug listesinde aletinizi hiç görmüyor. Bunun nedeni aletinizin generik dll'lerinin bilgisayarınızda yer almaması olabiliyor veya daha basit aletinizden ayarlarınızı açmamış olabiliyorsunuz.
Öncelikle aletinizin USB bağlantısının takıldığından emin olun. Bilgisayarınız aletinizi tanımıyorsa, June Fabrics Technology tarafından geliştirilmiş olan PdaNetZ350 isimli programı bilgisayarınıza yükleyin, bu ihtiyaç duyduğunuz pekçok dll'i otomatik yükleyecek bir program.
Sonra Debug aleti olarak kullanacağınız aletinizin ayarlar menüsünde "geliştirici seçenekleri"nden  "USB Hata ayıklaması" tikini işaretleyin ve eclipse'i kapatıp yeniden açın. Hatta USB bağlantısını çıkarıp yeniden takın. Şimdi aleti görüyor mu tekrar kontrol edin.