Thursday, April 21, 2011

Don't allow application to go back

Just add following code to your Screen class:

public boolean onClose() {

return false;


Wednesday, April 20, 2011

Over the air installation for BlackBerry

When you know it -- is simple. But I spent few hours figuring out how to do this.

So you need to do following (Using Eclipse IDE):
  • Go to BlackBerry/Package/All (make sure you are building for device so all binaries will be signed)
  • in your project folder go to deliverables\Web\
  • copy all files to your webserver
  • Important! Add mime type for jad text/ jad
  • Here is instruction how to do this on godaddy's shared hosting
  • Give your customers link to jad file

I hope this will save you some time

Thursday, March 10, 2011

Converting Android java code to BlackBerry

So far it looks like mission impossible

First we need to downgrade language level from 1.6 to 1.3. In this how-to instruction you need to cry after this :)

I need to convert:
  • UI layer
  • Business Logic
  • SOAP calls
Let's look closer and see what we can do.
We can forget about UI unless I'll be able to find a way to parse Android's layout XMLs and generate something in runtime.

For now I prefer to plan generate sources for BlackBerry, Android and iPhone. So it will be old good Metaprogramming. I like this idea but rough estimation and debugging process is very frightening.

Wednesday, March 9, 2011


protected String getIMEI() {

return GPRSInfo.imeiToString(GPRSInfo.getIMEI());


Add menu to MainScreen

//Add following to your MainScreen class

protected void makeMenu(Menu menu, int instance) {

super.makeMenu(menu, instance);

menu.add(new MenuItem("About", 10, 20) {

public void run() {




menu.add(new MenuItem("Logout", 20, 10) {

public void run() {





private void doLogout() {

//TODO: Implement doLogout


private void doAbout() {

//TODO: Implement doAbout


Monday, March 7, 2011

Filesystem Corrupt in Simulator

I just got:

To solve this:
  1. Go to C:\Eclipse\plugins\net.rim.ejde.componentpack6.0.0_6.0.0.30\components\simulator
  2. Delete all *.dmp files
  3. Restart simulator

Sunday, March 6, 2011

Resize header dynamically based on Display width

We need to prepare 3 images:

public class HeaderManager extends HorizontalFieldManager {

public HeaderManager() {



Bitmap image;

Bitmap leftImage = Bitmap.getBitmapResource("header_left.png");

this.add(new BitmapField(leftImage));

image = Bitmap.getBitmapResource("header_middle.png");

Bitmap rightImage = Bitmap.getBitmapResource("header_right.png");

this.add(new BitmapField(resizeBitmap(image, Display.getWidth() - leftImage.getWidth() - rightImage.getWidth(), image.getHeight())));

VerticalFieldManager vert = new VerticalFieldManager(Manager.NO_HORIZONTAL_SCROLL | Manager.NO_VERTICAL_SCROLL | Manager.USE_ALL_WIDTH | Manager.FIELD_RIGHT);

vert.add(new BitmapField(rightImage, Field.FIELD_RIGHT));



public static Bitmap resizeBitmap(Bitmap image, int width, int height) {

int imageWidth = image.getWidth();

int imageHeight = image.getHeight();

// Need an array (for RGB, with the size of original image)

int rgb[] = new int[imageWidth * imageHeight];

// Get the RGB array of image into "rgb"

image.getARGB(rgb, 0, imageWidth, 0, 0, imageWidth, imageHeight);

// Call to our function and obtain rgb2

int rgb2[] = rescaleArray(rgb, imageWidth, imageHeight, width, height);

// Create an image with that RGB array

Bitmap temp2 = new Bitmap(width, height);

temp2.setARGB(rgb2, 0, width, 0, 0, width, height);

return temp2;


private static int[] rescaleArray(int[] ini, int x, int y, int x2, int y2) {

int out[] = new int[x2 * y2];

for (int yy = 0; yy <>

int dy = yy * y / y2;

for (int xx = 0; xx <>

int dx = xx * x / x2;

out[(x2 * yy) + xx] = ini[(x * dy) + dx];



return out;