İlki bir önceki yazım olan ve yalnızca 2 yazıdan oluşan muhteşem yazı dizime (Eclipse & Android SDK kullanırken karşılaştığım hatalar) kaldığım yerden devam ediyorum. Bu sefer uygulamayı cihaz üzerinde çalıştırmak istediğimde aldığım hata ve google amcanın yardımıyla kavuştuğum çözümden bahsedeceğim. Hata aşağıdaki gibi:
Android Launch!
adb is running normally.
Performing com.test.Splash activity launch
Uploading Test.apk onto device 'HT9A4LV01328'
Failed to install Test.apk on device 'HT9A4LV01328': timeout
Launch canceled!
ADB çalışıyor, upload tamam ama uygulama yüklenemeden timeout’a düşüyor. Çözüm için de Eclipse -> Preferences -> Android -> DDMS -> ADB connection time out (ms) yolunu izliyoruz ve orda default 5.000 olarak gelen değeri biraz artırıyoruz. (misal 10.000, yetmezse 15.000 vs)

Yeniden denediğimizde Console çıktısını aşağıdaki gibi görüyorsak olay tamamdır.
Android Launch!
adb is running normally.
Performing com.test.Splash activity launch
Uploading Test.apk onto device 'HT9A4LV01328'
Installing Test.apk...
Success!
Starting activity com.test.Splash on device HT9A4LV01328
Android SDK ve Eclipse ADT Plugin’ini güncelledikten sonra daha önce yaratmış olduğum AVD’lerden bir tanesini çalıştırmak istediğimde aşağıdaki gibi bir hata aldım.
invalid command-line parameter: Files.
Hint: use '@foo' to launch a virtual device named 'foo'.
please use -help for more information

Google amcaya sordum “n’oluyoruz la?” diye, aynı problemle karşılaşmış insanlar gösterdi bana. Meğerse güncellemeden sonra Eclipse artizlik yapıp Windows’un boşluk, parantez vs karakterleri içeren dosya yollarını beğenmiyormuş. O güne kadar sorunsuz çalışan kısım, yani Eclipse -> Window -> Preferences -> Android -> SDK Location kısmında yazılı olan
C:\Program Files (x86)\Android\android-sdk
artık çalışmayacakmış.

“E çözüm neymiş peki?” diye baktığımda da o yolu şu aşağıdakilerden biri ile değiştirmek olduğunu öğrendim.
C:\PROGRA~1\Android\android-sdk
C:\PROGRA~2\Android\android-sdk
İlki şuna;
C:\Program Files\Android\android-sdk
ikincisi de şuna;
C:\Program Files (x86)\Android\android-sdk
ilaçmış. İlgililere duyrulur.
Android’in veri saklama yöntemleri ile alakalı daha önce Android :: Shared Preferences yazısını yazmıştım. O listedeki external storage cihazın harici hafızasına, yani şimdilik sd karta tekabül ediyor.
Üzerinde çalıştığım projelerin birinde mp3 dosyalarını saklamam gerekiyordu. Sayısı birden fazla ve her birinin ortalama boyutu 10 mb civarında mp3 dosyalarını dahili hafızaya ya da uygulama paketi içinde bir yerlere yazsam kısa süre sonra cihaz kullanılmaz hale gelebilir. Bu durumda çözüm olarak dosyaları sd kart üzerine yazmaya karar verdim (Umarım doğru bir karar vermişimdir :)
Başta direkt sd kart üzerine yazıp uygulamayı çalıştırdım ama kısa süre sonra kart çöplüğe döndü. Her şeyi ana dizin içine atıyordum. İşte tam burda kart üzerinde bir klasör oluşturma ve dosyaları oraya yazma / oradan okuma zorunda kaldım. Bu yazıda da bu olayı nasıl yaptığımı anlatmaya çalışacağım.
Bunun için Java’nın “File” class’ından bir obje yaratıp, parametre olarak yol + klasör ismi verdim ve sonrasında file.mkdir() metodu ile klasörü oluşturdum. Kod aşağıdaki gibi:
File mFile = new File("/sdcard/altKlasor");
mFile.mkdir();
Tabi bu kodun çalışması için yine her zamanki gibi AndroidManifest.xml dosyasına harici hafızaya yazma iznini eklememiz gerekiyor.
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Bu sayede direkt sd kart altında klasörü oluşturduk. Aşağıda Eclipse’teki File Explorer’ın kod çalışmadan önceki ve sonraki hali var.
Önce:

Sonra:

Kodu çalıştırdık işimizi gördük ama burda ufak bir sıkıntı var. Sd kartın yolunu elle girdik. İlerde yolun değişebilmesi ya da sd kart yerine başka bir harici hafıza kullanılabilmesi durumlarına karşılık daha iyi bir yöntem kullanmak gerekti. Bunun için de harici hafızanın direkt yolunu alan aşağıdaki kodu buldum.
String extStorageDirectory = Environment.getExternalStorageDirectory().toString();
Bu şekilde biraz daha bağımsızlık ve esneklik kazanmış olduk. Dosyayı oluşturan kodun tamamı aşağıdaki gibi şekillendi.
String strNewFolder = "/altKlasor"; String extStorageDirectory = Environment.getExternalStorageDirectory().toString(); File mFile = new File(extStorageDirectory + strNewFolder); mFile.mkdir();
Belki birinin daha işine yarar..
Daha önceki Değişken Adında Türkçe Karakter Kullanımı [C#] yazımda bahsettiğim C#’taki değişken, class, namespace isimlerinde Türkçe karakter kullanabiliyor olmak “C#’ta varsa Java’da neden olmasın?” sorusunu kendime sormama ve neticesinde bu yazının yazılmasına vesile oldu.
Netbeans 6.8 ve Eclipse Galileo ile aynı şeyleri denedim ikisinde de sonuç aynı : C#’ın yaptığını Java da yapıyor; proje, package, class ve değişken isimlerinde Türkçe karakter kullanmak istendiğinde “Abi sen burda Türkçe karakter kullanmaya çalışıyorsun ama bunu yapamazsın, mümkünse onları İngilizce karşılıkları ile değiştir” falan demiyor.
O yazıdaki kodun yaklaşık Java karşılığı aşağıda :
package türkçekarakter;
public class TürkçeKarakterİçerenSınıf {
public static void main(String[] args) {
String strTürkçeKarakterİçerenDeğişken = "Değişkenin değeri.";
System.out.println(strTürkçeKarakterİçerenDeğişken);
}
}
Şu görseller de Netbeans ve Eclipse’teki proje ve konsol alanları :




Bize programlama derslerinde öğretilen “değişken isminde Türkçe karakter olmaz” artık kural olmaktan çıkıp gelenek haline geliyor sanırım.