Skip to main content

Android Session for beginners

Some time back, I took a session on 'Getting Started with Android' in my previous company.

When we are getting started with android, there's so much to grasp. There are so many different components and it's very important to introduce each one of them to just the right depth, otherwise the audience may get lost in the middle. So, it was quite a challenge to prepare the material. 

I decided to introduce the following components in the session : 

  • Activities
  • Intents
  • Services
  • Broadcast Receiver
  • Recycler View
  • Storage in Android
  • Async Task
  • floating action button

And this repository contains the demo code that I used in my session. Something had to be done to make it easy for the audience to take all this, so this is the approach that I followed : 


The repository contains different branches, each corresponding to a particular functionality. So, if you want to see the code changes for a particular one, you can just see the diff between this branch and the its previous branch.

Here's the order in which I have prepared the branches :

  1. helloworld : basic hello world project
  1. listview : added a simple listview
  1. addnewcontacts : added a floating action button to add a new contact to the list
  1. addeddatabase : integrated SQLite database, so that the contacts storage is persistent.
  1. syncusingasync : syncing the contacts from the server using AsyncTask
  1. syncusingservice : instead of asynctask, syncing with the server using an IntentService.

If you want to see how to move from async task to an intentservice, you can do :
git diff syncusingasync..syncusingservice
IMO, people won't be bored if you are showing them real code in between your theory slides.
Cheers !

Comments

Popular posts from this blog

Android : AbsSavedState cannot be cast to $SavedState

Android AbsSavedState cannot be cast to <View>$SavedState I came across a strange crash today. This is the stacktrace : Fatal Exception: java.lang.ClassCastException: android.view.AbsSavedState$1 cannot be cast to android.widget.ScrollView$SavedState at android.widget.ScrollView.onRestoreInstanceState(ScrollView.java:1810) at android.view.View.dispatchRestoreInstanceState(View.java:14768) at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:3123) at android.view.View.restoreHierarchyState(View.java:14746) at android.support.v4.app.Fragment.restoreViewState(SourceFile:470) at android.support.v4.app.FragmentManagerImpl.moveToState(SourceFile:1326) at android.support.v4.app.FragmentManagerImpl.moveFragmentsToInvisible(SourceFile:2323) at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(SourceFile:2136) at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(SourceFile:2092)

Android Tip : Handling back button in Fragments

Android Tip : Handling hardware back button in Fragment and DialogFragment This post explains how to handle hardware back button in a Fragment OR DialogFragment . In DialogFragment, it’s quiet straight forward to achieve this. You’ve to get the dialog instance and set onKeyListener on it : if (getDialog() != null ) { getDialog().setOnKeyListener( new DialogInterface.OnKeyListener() { @Override public boolean onKey (DialogInterface dialog, int keyCode, KeyEvent event) { if (event.getAction() == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK) { Timber.i( "hardware back button pressed" ); } } }); } This can be done in the onViewCreated callback. For fragments, this method doesn’t work and fragments doesn’t have a direct callback to catch this event. So in this case, the approach that we follow is : You

DialogFragment : NullPointerException (support library)

Another weird crash this time ! Here’s the stack trace : Fatal Exception: java.lang.RuntimeException: Unable to start activity ComponentInfo{<activity.fully.qualified.path>}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.Dialog.setContentView(android.view.View)' on a null object reference at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2659) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2724) at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:4524) at android.app.ActivityThread.-wrap19(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1479) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6123) at java.lang.reflect.Method.invoke(Method.java) at com.android