Archives de catégorie : Java

For-each ou for Iterator ?

Publié dans Java | Laisser un commentaire

En Java (comme dans plusieurs langages), il existe plusieurs manières de parcourir une liste d’éléments. Mais entre une boucle for classique, une boucle Iterator et un for-each, il existe quelques différences qu’il est de bon ton de connaître.

ilustration d'une boucle for

Continuer la lecture

Subtilité sur les classes abstraites Java

Publié dans Java | Laisser un commentaire

J’ai découvert une petite subtilité dans l’utilisation des classes abstraites aujourd’hui. Imaginons une interface Java qui est partiellement implémentée par une classe abstraite. Cette classe abstraite est assez naturellement étendue par une bonne vieille classe Java (la version française du POJO ;p). Jusqu’ici tout va bien.

Exemple 1 : héritage Java

Exemple 1 : héritage Java

Maintenant, imaginons que les méthodes implémentées dans notre classe abstraite, utilisent des méthodes implémentées seulement dans notre POJO. C’est là qu’est la subtilité (que j’annonce subtilement).
Continuer la lecture

Installer et Configurer Eclipse

Publié dans Java | Laisser un commentaire

Avant, je préférais avoir un seul Eclipse avec tous les plugins qui vont bien pour mes différents projets (Java, PHP, Android) et je jouais avec les workspace quand il fallait passer d’un projet à un autre. Aujourd’hui, j’ai l’impression qu’il vaut mieux avoir des Eclipses séparés selon l’utilisation :

  • Un optimisé pour les projets PHP,
  • Un autre pour les projets Java, OSGi
  • Et un autre pour Android. Même si pour ces deux derniers, j’aurai plutôt tendance à les mettre ensemble, à voir…

Du coup, j’ai une petite procédure d’installation / configuration et optimisation de mon IDE. La voici en résumé.
Continuer la lecture

Service Android et TabActivity

Publié dans Java | Laisser un commentaire

Lors de l’utilisation conjointe d’une TabActivity sur Android, et d’un service Android dans l’une ou l’autre des Activity, il faut faire attention à la manière dont on se connecte / déconnecte au(x) service(s) !
Il n’est pas rare d’obtenir une erreur du style :

WARN/ActivityManager(784): Binding with unknown activity: android.os.BinderProxy@6545646

La solution consiste à utiliser :

getApplicationContext().bindService(...);
// et 
getApplicationContext().unbindService(...);

plutôt que :

bindService(...);
// et 
unbindService(...);

Ce serait dû à un bug du SDK Android. Mais personnellement, cela me semble assez logique qu’il y ait à faire attention à qui (l’Activity parente, ou bien les Activity des onglets) « bind » et « unbind » les services puisque l’on a plusieurs Activity en même temps.

Personnellement, chez moi, ça rendait mes Activity quasiment inopérante : impossible de cliquer sur des boutons, d’accéder aux services, bref, la galère !

Plus d’informations

Enable hardware keyboard on Android emulator

Publié dans Java | Laisser un commentaire

I thought it was possible in previous version, but it appears that now it is not possible to use the physical hardware keyboard of a computer in an Android emulator… Hopefully, this is just a small configuration to edit!

  • Open the AVD Manager: in Eclipse > AVD Manager
  • Select the particular AVD, or create a new one, and click on Edit
  • Go to the « Hardware » section, click on « New ».
  • Select the Property: « Keyboard Support », and change its value to « yes » (it is « no » by default)
  • That’s it! You can start your emulator and use your physical keyboard.

AVD Manager

More information

Activer le clavier physique sur un émulateur Android

Publié dans Java | Laisser un commentaire

Il me semble que dans les versions précédentes cela fonctionnait, mais toujours est-il qu’avec les derniers émulateurs Android, il n’est plus possible d’utiliser le clavier physique de mon ordinateur pour taper un texte sur l’émulateur !
Heureusement, ce n’est qu’une petite configuration à modifier 🙂

  • Dans Eclipse, aller dans l’AVD Manager
  • Sélectionner un AVD existant ou en créer un nouveau
  • Aller dans la section « Hardware » et cliquer sur « New »
  • Sélectionner la propriété « Keyboard Support » et changer sa valeur à « yes » (elle est à « no » par défaut)
  • L’émulateur est prêt à être redémarrer !

Continuer la lecture

Problèmes de mémoire ?

Java, memory leak et les erreurs de PermGen space

Publié dans Java | Laisser un commentaire

Trois articles (du même auteur) très intéressants sur les fuites mémoires en Java. A lire absolument, à tête reposée !

Base de données SQLite en ligne de commande sur Android

Publié dans Java | Laisser un commentaire

Imaginons que vous ayez un émulateur d’Android qui tourne actuellement sur votre machine, avec votre application en cours de développement, et que vous aimeriez voir ce qui se passe dans la base de données SQLite de votre application. Rien de plus simple grâce à quelques commandes SQLite.
Tout d’abord, il faut ouvrir votre shell favori (Sur Windows : Menu démarrer > Accessoires > Invite de commandes). Puis utilisez la commande suivante :

monShell>adb -e shell
#sqlite3 /data/data/android.societies/databases/societies.db
...
Ouverture SQLite
...
sqlite>... mes commandes SQLite ...

L’option -e signifie « l’émulateur actuellement ouvert. Donc si vous en avez plusieurs, ou si c’est un vrai téléphone qui est connecté à votre ordinateur : allez lire la doc pour voir comment faire. Comme ça, je dirais : adb devices pour avoir l’id des émulateurs et des téléphones en route. Puis adb -s [id séléctionné] shell. Après le comportement du shell peut varier sur un téléphone.

Quelques commandes SQLite utiles

  • .help: pour connaître la liste des commandes utiles !
  • .databases: listes des bases de données
  • .tables: liste les tables d’une base de données

Et bien sûr, toutes les commandes SQL de votre choix :

SELECT * FROM _table
DELETE FROM _table
REINDEX _table

Plus d’information

Logo Virgo

Virgo OSGi and command line

Publié dans OSGi | Laisser un commentaire

I already wrote about Virgo, a complete OSGi stack, based on Equinox and easily integrable on Eclipse (eh, it is done for that). Yes, it is possible to launch and manage our Virgo server using Eclipse (read: Let’s work OSGi Virgo on Eclipse), but if you try to launch a big project like Societies, you might may soon be blocked by an ugly Java « Out of memory ». This is because Eclipse is heavily using the Java memory, and if you launch your OSGi server using Eclipse, you increase again this memory usage.
So, what is the solution? It’s easy: don’t launch Virgo using Eclipse, launch it with command line. So, the server will have its own memory cluster. Lets do this.
Continuer la lecture

StringBuilder vs StringBuffer vs String.concat – done right | kaioa.com

Publié dans Java | Laisser un commentaire

D’après cet article StringBuilder vs StringBuffer vs String.concat – done right | kaioa.com (en anglais), il est plus avantageux en terme de performance d’utiliser StringBuilder à partir de Java 1.5 (ou StringBuffer pour les versions antérieures) que de concaténer des chaînes de caractères à coups de concat. Les chiffres sont assez parlant !

Each time you append something via ‘+’ (String.concat()) a new String is created, the old stuff is copied, the new stuff is appended, and the old String is thrown away. The bigger the String gets the longer it takes – there is more to copy and more garbage is produced.

Ce que l’on pourrait traduire par :

A chaque fois que l’on concatène à l’aide de String.concat(), une nouvelle instance de String est créée, l’ancienne étant copiée, accolée à la nouvelle, puis jetée. Plus longue est la chaîne de caractères et plus longtemps cela prendra. Donc plus on concatène, plus on créé du déchet.

De plus, le compilateur Java va transformer tout seul les concaténations manuelles avec des « + » ou des « line breaks » en utilisant des StringBuillder::append. Donc on peut utiliser sans problèmes cette écriture ! C’est de loin la plus lisible pour de petites chaînes de caractères. Quant aux autres : StringBuilder à la rescousse !

Voilà qui est bon à savoir 🙂

Pour aller un peu plus loin avec StringBuiler