tl;dnrUse Jackson, not Gson. Use this article as a reference for basic features.Part 2 of this short series of articles ended with section 5.7 of the Gson user guide, titled "Serializing and Deserializing Collection with Objects of Arbitrary Types". This third part continues with section 5.8 on "Built-in Serializers and Deserializers", and ends with section 5.10.1 on "InstanceCreator for a Parameterized Type". Part 4 will continue with section 5.11 on "Compact Vs. Pretty Printing for JSON Output Format". | Link To This Article |
2011-07-02
Gson v Jackson - Part 3
2011-06-27
Gson v Jackson - Part 2
tl;dnrUse Jackson, not Gson. Use this article as a reference for basic features.Part 1 of this short series of articles ended with section 5.3 of the Gson user guide, titled "Nested Classes (including Inner Classes)". This second part continues with section 5.4 on "Array Examples", and ends with section 5.7 on "Serializing and Deserializing Collection with Objects of Arbitrary Types". Part 3 will continue with section 5.8 on "Built-in Serializers and Deserializers". | Link To This Article |
2011-06-25
Gson v Jackson - Part 1
tl;dnrUse Jackson, not Gson. Use this article as a reference for basic features.What is this post?Is this yet another JSON-to/from-Java API comparison? Yes, it is. It's the most comprehensive comparison of using Gson versus Jackson for common JSON-to/from-Java tasks known. The sections below walk through each section of the Gson user guide, demonstrating similar implementations with Jackson. API features beyond what is described in the Gson user guide are then reviewed. | Link To This Article |
2011-05-25
Deserialize JSON with Jackson into Polymorphic Types - A Complete Example
Jackson API Versions NoteThe following code examples were written using Jackson 1.7.x or 1.8.x. They probably work as-is with Jackson 1.9.x, but Jackson 2.0 introduced API changes significant enough that this code does not compile with it. On initial review, it appears that package names changed, and at least one method signature changed or was moved or was renamed or no longer exists. In the near future, I may post updated code examples that use Jackson 2.x.tl;dnrSkip to the fourth, fifth, and sixth examples.Why This Post ExistsWhile recently answering a question on StackOverflow.com about deserialization of JSON into polymorhpic types in Java, I couldn't find a simple and complete example using Jackson. At the time of this writing, the official documentation on the subject describes aspects of how to do this, but it doesn't have a full example. Searching other resources also didn't turn up any complete examples. | Link To This Article |
Following are deserialization examples with Jackson that build up to a complete example of populating a polymorphic data structure in Java. The first three examples do not involve Polymorphism. Polymorphism is introduced in the fourth example.
Labels:
jackson,
java,
json,
polymorphism
2011-05-20
Fixing GeekYouUp's Battery Widget
tl;dnrGeekYouUp's Battery Widget for Android can be altered to reduce App Widget display update occurrences by as much as 40-65% (depending on device power use rate), without altering application functionality or otherwise hindering its ability to display the current battery charge level. Battery Widget's constantly running service, necessary for real-time monitoring of battery charge level changes, appears to use negligible resources and does not noticeably prematurely drain battery power. | Link To This Article |
Following are links to the code of the fixed version of Battery Widget, logs of the svn differences showing what was changed from the original code, and a fully-built Android APK, ready to be installed on any Android device. This APK was built with a different package name, a different application name, and a different digital signature than the Battery Widget application by GeekYouUp. It can be installed in parallel with the original -- it does not replace the original Battery Widget application during installation.
- batterywidget-svn-trunk-2011.05.17-FIXED-src.zip
- batterywidget-svn-trunk-2011.05.17-DIFFS.zip
- batterywidget-svn-trunk-2011.05.17-FIXED.apk
For Those With Interest In The Details...
Labels:
Android,
App Widget,
Battery Widget,
GeekYouUp
2011-04-26
A Simple, Complete App Widget - Part 1
| Note: This blog post is incomplete, and I discontinued posting part 2, as the Widget API and abilities were changing significantly with new releases of Android, at the time of writing. I left this post online, as it has many views, and some useful content. While information on developing App Widgets for the Android home screen is plentiful, much of what's available - including the contents of many books on Android software development - is incomplete, often broken, and leads to improperly functioning App Widgets. One all too common outcome is App Widgets that unnecessarily run users' batteries down. Another frequent fail includes funky App Widget behavior if more than one instance exists on a user's home screen. This post is intended to provide a complete blueprint for folks to follow, to develop their own App Widgets that display dynamic content while consuming minimal device resources, provide standard user input controls, and otherwise work correctly as expected. | Link To This Article |
2011-04-10
Android Widget Design Guidelines - Widget Sizes
While the Android Widget Design Guidelines do clearly list the bounding box dimensions for widgets, they don't list recommended dimensions for the outer frame or the inner edge box. The following apparent recommendations were extracted from the standard widget frames Photo$hop files they provided for download.
Unfortunately, these dimensions don't all nest with even spacings. For example, the portrait-mode inner edge box has a width of 207, which leaves 33 pixels of padding to split between the left and right sides, but 33 is an odd number, and we cannot split a pixel in half, so one is left to decide what to do with an extra pixel. My solution is to simply shrink the inner edge box width to 206 pixels.
| Portrait Mode | |||
|---|---|---|---|
| 4 x 1 | 3 x 3 | 2 x 2 | |
| Bounding Box: | 320 x 100 | 240 x 300 | 160 x 200 |
| Outer Frame with Shadow: | 304 x 75 | 224 x 272 | 144 x 189 |
| Inner Edge Box: | 287 x 58 | 207 x 256 | 129 x 174 |
| Landscape Mode | |||
|---|---|---|---|
| 4 x 1 | 3 x 3 | 2 x 2 | |
| Bounding Box: | 424 x 74 | 318 x 222 | 212 x 148 |
| Outer Frame with Shadow: | 412 x 63 | 305 x 200 | 199 x 136 |
| Inner Edge Box: | 395 x 46 | 288 x 182 | 184 x 121 |
Unfortunately, these dimensions don't all nest with even spacings. For example, the portrait-mode inner edge box has a width of 207, which leaves 33 pixels of padding to split between the left and right sides, but 33 is an odd number, and we cannot split a pixel in half, so one is left to decide what to do with an extra pixel. My solution is to simply shrink the inner edge box width to 206 pixels.
| Of course, different screens will actually use different numbers of pixels both horizontally and vertically (depending on actual screen sizes and pixel densities). For this reason, and to have smaller graphics file sizes, as the guidelines suggest, use 9-patch graphics, but note that scaled graphics might be fuzzy in appearance, and it may be necessary to create LDPI, MDPI and HDPI versions of widget graphics. For Paint.NET, I made simple templates for the six standard widget sizes. Download and enjoy. (I'm using the term "template" loosely. These templates simply have three layers each with outlined boxes matching the dimensions described above.) | Link To This Article |
Subscribe to:
Posts (Atom)