My Mobile Notes

Some useful tips & tricks for Android & iOS Programming, and Mobile Life

  • Contact

    Mustafa Ferhan Akman, Android Evangelist, Android & iOS Developer, Author, Blogger, Speaker

  • Subscribe

Garip bir string.xml bug’ı

Posted by Mustafa Ferhan Akman on April 12th, 2014

Geliştirdiğim viagra online pharmacy bir projede,

Posted in General | No Comments »

SourceTree aracını herhangi bir Git reposu ile kullanmak

Posted by Mustafa Ferhan Akman on March 19th, 2014

SourceTree mac üzerinde kullandığım en güzel git ve mercurial aracı. Command-line kullanmaya devam etmek istiyorsanız yazının geri kalanını okumak zorunda değilsiniz. Fakat ben basit işlerimi UI’dan halletmeyi seviyorum.

SourceTree resmi olarak bitbucket, github, stash’ı destekliyor. Fakat mesela GitLab’ı eklemek istediğinizde cialis online cheap çeşitli gıcıklıklar yapabiliyor. Bitbucket ve github repolarında olduğu gibi direkt olarak eklenemiyor  ama aşağıdaki adımlarla problem çözülüyor.

1- gitlab’da mevcut olan git repo’yu command-line’dan çekiyoruz.

2- SourTree’de    Add Repo -> Add Working Copy -> projemizin git klasörünü seçiyoruz

3- Eklediğimiz repo’yu açıp,

Settings -> Edit Config File  dedikten gitlab’daki user’ımızı eklememiz gerekiyor. (bazı durumlarda)

[user]
name = Mustafa Ferhan Akman
email = mustafa.ferhan.akman@eba.gov.tr

gibi. Bu kadar.

Tags: , , , ,
Posted in General | No Comments »

Android DebugLog [GitHub]

Posted by Mustafa Ferhan Akman on March 5th, 2014

Yakın zamanda MFCalendarView isimli kütüphaneyi github’da paylaştığımı aktarmıştım. Şimdi, yaklaşık 2 yıldır kullandığım, çok işime yarayan ve geçmişte yaşadığım tecrübelere dayanarak hazırladığım bir kütüphane var: DebugLog.

Neden DebugLog?

DebugLog kütüphanesinin 2 temel amacı var;

  1. Uygulama geliştirilirken DebugLog aracılığı ile yazdığımız tüm logları App release edildiğimde otomatik olarak kapatmak.
  2. DDMS’e otomatik olarak daha anlaşılabilir log kayıtları düşmek.

DebugLog ile uygulama geliştirirken herhangi bir log düşmek için sadece mesajınızı yazmanız yeterli;

<br />
 <a href="http://www.pangeagiving.org/cheap/">http://pangeagiving.org/cheap/</a> DebugLog.e(&quot;message&quot;);<br />

Mesela, aşağıdaki gibi myFunc() isimli fonksiyonun içerisinde DebugLog’u kullanırsanız,

<br />
void myFunc(){<br />
   DebugLog.e(&quot;simple log from myFunc()&quot;);<br />
}<br />

DebugLog aşağıdaki gibi, Tag kısmına log’un yazıldğı class ismini, log mesajının başına parantez içerisinde fonksiyonun ismini otomatik olarak yazar.

DebugLog output

Veya örnek olarak başka bir fonksiyonun içerisindeyken;

DebugLog output

android.util.Log‘un desteklediği tüm formatlarda DebugLog’u kullanabilirsiniz:

<br />
DebugLog.e(&quot;e log&quot;);<br />
DebugLog.i(&quot;i log&quot;);<br />
DebugLog.d(&quot;d log&quot;);<br />
DebugLog.v(&quot;v log&quot;);<br />
DebugLog.w(&quot;w log&quot;);<br />
DebugLog.wtf(&quot;wtf log&quot;);</p>
<p>

Kaynak kodlarına ve örnek uygulamaya https://github.com/MustafaFerhan/DebugLog adresinden ulaşabilirsiniz.

Tags: , , , , , ,
Posted in Android | No Comments »

MFCalendarView – Android Calendar

Posted by Mustafa Ferhan Akman on February 21st, 2014

MFCalendarView isimli ilk opensource çalışmamı GitHub’daki hesabımdan paylaştım.

Neden?

  • Android’in native CalendarView’inda multiple selection özelliği olmaması. Ve event base herhangi bir takvim için eksik kalması
  • Hali hazırda yayınlanmış Square’in takvim uygulaması vardı. Fakat kütüphanenin performans probleminin  olması, kütüphaneyi UI’da create ederken en baştan “şu tarihler arasında takvimi oluştur” denme zorunluluğu (yani  ocak-şubat-mart ayını görüntüle derseniz, sonradan diğer ayları görüntüleyemiyorsunuz. Çok fazla ay gösteririseniz performans problemi oluyor)
  • Yine Square’in sadece yukarı-aşağı scroll’u destekliyor olması geliştirdiğim uygulamada UX açısından kötü bir deneyime sebep olması
  • Başka open source ve paralı kütüphanelerden bu tarz ihtiyaçlarımı karşılayamamam.

gibi sebeplerden dolayı MFCalendarView ortaya cialis online cheap çıktı.

MFCalendarView

Kullanımı oldukça basit;

Layout XMML’inize ekleyip;

<br />
&lt;com.mustafaferhan.MFCalendarView<br />
    android:id=&quot;@+id/mFCalendarView&quot;<br />
    android:layout_width=&quot;wrap_content&quot;<br />
    android:layout_height=&quot;wrap_content&quot; &gt;<br />
&lt;/com.mustafaferhan.MFCalendarView&gt;<br />

Takvimde herhangi event atayacağımız zaman;

<br />
 ArrayList&lt;String&gt; eventDays = new ArrayList&lt;String&gt;();<br />
 eventDays.add(&quot;2014-02-25&quot;);<br />
 eventDays.add(Util.getCurrentDate());</p>
<p> mf.setEvents(eventDays);<br />

MFCalendarView’in kendi listenerları ile tarih değiştiğinde ya da görüntülenen ay değiştiğinde listenerlardan ilgili bilgiyi okuyabilirsiniz.

<br />
mf = (MFCalendarView) findViewById(R.id.mFCalendarView);<br />
mf.setOnCalendarViewListener(new onMFCalendarViewListener() {</p>
<p>    @Override<br />
        public void onDisplayedMonthChanged(int month, int year, String monthStr) {<br />
                //codes<br />
            }</p>
<p>            @Override<br />
            public void onDateChanged(String date) {<br />
                //codes<br />
            }<br />
    });</p>
<p>

Ekran görüntüsünde nokta olarak gözüken event belirteçleri aslında birer icondur. dot.png dosyasını değiştirerek orada herhangi bir belirteç kullanabilirsiniz.

Tags: , , , , , , , ,
Posted in Android | No Comments »

Android SharedPreferences yazma hızı problemi

Posted by Mustafa Ferhan Akman on February 12th, 2014

SharedPreferences’e bir datayı yazmaya çalışıyor ve arkasından hemen okumaya çalışırsanız, Android o sıra IO yaptığı için buy amoxil online yazdığınız kayıt hiç yokmuş gibi davranıyor.

Aslına daha öncede SharedPreferences ile benzer bir problemle karşılaşmıştım fakat sanırım problemin IO’dan kaynaklandığını çözememiştim.

Mesela, bu gece karşılaştığım bir durumda; fragment’imde kullanıcının bir edittext’e mail adresini yazıyor ve ben bunu SharedPreferences’da saklıyorum. aşağıdaki gibi;

prefs.edit().putString(KEY_EMAIL, toStr(etEmail)).commit(); 

Ve hemen ardından o fragment’ı popBackStack() edip, yeni açılan fragmentta generic bir method’dan kaydedilmiş olan maili okuyorum. Kodu debugger ile debug ettiğimde, SharedPreferences üzerinden ilgili mail adresi geliyor. Yani herhangi bir problem gözükmüyor. Fakat app’i run edip gerçekten bir kullanıcı gibi kullanmaya çalıştığımda SharedPreferences bana cevap veremiyor :)

Kısa yoldan çözüm olarak, kullanıcının uygulamada donma hissini anlamayacağı kadar ama android işletim sisteminin IO yapacak fırsatı bulabileceği zaman tanıdım.

<br />
try{</p>
<p>  Thread.sleep(100);<br />
  getActivity().getFragmentManager().popBackStack();</p>
<p>}catch(InterruptedException e){ /* code */ }<br />

Ben gece gece kafadan 100 milisaniye verdim. Kalite açısından daha düşük Android cihazları hesaba katarak belki biraz daha uzun zaman vermekte fayda olabilir.

Posted in Android | No Comments »

Android Fragment Overlap

Posted by Mustafa Ferhan Akman on January 27th, 2014

Bir uygulamamda yalnızca 1 activity generic viagra 100mg olmasına rağmen 30′a yakın fragment var (:

Hal böyle olunca, bazı zamanlar fragmentlar http://mwcdc.org/buy-brand-viagra iç içe, bazen de replace edilerek üzerine açmam gerekti. Fakat bir durumda, fazlaca fragment açıp, geri tuşu ile geriye gittiğimde daha önce açılmış 2 fragment’ın üst üste bindiğini, karıştığını gördüm.

Araştırdığımda aşağıda örnekte olduğu gibi başkalarıda bu tarz problemlerle karışılaşmışlar fakat bu fragmentların karışma problemi farklı farklı durumlarda ortaya çıktığı için benim problemimin kaynağına benzer bir çözüm bulamadım.

fragmentoverlap

Benim case’imde,

bir fragment’ı ilk başta aşağıdaki gibi çağırıp,

addNewFragment( new SearchFragment(), &amp;quot;sf&amp;quot;, false);

sonra, app’in ilerleyen bölümlerinde bir tanesinde aynı fragment’ı,

addNewFragment( new SearchFragment(), &amp;quot;sf&amp;quot;, true); 

şeklinde çağırmam oluyordu.

&lt;br /&gt;<br />
	void addNewFragment(Fragment fragment, String tag, boolean backstack){&lt;/p&gt;<br />
&lt;p&gt;		ft = getFragmentManager().beginTransaction();&lt;br /&gt;<br />
		ft.setTransition(FragmentTransaction.TRANSIT_NONE);&lt;br /&gt;<br />
		ft.replace(R.id.fragment_placeholder, fragment, tag );&lt;br /&gt;<br />
		if (backstack) {&lt;br /&gt;<br />
		 ft.addToBackStack(tag);&lt;br /&gt;<br />
		}&lt;/p&gt;<br />
&lt;p&gt;		ft.commit();&lt;br /&gt;<br />
	}&lt;br /&gt;<br />

Aynı fragment’ı her zaman aynı şekilde çağırdığımda problem basit yoldan düzeldi.

Posted in Android | No Comments »

Android Developer Days 2014 – Sizi Çağırıyor

Posted by Mustafa Ferhan Akman on January 27th, 2014

ADD 2 yıldır Türkiye’de düzenlenen, benim katıldıklarımın içeriisnde içeriği en geniş ve kaliteli android http://dailykhabarnama.com/buy/ geliştirme etkinliği.

Ankara ODTÜ’de, etkinlik katılım ücretinin olmadığı, Yerli ve yabancı onlarca Android geliştiricinin bir arada bulunduğu böyle bir etkinliği kaçırmamanızı tavsiye ederim.

Ayrıntılı bilgiyi buradan alabilirsiniz.

http://www.androiddeveloperdays.com/tr/

 

add 2013
Geçen yıl benimde “Permission Almak ya da Almamak. İşte Bütün Mesele Bu!” isimli yarım saatlik bir konuşmam olmuştu.

Posted in Android, General | No Comments »

Android Eclipse Problemi: Errors running builder ‘Android Pre Compiler’ on project – java.lang.NullPointerException

Posted by Mustafa Ferhan Akman on December 29th, 2013

git üzerinden çektiğim projeyi Eclipse ADT’ye import ettikten sonra sebebi belli olmayan bir hata almaya başladım.

‘Building workspace’ has encountered a problem
Errors occurred during the build.
Errors running builder ‘Android Pre Compiler’ on project ‘XXX’
java.lang.NullPointerException

Biraz araştırdıktan sonra problemin .git ve .svn dosyalarından kaynaklandığı ortaya çıktı.

Eclipse’de Projenizin properties‘ine girdikten sonra,
Resources -> Resource
Add  -> “Exclude all”, “files and folders”, “all children” işaretleyip, text alanına .svn ya da .git yazıyoruz
Eclipse’i tekrar başlatıyoruz

eclipse-resource

Posted in Android | No Comments »

Android CalendarView’in geç yüklenmesi..

Posted by Mustafa Ferhan Akman on December 20th, 2013

Geçtiğimiz günlerde CalendarView ile uğraşırken, activity’min içerisinde buy viagra 25mg yer alan CalendarView’in olduğu bölümü mimarisel olarak fragmen içerisine almam gerekti.

Fragment içerisine aldığımda, normalde 0.2saniyede açılan uygulamam yaklaşık 4-5 saniyede açılmaya başlamıştı:) Bir kaç dakika sonra sebebini bulduğumda ilginç bir sonuç çıktı;

XML içerisinde tanımladığın CalendarView’in direkt kendisi ya da daha sonra layout içerisinde kullanacağın fragment’ın mutlaka ve mutlaka match_parent olması gerekiyormuş.

Not: Stakoverflow’daki bir commentte Android ekibinden birisi henüz sebebini bilmediklerini yazmışlar:)


< CalendarView android:id="@+id/cv_dialog_filter_date"
android:layout_width="match_parent"
android:layout_height="match_parent" />

Posted in Android | No Comments »

Google Maps API v2 rev1′de FragmentActivity Bug’

Posted by Mustafa Ferhan Akman on May 10th, 2013

Google MAPS API ile uğraşırken, bir önceki postta paylaştığım gibi, API LEVEL 11 altında çalışabilmek için kullandığım FragmentActivity ve getSupportFragmentManager() sonrasında sürekli olarak aşağıdaki hatayı almaya başladım.

 

03-18 15:34:45.939: E/AndroidRuntime(20704): FATAL EXCEPTION: main

03-18 15:34:45.939: E/AndroidRuntime(20704): java.lang.RuntimeException: Unable to start activity ComponentInfo{graffit.main/graffit.main.GraffSearch}: android.view.InflateException: Binary XML file line #9: Error inflating class fragment

03-18 15:34:45.939: E/AndroidRuntime(20704): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1696)

03-18 15:34:45.939: E/AndroidRuntime(20704): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1716)

03-18 15:34:45.939: E/AndroidRuntime(20704): at android.app.ActivityThread.access$1500(ActivityThread.java:124)

03-18 15:34:45.939: E/AndroidRuntime(20704): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:968)

03-18 15:34:45.939: E/AndroidRuntime(20704): at android.os.Handler.dispatchMessage(Handler.java:99)

03-18 15:34:45.939: E/AndroidRuntime(20704): at android.os.Looper.loop(Looper.java:130)

03-18 15:34:45.939: E/AndroidRuntime(20704): at android.app.ActivityThread.main(ActivityThread.java:3806)

03-18 15:34:45.939: E/AndroidRuntime(20704): at java.lang.reflect.Method.invokeNative(Native Method)

03-18 15:34:45.939: E/AndroidRuntime(20704): at java.lang.reflect.Method.invoke(Method.java:507)

03-18 15:34:45.939: E/AndroidRuntime(20704): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)

03-18 15:34:45.939: E/AndroidRuntime(20704): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)

03-18 15:34:45.939: E/AndroidRuntime(20704): at dalvik.system.NativeStart.main(Native Method)

03-18 15:34:45.939: E/AndroidRuntime(20704): Caused by: android.view.InflateException: Binary XML file line #9: Error inflating class fragment

03-18 15:34:45.939: E/AndroidRuntime(20704): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:587)

03-18 15:34:45.939: E/AndroidRuntime(20704): at android.view.LayoutInflater.rInflate(LayoutInflater.java:623)

03-18 15:34:45.939: E/AndroidRuntime(20704): at android.view.LayoutInflater.inflate(LayoutInflater.java:408)

03-18 15:34:45.939: E/AndroidRuntime(20704): at android.view.LayoutInflater.inflate(LayoutInflater.java:320)

03-18 15:34:45.939: E/AndroidRuntime(20704): at android.view.LayoutInflater.inflate(LayoutInflater.java:276)

03-18 15:34:45.939: E/AndroidRuntime(20704): at android.support.v4.app.FragmentActivity.setContentView(FragmentActivity.java:421)

03-18 15:34:45.939: E/AndroidRuntime(20704): at graffit.main.GraffSearch.onCreate(GraffSearch.java:16)

03-18 15:34:45.939: E/AndroidRuntime(20704): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)

03-18 15:34:45.939: E/AndroidRuntime(20704): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1660)

03-18 15:34:45.939: E/AndroidRuntime(20704): … 11 more

03-18 15:34:45.939: E/AndroidRuntime(20704): Caused by: android.content.res.Resources$NotFoundException: Resource ID #0x7f050068 type #0×12 is not valid

03-18 15:34:45.939: E/AndroidRuntime(20704): at android.content.res.Resources.loadXmlResourceParser(Resources.java:1912)

03-18 15:34:45.939: E/AndroidRuntime(20704): at android.content.res.Resources.getLayout(Resources.java:746)

03-18 15:34:45.939: E/AndroidRuntime(20704): at android.view.LayoutInflater.inflate(LayoutInflater.java:318)

03-18 15:34:45.939: E/AndroidRuntime(20704): at graffit.main.SearchListFrag.onCreateView(SearchListFrag.java:28)

03-18 15:34:45.939: E/AndroidRuntime(20704): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:845)

03-18 15:34:45.939: E/AndroidRuntime(20704): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1058)

03-18 15:34:45.939: E/AndroidRuntime(20704): at android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1156)

03-18 15:34:45.939: E/AndroidRuntime(20704): at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:660)

03-18 15:34:45.939: E/AndroidRuntime(20704): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:563)

03-18 15:34:45.939: E/AndroidRuntime(20704): … 19 more

Yarım günlük çabam sonucunda malesef herhangi bir sonuca ulaşamadım. Uygulamayı build ederken, son sdk olan Android 4.2.2 Google Maps API rev1 ile build ediyordum.

Çözüm: Benim Hatam, problemi tamamen kendimde aramamdı. Halbuki aslında bu bir bugmış. Malesef, google aramalarımda da bunun bir bug olduğuna dair bir bilgiye ulaşamamıştım fakat Eclipse’den güncellemelere baktığımda tüm toollarım güncelken Google Maps API rev2 update’i olduğunu gördüm.Update ettim ve problemim Google Maps API rev2′de düzeldi.

Tags: , , , ,
Posted in Android | No Comments »

 
canakkale canakkale canakkale truva search canakkale vergi mevzuati bagimsiz denetim bagimsiz denetim web security ozurluler bilisim teknoloji sgk bagimsiz denetim bagimsiz denetim