Great Android code snippets

I’ve been developing a new Android App over the last month, and found/learnt several new ways to do things, mostly from hacking other peoples ideas and code (but isn’t that what everyone does? why reinvent the wheel!) In no particular order…

Loading up PLIST files into Android from assets folder

Using xmlwise, which has a specific ‘plist’ class amongst other useful stuff, loading plist dicts and arrays into a Java map is simple.

public TreeMap getData(Context context) throws XmlParseException, IOException {
    TreeMap<String, Object> tMap = null;
    try {
        //To access files stored in Asset folder you need AssetManager
        AssetManager assetManager = context.getResources().getAssets();
        InputStream inputStream = null;
        BufferedReader br = null;
        try {
           inputStream = assetManager.open("myfile.plist");
           br = new BufferedReader(new InputStreamReader(inputStream));
           StringBuilder sb = new StringBuilder();
           String line;
           while ((line = br.readLine()) != null) {
               sb.append(line);
           }
           tMap = new TreeMap(Plist.fromXml(sb.toString()));
        } catch (IOException e) {
           e.printStackTrace();
        } finally {
           br.close();
        }
    } catch (Exception ex) {
        ex.printStackTrace();
    }
    return tMap;
}

Enabling touch and pinch zoom on images in ViewPager

Using TouchImageView from Mike Ortiz, I can overload a standard ImageView and set it as a Drawable to add to the ViewPager adapter. It’s really cool, and by a simple hack of Mike’s code it’s easy to tweak the zoom levels. Double-tap and pinch-control are both implemented and it seems fast and robust. Kudos to Mike.

Adding an Android splash screen, easily…

OK, so not everyone wants one, nor every app need them, but the simplicity of the app I’ve been working on needed some branding to remind the users who brought them this (free) app. First I created an XML resource for the layout (useful if you want a complex splash screen).

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="org.my.package">

    <ImageView
        android:id="@+id/mylogo_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@null"
        android:layout_gravity="center"
        android:src="@drawable/my_logo" />

</LinearLayout>

Then I created a simple class to start on launch, which included a runnable to redirect after short period of time to the main activity.

public class Splash extends Activity {

    //Duration of wait - 1000ms = 1second
    private final int SPLASH_DISPLAY_LENGTH = 1200;

    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        //This line is useful if using action bar etc. 
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.splash);
        
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                Intent mainIntent = new Intent(Splash.this, MainActivity.class);
                Splash.this.startActivity(mainIntent);
                Splash.this.finish();
            }
        }, SPLASH_DISPLAY_LENGTH);
    }
}

Finally, adding

android:theme="@android:style/Theme.NoTitleBar.Fullscreen"

to the android manifest gets rid of the title bar. Haven’t worked out if this AND

requestWindowFeature(Window.FEATURE_NO_TITLE);

(in the Splash class above) are necessary together or if one will override the other.

Pedders Way Ultra 7

Although I’ve been back into the running since early mid-October, I’ve only been doing a few hour-long sessions around town each week, and one longer (1:47) off-road run which included Brandon Parkrun. Yesterday I went to the start of the Pedders Way to see what it was like (Ultra training session 7). Having signed up for this Ultra distance run a while ago, I thought I should check out the route a bit more, and get more used to off-road stuff. See Strava include below…

Starts off in a wee car park near Knettishall, and follows lovely leaf-strewn trails northwards. Can be a bit narrow in some places so potential ankle-twisting, but on the whole easy to follow and run. There’s a stretch of boardwalk near Brettenham that skirts the river, which can be slippery and also flooded (I’ve been caught out by this in the past).

Only downer!? Bastards fly-tipping near the West Harling Road. Rubbish everywhere. Also smells of pigs LOTS throughout this whole area, but then at least it’s semi-natural.

So – I’ve managed to run a paltry 8% of the total run (but did have to run back to where I started, and only had an hour…).

Java: Hibernate and JUnit

I’ve just been refreshing my [lack of] knowledge of Hibernate and JUnit. BTO had some poor experiences with Hibernate (through some tendered out code) and never really seemed to need JUnit.

Hibernate

I can see the attraction and time saving of Hibernate for new projects with bespoke databases. But, for legacy projects, which are hooking into existing, extensive databases with their own dependancies, I think this would cause just as many issues, slowing down initial project development – also BTO projects were costed as cheaply as possible, with little thought to funding database requirements (although the DBA was changing that in the right direction).

JUnit

Again, BTO never really felt it needed this. As a small team (of discrete/disparate developers), it seemed overkill. I can see the advantage if the developers aren’t familiar with the data being returned, so that they can get direction to populate the assertEquals and verify results.

assertEquals("10 x 2 must be 20", 20, myTesterMethod(10, 2));

Both things for me to research further…

LG and Netflix fix

Trying to watch Netflix on an LG Smart TV.

Something that’s been bugging us for ages, and there seems no 100% fix for everyone, but I found some ‘sparse’ info online and thought I should record it for myself if not for others…

Netflix works fine on a Android or Apple tablet, no buffering. As soon as we relax in the evening to watch House of Cards or anything else that is currently ‘popular’ using the TV, Netflix plays for about 10 mins and then hangs – buffer spinner reaches 25% and then craps out to exit. Broadband speed is always fine, using speedof.me in the TV web browser.

Lots of posts about factory reset, deactivate/reactivate Netflix with bizarre arrow-key permutations, broadband speed check etc. etc. All to no avail.

But, this seems to be working currently (from Tripp2Go on CNET)…

Instead of automatically selecting your network from a drop down list or a wired connection, connect manually by typing in your IP, Subnet and Gateway numbers, and a specific DNS number.
Step by Step: on your TV go to

  • Settings
  • Network
  • Network Status – Record the IP address, Subnet mask and Gateway numbers, you’ll be entering these again manually

Then go back out to

  • Network
  • Network Connections
  • Start Connection
  • Other Network List
  • Manual setup
  • Add your IP, Subnet and Gateway numbers. Then enter 4.2.2.2 as the DNS number
  • Finish

Try using Netflix – seems to have improved things for me – if this post hasn’t been deleted then it’s continuing to work.

Isn’t the net great, when it works 😉

Outlaw Triathlon 2

OK, the Outlaw is done, and yes, it did start pissing down for the last 90mins of the bike (Met Office got it spot on). Splits below. Nutrition worked fine. Took too long in transitions (might have gone sub-11 if I’d done my 2011 transitions!), but wanted to be comfortable on bike and run.

  Swim T1 Bike T2 Run Total
2011 0:59:01 0:04:28 6:08:05 0:04:53 4:32:19 11:47:05
2015 0:58:24 0:07:50 5:49:52 0:08:43 4:07:03 11:11:53

Outlaw Splits

Happy with results – was aiming for A) sub-11 hours, B) beat 11:18 (Challenge Roth 2010 time) or C) beat previous Outlaw time (11:47, 2011) – smashed C and managed B. Next time… A.

Really felt for the slower competitors (hark at me!) as they were in the rain for lots of their bike splits and all of the run, with the rain increasing as the afternoon turned into evening and beyond. This meant the tow-path along the Trent became one big puddle in places – not fun for tired body and legs! Kudos to those guys…

Outlaw Triathlon

Outlaw Triathlon this coming Sunday, heading to Nottingham tomorrow. Think I’m ready, too late if not. Biggest concern is the weather, as I’m not keen on cycling in the rain (although had plenty of practice recently). Met Office forecast for Nottingham Race Course below:

Forecast for Notts Race Course for Sun 26th July 2015

Forecast for Notts Race Course for Sun 26th July 2015


Last time I did 11hrs 47min 05secs (splits below), so hoping to beat that whatever the weather throws at me. I’m hoping that coach Jason B (http://www.performancecoaching.me/) continues to have a positive impact!
Swim:0:59:01
Bike:6:08:05
Run: 4:32:19
Using same bike as last time, but deciding to do a complete change in T1 and T2 into most comfortable bike and run kit, as hopefully being comfortable will help me flow better? Will post report next week…