Pages

.

Fixx SuperCross Cup 2015 Round 2: Glencullen


Long Story Short

  • Finished 84th/95,
  • Cumulative time was 43:59.
  • Lap times were 10:24, 10:27, 11:37 and 11:31,
  • Crashed on Lap 3,
  • Lapped on Lap 3,
  • I would've finished 15th/20 in the Women's race,
  • I would've finished 74th/77 in the A-race.

Strava

View the race on Strava: Fixx SuperCross Cup Round 2: Glencullen Golf Club B-Race. This crashing into other people is becoming a trend.

View the race on Strava Flybys: Fixx SuperCross Cup Round 2: Glencullen B-Race. I enabled;
  • Myself, sure why not,
  • Karl, who would finish third,
  • John, he was the highest placed Orwell rider on Strava, Barry K was not selectable,
  • Barry, we had a tiny battle.
The course segment:

Multimedia

Alek had his handlebar camera: 2015 FIXX Supercross / round 2 / Glencullen Golf Course / B race.

Sean Rowe has albums for the A-race, the B-race and Women's race,
Adrian McLeavey also has albums for the A-race, the B-race and Women's race.

Short Story Long

Build Up

I got back from a week on a Spring Core course in Poland. I've been trying to keep animal products out of my body. After watching scenes from Earthlings, animal exploitation not something I want to support anymore. From my experience, Poland specialise in putting animals, into everything. They'd probably make mortar out of eggs if it wasn't against EU building regulation 310-B-46.2. They settled for painting buildings egg shell instead. I had a good time and learned a lot about South American politics, Indian traditions and MicroServices.

Pre-Race

I checked my Instagram's Discover Feed as I was taking my first of three Bathroom visits. Cormac from Cycle Sierra Nevada, was liking pictures of a CX event in Norway. My feed was full of Edvald Boasson Hagen ripping it up on Norway's CX races. Norwegians love two things, cutting down trees and Eddie The Boss.

After I arrived, I would meet Lenny, from Boards.ie. He was sporting a snazzy new rear derailleur. Phoenix Park had claimed his previous one. This course would claim a few derailleurs. Lenny would be hoping for a "Buy two get one free" deal that afternoon. I would meet Daragh, also from Boards.ie, during the race. But as he made his introduction, I was looking like WWE's The Undertaker. My eyes rolled into my skull as I recovered from the hill run up after the bunker.

I lined up on the startline 1.2kg heavier than the previous week's race in Punchestown. 72kg Luke vs. a massive uphill slog, there would be only one victor this day. Still, I asked for no quarter and none was going to be given on this abandoned golf course. The sandy bunkers were going to be tricky. I was very nervous in the practice laps. especially the drop into the second one, which was ridable.

Courtesy of Fixx SuperCross Cup Facebook Page.

It was the first time that a women's specific race had been held. So getting to the venue early to get in at least three practice laps was my aim. Siobhan and Brianne were riding their first CX race. The sand pit provided the first bit of entertainment. Just like a Whale driven insane by the sonar of US Submarines patrolling the Pacific, Brianne ended up beached. Unable to unclip, Barry aided her. She lost a load of time there. The horrible part of the the lap was the attrition on the final uphill section of the lap. The women's faces on the second lap showed the toll it would be taking on me. Fran took out Orla at the top of this section. Orla would be in the wars again when she got trapped in the bluey-green netting. Robin Seymour was on hand to free her and repair the netting. There was a few more slow speed falls. I went back to my car with thirty minutes to go to prepare.

Race

The start procedure was a bit quiet, from the back of the grid. The race was hard. Really hard. I ran up the hill from the first bunker and was able to keep pace with the lads cycling. Every time I did run, my heart rate would spike to 184bpm. Which is my ticker's top end. Only once had my heart rate gone higher. I almost missed a hairpin when descending from Trevelez. I hit 195bpm as I rescued myself.

The running and high heartbeat was the CycloCross equivalent of Premature Ejaculation, as the next part of the lap demanded power and concentration. The off-camber 180º corner into the bunker requested that I focus on making the turn. There was a badly placed stake that was very close to my chosen exit line. It was just about not looking at the kneecap dislocating pole as I cornered. The first lap passed off without incident, well if you call being fourth last as "without incident".

Starting the second lap, I reflected that I loved the green area that comprised the start - finish complex, I enjoyed flowing through it. I bantered a guy on a Mountain Bike about having "CycloCrosser's Crack", the cycling version of "Builder's Bum". He was wearing baggy shorts and a tight jersey, think Gwen Stefani in "Hollaback Girl". I passed Barry, as he untangled the course tape from his bike. Barry quickly regained the place.

Towards the end of that second lap, I dug deep to power passed a Foyle rider on the final uphill section. I held him off until the sand pit. I entered it and heard someone shouting "He's on a great line, he's on a great line." I had a mare of an exit and I fell over. On my way down, I felt his wheel being swayed by my hip. I took him out. The photo was picked up by StickyBottle. It was my first time on there, hopefully not the last. I'm hoping for a Rowan-esque rise on that publication. Where he went from "Unidentified" to headlining their Season Ending A4 Results post.

It was the second race in a row that I had collided into another rider. I said sorry, in person and on Sean Rowe's picture. Conrad took it pretty well. He also wakes up slightly earlier than me, as I had some Facebook notification after my 06:45 alarm went off.

Courtesy of Sean Rowe.

The power required to complete the final uphill section without doing The Walk of Shame was fast deserting me. The second last lap, I had to run the second half of it. The last lap, I had to run it all. I was glad when the race was over.

Post-Race

Eamon, who discovered that I was not a figment of his imagination when I caused him to crash the previous race, was waiting at the finish line. We discussed the race. I wrapped up warm, enjoyed my complimentary Fixx coffee and watched the A-race from the side lines. Eric Phillipe and, debutante, Sean were the Orwell representatives. I noticed that Sean had a large brown mark on his kit. I wondered where he could've come off. Turns out he quickly discovered that CX is a full contact sport. He was on the receiving end of a Luke-ing from one of the series sponsors.

Courtesy of LuccaSports Race Report.

Meanwhile, Eric kicked some A-race ass. I noted how I should've been riding the bunkers. I was hitting them under braking. I should've been smashing into them. My legs were very drained for that evening and Monday.

When the results came out, I was very disappointed to be so far down the order. After the uphill slogs, I was happy that I pushed the guys in the shop for the 32T cassette. Anyone who says that "a 39x25 will get you over anything", needs to be locked up with the other wankers who say that "wheels are a better investment than a power meter" and "saddle bags have no place on a bike", so they can all have a big circlejerk.

What Was Learned

I felt that I lacked the power on the uphill sections, but I was very sound on the technical sections. I largely ignored this performance, as I put it down to a week of eating and drinking shit.
reade more... Résuméabuiyad

DCCX Kalas Classics Series 2015 Round 1: PunchesCross



Long Story Short

  • Targeted a Top 75 finish - turns out there was 75 starters.
  • Finished 59th
  • Lapped near the end of Lap 3.
  • Crashed on Lap 4.

Strava

View the ride on Strava DCCX Round 1: PunchesCross B Race 59/75. Only the one crash.
View the course segment Punchestown Lap - Punchestown lap

View the race replay on Strava FlyBy, I've enabled;
  • Myself, the star,
  • Richard - who finished fifth,
  • Barry - to view how close we were after our early skirmish,
  • Michael - highest placed Orwell rider.

Multimedia

Alek had his handle bar cam again. It's one of his better videos from an action perspective. He didn't have the greatest of starts but recovers with an impressive number of passes.
Sean Rowe was the photographer on the track. He published more than three hundred and thirty images from across the main events.

Short Story Long

So there I was, I looked at Jay, he looked back at me with is brown eyes. He had no idea what was going on inside my head. We were in McDonalds, the only open place in town, on the main street in Gliwice, Poland. I had not eaten a McDonalds' burger in 2015 (I've had a few BurgerKing and Mcflurrys). Now I was about to eat my second of the day. How did I get here? This is my story...

Build-up

I've had a busy few weeks since the Grange Castle CX race. My bike needed a service. It turns out my rear QR wasn't tight enough, and that was to blame for the gears shifting under load. This caused a broken chain one night when I was training with, among others, the DCCX organiser, Sean.

My car also needed an NCT and only needed a visual re-inspection. Not bad for ten years old. The lowest point was my fourteen year old dog, Kenny, needing to be put down. He was very sick and the vet said that he would have no quality of life. It was strange not to have him greet me as I got home to Galway. He had a great life and was on the verge of reeling back the years this summer, when my other dog, Sam, was in heat. He's buried in the flowerbed, outside my bedroom window, with my previous dog, Lass.

The highest point was experiencing Ireland beat Germany in the Aviva.

I had been working on my weaknesses from the previous race, weak core, run-ups and sprinting out of corners. The latest Thursday night session with Sean was very informative, we were concentrating on riding a U-shaped track, where the first part was downhill and the exit was uphill. I may as well have been using a laser pointer for all the good my front light was. I left the session having learned some things, but a bit disheartened. The next evening I put in a solid hour in the park along the Dodder. I did a lot of these U-shaped off camber corners.

Pre-Race

I woke very early on Sunday morning, I had everything ready to go from the previous day. My only concerns were performance anxiety, eating a bowl of Almond Milk and Maple Syrup Porridge and stretching.

I arrived well before my target of 10am. I used this time to sign on and get my number. This race would be marred by these numbers. The toilets were a bit of a ride away from the course, couple this with getting out of and back into a skinsuit and you have a long time to allocate to a bathroom break.
I ended up doing three laps of the course, on Alek's advice. The first lap, I was very scared of the sharp descents after the dismount points. On the second lap, I took my time to remount before descending them and on the third lap I was very comfortable. I should've paid attention to the surface at the foot of the descents, something I rectify in future.

The grass was longer than Grange Castle, but nothing that troubled the rear derailleur's jockey wheels. The course contained a very bumpy section where the Rushes had been cut. The run-up was grand the first two times, but the third time, I was goosed. I had to stall for a breather as my eyes were rolling up into my skull and my lower back was feeling weak.

I didn't ride the step-up or the first clay ascent in my practice laps. It was possible to ride the clay ascent using the left side of the path, as it wasn't obstructed by a tree root. One of the racers moved some twigs to clear the left side of the step-up, so now it could be ridden. The organisers were baffled as to the identity the assailant, who the media have dubbed "The PunchesCross Lumberjack". Although posters on various internet forums claim to be this mysterious person, no disqualifications have been made. The hunt continues...

Pinning on the number was a disaster, but I got it sorted. I lent my pump to Alek and went to the bathroom before going to the startline to properly sort out the number. There was a large Orwell contingent on the grid, most of us in our new Skinsuits with new club sponsor Scott on them. Scott have been pumping a lot of money back into the sport and it's good to be associated with them. We had a few people making their cross debut too. John tried to banter me about consuming a caffeine gel before the race, but I wasn't having any of it.

I had already decided on 40psi for the tyres. With the course having nettles and other plants, I decided to use leg warmers. I went with my trusty Adidas gloves, that my mother has sown up in a few places, I didn't want a repeat of the chaffing on my hand from the Grange Castle race. I employed an Aldi sleeveless base layer under the skinsuit. There wasn't any pockets, so I was using my saddle bag to hold only my keys. I would have offered to hold other people's keys too, but I had to leave straight after the race.

The Women and B-Racers moved to the grid at the bottom of the hill. The orgaisers told everyone to ensure you had the number on your right shoulder. This caught lots of people off-guard. I was the only person around, when I was getting my number, so I had the time to double check that the guy said "on the right shoulder". The rider in front of me had his number on this back pockets. When the 30-second call was made, I setup my pedal for entry and opted for the 36-32, my position on the grid and the hill dictated that gearing choice. With ten seconds to go, I got onto the saddle and my tippy toe.

Race

Lap 1

I waited for the people in front of me to move. My start wasn't great, I was near the back of the grid and I couldn't keep pace with most of the riders beside me. This wan't a massive problem, as there was a big queue at the first obstical. I slowed to allow the crowd to pass. This allowed the legs to adjust to the effort, as I had been standing around for the previous thirty minutes. As I rode up the other side of the bank, I was back onto the group. I noticed John had a problem, which allowed me to pass him.

A little gap opened in front of me, which I let happen. This allowed me to ride up the first proper vertical ramp. Using the left side, I passed a guy who was clipping in. After that descent it lead in to the second vertical ramp. This was not ridable. I noticed I was dismounting later than my immediate competitors. I used all my David Millar power to fire the bike vertically upwards. My next step was to launch off my ankle. I was at the top with three steps.

I was back on the bike and held position, behind Barry until I attacked him before the first gravel section. Barry passed me again on the run up. There was lots of encouragement from the people on this climb. There was a mother and two kids on the final turn shouting "Go Orwell". Barry put a decent bit of time into me on the climb back to the start finish line.

Lap 2

I could hear Sean on the mic cheering me on. A guy on the first turn cheered Barry on. I was right on his wheel again now. I looked back I was about fourth last. There was a hard-charging John steaming towards us. I stayed behind Barry for a few more turns. John caught up and inquired about how my gels were working out for me. We both passed Barry. With John powering towards the horizon. My next pass was a guy in a blue jersey. He slowed too much going into an off-camber corner and he was slow coming out of it. I had the gears set up before I was on the brakes. I got a better run out of the corner and put the screws to him. This CycloCross is easy. There wasn't much happening for the rest of this lap, except for one really sweet pass I put on a guy.

Lap 3

Sean cheered me again, and I heard the people noting the numbers say "57" as I passed. I looked back on the grass section to see Barry was still within striking distance. My only pass on this lap was Brendan, the really young lad. I was feeling good for the rest of this lap. My only concern was that the drop on the other side of the first clay ramp was becoming more and more loosely packed. I ran fairly wide on it this time round. I got lapped by the men's leader. The top two women passed me too. But I was enjoying it too much to care.

Just before the first dismount point, I spotted a pair of riders. Both were known to me. Richard, looked like he had blown-up after a fantastic first lap. The other was a man I had not seen in a long time, Eamon from my old club, Shannonside in Athlone.

I took the wide line into the dismount to avoid Eamon, and went up the left side of it, I had not taken this side before. As I got to the top and remounted, I balked. I should've paid more attention on my practice laps. There was a pothole at the bottom of the descent in front of me. Me getting flung over the handle bars was a possibility, I steeled myself for this. But I avoided this fate.

I gave Eamon some encouragement as I passed him into the sand-pit, before the rushes section. He reckonised me. I didn't look back, as I was slowly closing in on Richard. Eamon and I traded places twice more, he passed me on the climbs and I passed him on the corners. He finally made a pass that stuck on the climb to the finish. As he soared by, he said "I can still climb though". A reference to when we rode the 115km Croí Lap of Lough Corrib together. He put five minutes into me on the climb out of Maam Cross.

Lap 4

Sean encouraged me more and my number was noted again. My legs turned to jelly as soon as I was on the grass. The only thing keeping me going was Richard, who beat me by four minutes at Grange Castle. I have been assured, by medical experts, that the definition for the way he was looking is; "shot to shit". I was also gaining back the ground I lost to Eamon. My blood was up, I was going to pass these two on the upcoming two ramps. This CycloCross thing is a piece of piss.

Eamon dismounted and ran up the clay ramp. Richard rode up on the left. I followed. Richard was going over the top as I got there. Eamon was remounting on the right. I made the first pass.
The next thing Richard heard was "shcrruck, you fuck, no no no, aaagh, shit". I, like the sisterhood of the Titanic, was resting on the floor. The bike had slid out from underneath me on the loose packed clay at the bottom of the rise. I was lying on my right side. Eamon, powered by gravity (Newton's Invention, not the Space RomCom), was catapulted over the bars as his front wheel hit my left hip.

My thought process was; clear the path, how was Eamon's bike, how was my bike, Barry will pass me. Michelle came down the path. I handed Eamon his bike. He fixed his chain. I though my chain was off, but it had jumped down the cassette.

I exited the tree section, Richard, and my chances of avenging the four minute Grange Castle deficit, were gone. Spurred on my adrenaline I skipped up the next ramp. My legs began to give in on the grassy section, as I noticed my leg warmer had a hole in it.

I really hoped that there wasn't any damage to the skinsuit, or my flesh. I didn't fancy sitting on a Ryanair flight to Krakow missing a chunk of knee skin. It's not everyday I encounter a former world champion and current bronze medalist. Orla passed me on this Rushes section, looking unbelievably pro.

From Sean Rowe
As I approached the run up, I was hoping Sean Rowe would get a picture of me, really dusty and torn leg warmer. I could use it for Tinder. "Luke, 26, Can't grow a beard. Finds rugby to be a seditive. Doesn't prefer to, but when called upon, can get his hands dirty." Anyone who has used Tinder for five minutes will realise that this filters out ninety percent of southside women.

Lap 5

When Eamon didn't pass me on the hill, I felt really guilty. Had I ruined his race and possibly his bike? This nagging guilt, plus the growing fatigue in my legs and lower back, made me glad I had just to get to the finish.

As I approached the clay ascent, my Waterloo, I said "once more into the breach." I took it gingerly going down, and shouted "turn, turn, fucking turn" at the bottom.

Most of the other front runners were passing me now. I kept moving off the racing line to let them through. Alek gave me some encouragement as he came past. As I had been lapped, I didn't have to complete a sixth lap.

Post-Race

I posed for a picture for Sean Rowe, at the finish line. This image didn't not exude the powerful alpha-male magnetism that my Tinder profile required. There was a contingent of Orwell riders, Richard had finished a minute a head of me. Barry was home soon afterwards. I seen Eamon come through and I got his attention. I apologised again for causing him to crash and ruining his race. He reckoned he was about two meters in the air after going over me. I examined my kit on the side that collided with the bike, there was a tyre track. We talked about the race and the club.

Bodies broken, from Sean Rowe
I had to rush home. I had a plane to catch. After completely misjudging where my carpark was and standing at the wrong shuttle bus shelter. Dublin Airport have an answer to Dundrum Cinema's "Display Popcorn". I'm still bitter about the day I walked up to the Ice Cream counter and pointed at the popcorn buckets on the lit up shelf and asked for one, "that's display popcorn".
In the Airport, I stood between McDonalds and an unbranded canteen. The people in the restaurant looked more miserable than the McDonalds patrons, so I went for it. I ate my fist McDonalds burger of 2015. Apart from the space to put chips on top of the patty, I wasn't missing much.
When we arrived in Gliwice, via Krakow, we checked the square for food. There was nothing open, save a few Kebab shops. McDonalds was the only other option. I pointed to the Big Mac and used all my interpretative dance to explain that I didn't want Mayo on the minced cow carcass.

I was a little jealous that I missed the beer, cake and A-race. Although I wouldn't have drank the beer before driving. I really enjoyed the race, the course and the progress I've made. DCCX should be proud of the event they put on.
The results were a bit off, but my times, bar the first lap, were fairly accurate.

I also had the added excitement of the "race within a race", that the Orwell guys had going on. Richard possessing a five minute lead on me in the CX GC. John and Michael tied 1-1 on head-to-head victories. Me getting one over on Barry for his demolition jobs in the 10 and 25 mile time trials in the Club League.

What Was Learned

  • I could see what Sean was showing us about the off-camber cornering. Set the gearing for the corner's exit, Off the brakes and lean the bike under you.
  • I need to regain my out of the saddle abilities.
reade more... Résuméabuiyad

Android Database Tutorial - Basic SQLite DB



UPDATE: This is superseded by the Room Database Tutorial.

Here is the new tutorial: Room Database, Fragments, RecyclerView, LiveData, ViewModel and Data Binding

Is this what you're looking for?

The areas of Android Development that are touched on in this tutorial are:
  • SQLiteOpenHelper - For Database purposes,
  • AsyncTask - To load the ListView without using the Main UI Thread,
  • Thread - To execute queries without using the Main UI Thread,
  • ViewHolder Pattern - To display the BlogPost titles in the ListView,
  • Dynamic Creation of Database Row IDs - a lot of the database logic deals with the BlogPost titles, so I needed a way to handle insertion.

Introduction

I'm making this tutorial as a future reference for myself, and publishing it so it may be a basic step by step guide for others to implement Databases in their Android Application. I have Googled for "Android Database Tutorial". The Google Developer results are confusing, Android Hive is old/erroneous and Vogella's one is really detailed/long.

The App

This will be a tutorial on the basics of creating a database in Android. The end result will be an app that can create records and display them as a ListView. The reason the app is so simple is to remove the clutter, to allow the database to be the main focus of the tutorial.

Also there isn't a whole lot of data integrity checks, logging, user feedback, exception handling here, so keep your panties unbunched.

I can evolve this app in the following ways, and I will with future posts:
  • Advanced Data Types in the Database,
  • Content Providers,
  • RecyclerView for a nice layout to the ListView,
  • ActionBar commands to create and delete BlogPosts,
  • Pulling from a RESTful Service, etc...

Android Database Technology

Android uses an SQLite Database when storing data on the device. You can use a remote database too, but it's best to use a RESTful Web Service to accomplish tasks in that way. Storing content locally is good if the user doesn't have a network connection and wants to view current data, or create data for synching to the cloud later.

Database Implementation Flow

I'll provide a synopsis of the steps below. As Android Database interaction is Model Driven, we'll implement our Model Class first. "Model" is just a fancy word for "POJO", which itself is a fancy word for "Plain Old Java Object". Secondly we'll implement the outline of our Database Class, to provide the foundation to build interactions on. The Database Class will be a Singleton, so only one instance will exist in our app, it's best to get into good practices early. There's two schools of thought on the next step; one, implement the queries as needed, as not to bloat functionality, two, write the CRUD logic up front to reduce development time later on and we're in the database zone at this time. I'd recommend the former for normal development, but for the purposes of keeping this tutorial streamlined, I'll take the latter approach. Finally we'll add the UI Activities to make use of the database functionality.

I have the source code posted to GitHub: Android Database Tutorial-Basic repository. Each of the steps below will be a commit.



Step 0: New App with Blank Activity

This step is optional, you may already have the app that you wish to use the database in. Create the new app, give it a name and select the "Blank Activity" to begin with. I just accepted all the defaults for the naming. As none of that matters much in the context of this tutorial. Close MainActivity.java and activity_main.xml when they open. We'll deal with them later. At this point I added my project to Source Control with git.

Commit Diff: 394ff7f



Step 1: Implement the Model Class

We'll add a new package under our app, for good practice. We'll call it "model". Next add a Java Class, which will be our model. We'll call it "BlogPost". Our app will display words that the user creates in a ListView on screen. With that in mind, here is our simple Model Class, it has the ID and the Title fields.


The ID field always needs to be present in a Model Class that we want to be in the database. The ID is the Primary Key for the database. The Database will start from 1, not from 0 as you'd expect. Hopefully, simple stuff here.

Commit Diff: 391add4



Step 2: Implement the Database Class

In this step, we will create the outline of the Database Class. Add another package, call it "database". Add a Java Class, call it "DatabaseConnection" and the kind will be Singleton.

In our code editor we make it so DatabaseConnection.java extends SQLiteOpenHelper. SQLiteOpenHelper requires that we implement its two abstract methods, onCreate() and onUpgrade(). The lifecycle method onCreate() is called when the app is first launched. In the onCreate() method implementation, we issue a CREATE TABLE command to the database. The lifecycle method onUpgrade() is called when the app is updated to a later version, i.e when an update is installed from the Google Play Store. In the onUpgrade(), you can manage the addition and removal of columns from the database table. But in our implementation, we'll just drop the old database in favour of the new version, which will be created when we call the onCreate() method manually.


Commit Diff: c685b65



Step 3: Basic Queries for our Use Cases

The use cases of this app are;
  1. Create a new BlogPost.
  2. Delete an existing BlogPost,
  3. View all the BlogPosts in the database.
Still in our DatabaseConnection class, we add the following three methods after the onUpgrade() method.


Commit Diff: 16bf861



Step 3 Bonus: The other CRUD queries

The abbreviation CRUD stands for Create, Retrieve, Update and Delete. So far we have the Creation, Deletion and Retrieval of records implementation. Let's see how the Updating and other forms of Retrieval of records are handled with respect to our Model. Again, keeping things simple, we'll ignore the possibility of raising exceptions and handling return codes here.

The following methods are pretty self explanatory, they allow for the retrieval of one record, allow updating of one record, count the records, determine if a record exists, and find the ID of an existing record in the database.


Commit Diff: 2340692



Step 4: UI Activity to Insert, Delete and Display Records



As this tutorial is not about UI programming, I'll just leave code for calling the queries the commit ID, for the rest of the code, here for you to examine. The AsyncTask and ViewHolder Pattern is defined in that Commit ID. The UI is an EditText to input BlogPost titles, then two buttons to Add and Delete the BlogPosts, based on their titles, in the ListView based on their titles matching the text in the EditText.

Loading https://gist.github.com/8488564....

Commit Diff: 7b59a0e, this one is a bit of a mish-mash of updates.



Conclusion

I hope this tutorial was basic enough for novice programmers to understand and comprehensive for intermediate programmers to get ideas of this possibilities of storing data locally on the Android device.

All the code is in the GitHub Repository, AndroidDatabaseTutorial-Basic. If the app fails to build on your IDE, start by changing the "buildToolsVersion" in your "app/build.gradle" to match the version in your SDK Manager.

reade more... Résuméabuiyad