Merhaba,
Eclipse ile android uygulaması geliştirirken zaman zaman intelisense'in uzun süreli donmalarına maruz kalmışsınızdır. Bunun nedeni, bug raporunda belirtildiği üzere dizi hesaplamalarındaki algoritma değişikliğiymiş. Bu can sıkıcı problemden kurtulmak için (eclipse 3.7 versiyonu) linkteki dosyayı indirip eclipse içindeki plugins klasörüne atmanız yeterli.
ENG: You may have noticed that eclipse just freezes when you are typing the letters followed by the (.) period while using auto completion feature with Android SDK plugin. This is caused by the change of algorithm which calculates the ranges as described in this bug report. This has been fixed for eclipse 3.7 version, but since it is still in milestone releases, it does not have support for Android SDK. Applying the fix is easy, you just replace org.eclipse.jdt.core_3.6.1.v_A68_R36x.jar inside your Eclipse plugins folder with the file provided in the above message. Here is the link:
http://adt-addons.googlecode.com/svn/patches/org.eclipse.jdt.core_3.6.1.v_A68_R36x.zip
İyi çalışmalar
mostly about "advanced android, ios, game and augmented reality" development
17 Ağustos 2011 Çarşamba
15 Ağustos 2011 Pazartesi
StateListDrawable kullanarak kendi checkbox'ınızı yaratın. Create your own checkboxes with using StateListDrawable.
Merhaba,
Üzerinde çalıştığım bir projede dinamik oluşturduğum checkboxların theme üzerinde gözükmemesi ancak checked edildikten sonra fark edilmesi problemiyle karşılaştım. Bu sorunu gidermek için theme'i değiştirebilirdim ancak bu pek işime gelmedi, bende statelere göre checkboxların render edildiği imageleri değiştirme yoluna gittim. Umarım işinize yarar.
(Last day I came across a problem while using checkbox object. After that i decided to create my own custom checkbox then this morning i did it and wanted to share with you guys. With the code as can be seen below you can create your own custom checkbox too. What you need is paying some attention to StateListDrawable concept. I hope it will be remarkable detail for you.)
İyi çalışmalar.
Üzerinde çalıştığım bir projede dinamik oluşturduğum checkboxların theme üzerinde gözükmemesi ancak checked edildikten sonra fark edilmesi problemiyle karşılaştım. Bu sorunu gidermek için theme'i değiştirebilirdim ancak bu pek işime gelmedi, bende statelere göre checkboxların render edildiği imageleri değiştirme yoluna gittim. Umarım işinize yarar.
(Last day I came across a problem while using checkbox object. After that i decided to create my own custom checkbox then this morning i did it and wanted to share with you guys. With the code as can be seen below you can create your own custom checkbox too. What you need is paying some attention to StateListDrawable concept. I hope it will be remarkable detail for you.)
CheckBox myCheckbox = new CheckBox(this);
StateListDrawable stateList = new StateListDrawable();
int statePressed = android.R.attr.state_pressed;
int stateChecked = android.R.attr.state_checked;
stateList.addState(new int[] {-stateChecked}, new BitmapDrawable(BitmapFactory.decodeResource(getResources(), R.drawable.unchecked)));
stateList.addState(new int[] {stateChecked}, new BitmapDrawable(BitmapFactory.decodeResource(getResources(), R.drawable.checked)));
stateList.addState(new int[] {statePressed}, new BitmapDrawable(BitmapFactory.decodeResource(getResources(), R.drawable.pressed)));
myCheckbox.setButtonDrawable(stateList);
İyi çalışmalar.
12 Ağustos 2011 Cuma
java.lang.StackOverflowError hatasını neden alırsınız?
Merhaba,
Bu hatayı deadlock durumlarında alırsınız ve bunun 2 nedeni olabilir.
1. Eğer bir method kendi kendini sonsuz kere çağırıyorsa (Recursive methodlar)
2. Ya da birinci method ikinci methodu çağırırken ikinci method içindeki herhangi bir satır birinci methodu çağırıyorsa.
İyi çalışmalar
Bu hatayı deadlock durumlarında alırsınız ve bunun 2 nedeni olabilir.
1. Eğer bir method kendi kendini sonsuz kere çağırıyorsa (Recursive methodlar)
private int getX(int b){
b += 1;
...
...
return getX(b);
}
2. Ya da birinci method ikinci methodu çağırırken ikinci method içindeki herhangi bir satır birinci methodu çağırıyorsa.
İyi çalışmalar
11 Ağustos 2011 Perşembe
Caused by: java.lang.IllegalStateException: (conn# 0) already closed - close() was never explicitly called on database
Merhaba,
Başlıkta 2 farklı hata görmektesiniz. SqliteOpenHelper'dan extend ettiğiniz db class'ındaki tüm sql işlemlerinde cursor'ı kapatmış olsanız dahi -ki bu bizzat benim yaşadığım problemdi- close() was never explicitly called on database hatasını alabilirsiniz. İlginç olan şey debug ederken bu hatayla karşılaşmamanız ve hatta hata geliyor olsa bile (logcat'ten gözlemleyebilirsiniz) uygulamanın çalışmaya devam ediyor olması. Bu problemi çözmek için cursor.close() işlemi sonrası db'yi de close ettiğimde ise doğal olarak tekrar tekrar db'yi açmamız gerekliliğiyle karşılaştım. Sonuç olarak bunların ikisini de bertaraf edecek bir çözümü sizinle paylaşacağım. Genellikle onDestroy eventinde cursor'ın ve/veya db'nin close edilmesi tavsiye edilmiş. Ancak gitmekte olduğunuz class her zaman bir activity olmayabilir. Ben hem daha farklı hem de hepimizin neredeyse her uygulamada kullandığı çakma bir factory pattern ile bu soruna çözüm getirebileceğimizi göstereceğim.
Anlaşılmayan nokta olursa yorum yazabilirsiniz.
Aşağıda ürünler ile ilgili db işlemlerini gerçekleştiren bir class'ımız var. Herhangi bir aktivitide yapılan bir işlemde ürün bilgisi getirilecek varsayıyoruz.
cok basit anlamda başka bir activity'den UrunMgr class'ı içindeki herhangi bir methodu call etmek için;
Yukarıdaki örnekte, singleton'a benzer bir yapı ile (çakma factory pattern dedik) constructor'ın private'a çekildiğini, bu sayede tüm çoklama işlemlerinin getInstance methodu üzerinden yapıldığını, dolayısıyla tekrar tekrar UrunMgr class'ının yaratılmadığını (multi-thread hariç) basitçe anlatmaya çalıştım. Dediğim gibi anlaşılmayan bir nokta olursa yorum bölümünden ulaşabilirsiniz, iyi çalışmalar.
Başlıkta 2 farklı hata görmektesiniz. SqliteOpenHelper'dan extend ettiğiniz db class'ındaki tüm sql işlemlerinde cursor'ı kapatmış olsanız dahi -ki bu bizzat benim yaşadığım problemdi- close() was never explicitly called on database hatasını alabilirsiniz. İlginç olan şey debug ederken bu hatayla karşılaşmamanız ve hatta hata geliyor olsa bile (logcat'ten gözlemleyebilirsiniz) uygulamanın çalışmaya devam ediyor olması. Bu problemi çözmek için cursor.close() işlemi sonrası db'yi de close ettiğimde ise doğal olarak tekrar tekrar db'yi açmamız gerekliliğiyle karşılaştım. Sonuç olarak bunların ikisini de bertaraf edecek bir çözümü sizinle paylaşacağım. Genellikle onDestroy eventinde cursor'ın ve/veya db'nin close edilmesi tavsiye edilmiş. Ancak gitmekte olduğunuz class her zaman bir activity olmayabilir. Ben hem daha farklı hem de hepimizin neredeyse her uygulamada kullandığı çakma bir factory pattern ile bu soruna çözüm getirebileceğimizi göstereceğim.
Anlaşılmayan nokta olursa yorum yazabilirsiniz.
Aşağıda ürünler ile ilgili db işlemlerini gerçekleştiren bir class'ımız var. Herhangi bir aktivitide yapılan bir işlemde ürün bilgisi getirilecek varsayıyoruz.
public class UrunMgr {
private static UrunMgr instance;
Context context;
private SQLiteDatabase db;
// constructor
private UrunMgr(Context context) {
this.context = context;
DBHelper helper = new DBHelper(context);
this.db = helper.getWritableDatabase();
}
public static UrunMgr getInstance(Context context) {
if(instance == null) {
instance = new UrunMgr(context);
}
return instance;
}
public Urun getUrunByTip(String urunTipi)
Urun oUrun;
Cursor cursor;
try {
cursor = db.query(MyConstants.TBL_URUNLER, new String[] {
"_id", "Urun", "Ad", "Ord"}, "Urun = '" + urunTipi + "'", null, null, null,
null, null);
cursor.moveToFirst();
if (!cursor.isAfterLast()) {
do {
oUrun = populateList(cursor);
} while (cursor.moveToNext());
} else {
oUrun = null;
}
cursor.close();
} catch (SQLException e) {
Log.e("UrunMgr - getUrunByTip() db hatası alındı: ", e.toString()); e.printStackTrace();
}
return oUrun;
}
}
cok basit anlamda başka bir activity'den UrunMgr class'ı içindeki herhangi bir methodu call etmek için;
Urun urun = UrunMgr.getInstance(this).getUrunByTip("1");
Yukarıdaki örnekte, singleton'a benzer bir yapı ile (çakma factory pattern dedik) constructor'ın private'a çekildiğini, bu sayede tüm çoklama işlemlerinin getInstance methodu üzerinden yapıldığını, dolayısıyla tekrar tekrar UrunMgr class'ının yaratılmadığını (multi-thread hariç) basitçe anlatmaya çalıştım. Dediğim gibi anlaşılmayan bir nokta olursa yorum bölümünden ulaşabilirsiniz, iyi çalışmalar.
9 Ağustos 2011 Salı
Eclipse Shortcuts (Kısayolları)
http://www.allapplabs.com/eclipse/eclipse_shortcuts.htm adresinden alıntılanmıştır. Sık kullanabileceğinizi düşündüğüm kısayolları türkçeye çevirip koyuyla belirttim. (Ctrl+Shift+L ile hızlıca kısayollar menüsüne ulaşmanız da mümkün.)
vigational Shortcuts | |
F10 | Main menu (Ana Menü) |
Shift F10 | Context menu (Sağ Click) |
Ctrl F10 | View menu (Breakpoint koyulan alanda sağ click) |
Workspace navigation | |
F12 | Activate editor (Kod alanını aktifleştir) |
Ctrl+Shift+W | Switch editor (Editörler arası geçiş) |
Ctrl F6 | Next editor (Sonraki editör) |
Ctrl Shift F6 | Prev editor (Önceki editör) |
Ctrl F7 | Next workspace (Sonraki workspace) |
Ctrl Shift F7 | Prev workspace (Önceki workspace) |
Ctrl F8 | Next perspective (Sonraki perspektif [Java-Debug hızlı geçiş için]) |
Ctrl Shift F8 | Prev perspective (Önceki perspektif) |
Alt Left | Back (Editörler arası sola doğru dolaşma) |
Alt Right | Forward (Editörler arası sağa doğru dolaşma) |
Files | |
Alt Shift S | Source (veya sağ click source) |
Ctrl Shift R | Jump to file (Dosyaya atla) |
Ctrl N | New file (Yeni dosya) |
Ctrl S | Save file (Dosyayı kaydet) |
Ctrl Shift S | Save all files (Hepsini göster) |
Ctrl F4 | Close file (Dosyayı kapat) |
Ctrl Shift F4 | Close all files (Tümünü kapat) |
Find | |
Ctrl L | Goto line (Satıra git) |
Ctrl F | Find (Bul) |
Ctrl J | Incremental find (İleriye doğru tek tek bul) |
Ctrl Shift J | Incremental find prev (Geriye doğru tek tek bul) |
Ctrl K | Find next (Sonrakini bul) |
Ctrl Shift K | Find prev (Öncekini bul) |
Ctrl H | Search workspace (Ara) |
Ctrl (dot) | Navigate next |
Ctrl (comma) | Navigate prev |
Java navigation | |
F3 | Goto declaration |
Ctrl Shift U | Find references in file (Açık ekran içinde nesnenin referanslarını bul) |
Ctrl Shift G | Find references in workspace (Tüm proje içinde nesnenin referanslarını bul) |
Ctrl G | Find declarations in workspace |
Ctrl Shift P | Navigate to matching bracket/brace |
Ctrl T | Popup type hierarchy |
Ctrl Shift T | Open Type |
Ctrl O | Outline of current source |
Ctrl F3 | Outline of current cursor position |
Ctrl Shift Arrow | Jump beetween methods up or down |
F2 | Show Javadoc |
F4 | Show hierarchy |
Ctrl Alt H | Open call hierarchy |
General editing | |
Alt Arrow | Move line(s) up or down |
Alt Shift Up | Expand selection to enclosing element (Kapsandığı elemana kadar seçimi genişlet) |
Alt Shift Right | Expand selection to next element |
Alt Shift Left | Expand selection to previous element |
Alt Shift Down | Restore previous selection (Önceki seçime dön) |
Ctrl Alt Arrow | Duplicate line(s) up or down (Alt satıra kopyala) |
Shift Enter | Insert line below (Satır atla devam et) |
Ctrl Shift Enter | Insert line above (Alta satır ekle, atlamadan devam et) |
Ctrl D | Delete line (Satır sil) |
Ctrl Shift Q | Toggle Quick Diff |
Ctrl Shift Y | Convert to lowercase |
Ctrl Shift X | Convert to uppercase |
Java editing | |
Alt Shift U | Remove occurrence annotations (Notasyonları kaldır) |
Ctrl 1 | Quick fix (works even when there are no errors |
Ctrl Shift M | Add import (Namespaceleri ekle) |
Ctrl Shift F | Reformat (Yeniden formatla) |
Ctrl Shift O | Organize Imports (Kullanılmayan namespaceleri kaldır, gerekli olanları ekle) |
Ctrl / | Comment |
Ctrl \ | UnComment |
Ctrl Shift Space | Parameter hints (Değişkenin alabileceği değerler) |
Ctrl | Hyperlink identifier |
Ctrl I | Correct indentation |
Shift Space | Incremental content assist |
Debugger | |
F5 | Step into (Methodun içine girerek devam et) |
F6 | Step over (Satır satır devam et) |
F7 | Run to return (Sonraki breakpoint'e git) |
F8 | Resume (Devam et) |
F9 | Relaunch last (Sonuncuyu yeniden aç) |
F11 | Run/debug last |
Ctrl F11 | Run (Çalıştır) |
Ctrl Shift B | Toggle breakpoint (Breakpoint koy/kaldır) |
Ctrl D | Display |
Ctrl Q | Inspect (İncele) |
Ctrl R | Run to line (Satıra git) |
Ctrl U | Run snippet |
Refactoring | |
Alt T | Refactoring menu |
Ctrl Shift Z | Undo refactor |
Ctrl Shift Y | Redo refactor |
Alt Shift R | Rename |
Alt Shift V | Move |
Alt Shift I | Inline |
Alt Shift M | Extract method (Method oluştur) |
Alt Shift L | Extract local (Field oluştur) |
Alt Shift C | Change method signature (Method dönüş tipini değiştir) |
Misc | |
F5 | Refresh |
F1 | Infopop |
F2 | Show resizeable hover |
5 Ağustos 2011 Cuma
The connection to adb is down, and a severe error has occured hatası
[2011-08-05 13:26:44 - Quadro_Android] Android Launch!
[2011-08-05 13:26:44 - Quadro_Android] The connection to adb is down, and a severe error has occured.
[2011-08-05 13:26:44 - Quadro_Android] You must restart adb and Eclipse.
[2011-08-05 13:26:44 - Quadro_Android] Please ensure that adb is correctly located at 'C:\PROGRA~1\Android\android-sdk\platform-tools\adb.exe' and can be executed.
Hatayı gidermek için aşağıdaki adımları izleyin
1. Eclipse'i kapatın
2. Command prompt'ta platform-tools adresine gidin (bendeki bu şekilde ama sizdeki farklı olabilir C:\Program Files\Android\android-sdk\platform-tools>)
3. adb kill-server yazın
4. adb start-server yazın
5. Eclipse'i yeniden başlatın.
[2011-08-05 13:26:44 - Quadro_Android] The connection to adb is down, and a severe error has occured.
[2011-08-05 13:26:44 - Quadro_Android] You must restart adb and Eclipse.
[2011-08-05 13:26:44 - Quadro_Android] Please ensure that adb is correctly located at 'C:\PROGRA~1\Android\android-sdk\platform-tools\adb.exe' and can be executed.
Hatayı gidermek için aşağıdaki adımları izleyin
1. Eclipse'i kapatın
2. Command prompt'ta platform-tools adresine gidin (bendeki bu şekilde ama sizdeki farklı olabilir C:\Program Files\Android\android-sdk\platform-tools>)
3. adb kill-server yazın
4. adb start-server yazın
5. Eclipse'i yeniden başlatın.
4 Ağustos 2011 Perşembe
java.lang.SecurityException: Permission Denial
ActivityManager: java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.quadro.main/.Main } from null (pid=3080, uid=2000) not exported from uid 10066
Bu hata emulator'de karşınıza çıkmayıp, cihazda debug ederken gelebilir. O yüzden cihazla alakalı bir problem diye düşünebilirsiniz, ancak hatanın nedeni "bir activity'nin androidmanifest.xml dosyasında 2 kez tanımlanmasından kaynaklanmaktadır". Entry point activity'nizin, altta tekrar diğer activityler ile birlikte tanımlandırılmış olup olmadığını kontrol edin.
Bu hata emulator'de karşınıza çıkmayıp, cihazda debug ederken gelebilir. O yüzden cihazla alakalı bir problem diye düşünebilirsiniz, ancak hatanın nedeni "bir activity'nin androidmanifest.xml dosyasında 2 kez tanımlanmasından kaynaklanmaktadır". Entry point activity'nizin, altta tekrar diğer activityler ile birlikte tanımlandırılmış olup olmadığını kontrol edin.
Kaydol:
Kayıtlar (Atom)