Tutoriel Android: Comment parser du XML version 2?
Il y a plusieurs mois que j’ai sorti mon premier tutoriel expliquant comment parser du XML avec sax. Il y a bien plus simple grâce à SimpleXML… (Lire la suite…)
Il y a plusieurs mois que j’ai sorti mon premier tutoriel expliquant comment parser du XML avec sax. Il y a bien plus simple grâce à SimpleXML… (Lire la suite…)
Voici un nouveau tutoriel ! Nous allons apprendre à créer des menus.
Accrochez vous ça va commencer ! ![]()
(Lire la suite…)
Bonjour à tous pour ce nouveau tutoriel ! Aujourd’hui nous allons apprendre comment faire pour notifier des informations à l’utilisateur. (Lire la suite…)
Voici une chose bien utile! Pouvoir passer des paramètres entre deux activity est une chose essentielle !
(Lire la suite…)
Dans ce tutoriel je vais vous détailler comment parser du XML. Vous avez surement déjà parser du XML dans d’autres langages comme PHP ou autre. Voici comment le faire en Java sous Android grâce au parser SAX.
(Lire la suite…)
Bonjour ! Dans ce nouveau tutoriel je vais vous expliquer comment stocker des données de votre application de différentes façons. Il existe plusieurs manières de procéder. (Lire la suite…)
Bonjour à tous !
Je viens juste de rooter mon téléphone et je tiens à vous faire partager le tutoriel que je viens de suivre car beaucoup ne fonctionnaient pas.
Pour suivre ce tutoriel, votre GooglePhone doit être en 2.1 officielle. Le mobile sur lequel j’ai appliqué une à une les étapes décrites dans le tuto était un HTC Hero. Cela a marché pour moi cependant je ne garantie en aucun cas que cela marchera pour vous.
Vous êtes seul garant des dégradations que peut comporter un flashage de votre mobile.
Voici le site en question: http://www.android-software.fr/tuto-rooter-la-rom-officielle-htc-hero-2-1
Ci-dessous un screenshot du téléphone après le rootage et installation de FroydVillain (que vous pouvez télécharger à cette adresse:
Comme vous pouvez le voir, il n’y a plus HTC Sense et pourtant le téléphone est beaucoup plus réactif, beaucoup plus fluide. Je ne regrette vraiment pas la 2.1 !!!
Un splash screen peut être très utile. Il permet de rendre votre application plus professionnel si celui ci est assez design.Cela vous permet aussi de charger votre interface. D’autant plus si vous avez besoin de télécharger des fichiers via la 3G avec les problèmes de débits que cela suppose.
Notre classe implémente Runnable, ce qui nous permet d’implémenter la fonction run(). En gros on pourra lancer un thread avec this en paramètre. Ce thread effectuera les opération de préparation de l’interface.Par exemple, télécharger des données via la 3G pour replir un adapter).
Puis notre fonction handleMessage() terminera les opérations sur l’interface: pour nous, ce sera cacher l’ImageView du splashscreen mais cela aurait pu être initialiser un adapter avec les données précédemment chargées.
public class splashScreen extends Activity implements Runnable{
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// On lance le thread
launchWait();
}
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
// On cache l'image
((ImageView)findViewById(R.id.img_splash))
.setVisibility(ImageView.INVISIBLE);
}
}
private void launchWait(){
// On lance le thread
Thread t = new Thread(this);
t.start();
}
@Override
public void run() {
/*
C'est ici qu'on effectue les différentes opérations
pouvant geler l'interface
graphique si elles avaient été faites dans la méthode
onCreate().
*/
/*
On envoi un signal à notre handler ce qui exécutera la fonction handleMessage.
Le paramètre (ici 0) est un identifiant qui peut être testé dans les fonction handlerMessage.
Nous aurions pu tout aussi bien utilisé plusieurs fois notre handler. Dans ce cas il aurait mieux valu utiliser des ID en constante.
*/
handler.sendEmptyMessage(0);
}
}
Ici, dans le layout XML, l’ImageView du splash est deja visible. On ne fais donc que la cacher une fois toutes nos opérations finies.
Voilà ! A bientôt !
PS: N’hésitez surtout pas à poster vos questions !
Dans la suite des mes tutoriels je vais désormais plus expliquer des techniques ou astuces que j’utilise au quotidien lors de mes projets. Cependant si vous désirez un tutoriel sur un thème bien précis, n’hésitez pas à me contacter pour me demander.
Je vais donc vous expliquer comment effectuer une requête http vers un serveur puis récupérer un résultat.
Pour cela nous allons utiliser le code suivant:
public void postData() {
// On créé un client http
HttpClient httpclient = new DefaultHttpClient();
// On créé notre entête
HttpPost httppost = new HttpPost("http://www.tonsite.com/script.php");
try {
// On ajoute nos données dans une liste
List nameValuePairs = new ArrayList(2);
// On ajoute nos valeurs ici un identifiant et un message
nameValuePairs.add(new BasicNameValuePair("id", "567"));
nameValuePairs.add(new BasicNameValuePair("message", "Android c'est coo!!!"));
// Ajoute la liste à notre entête
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
// On exécute la requête tout en récupérant la réponse
HttpResponse response = httpclient.execute(httppost);
// On peut maintenant afficher la réponse
Log.e("http réponse",response.toString());
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
} catch (IOException e) {
// TODO Auto-generated catch block
}
}
Et voila vous pouvez donc maintenant récupérer les valeurs dans votre script PHP avec le code suivant:
<?php
echo("id: ".$_POST['id']." data: ".$_POST['data']);
?>
J’espère que cela vous sera utile!
Passons aux choses sérieuses !
Commençons par créer un nouveau projet Android dans Eclipse:
File -> new -> Android project ou sur l’icône surlignée ci-dessous
Vous obtenez cet écran:
Ensuite remplissez les champs comme ceci:
Voici en détail ce que sont ces données:
Voilà vous avez créé votre premier projet Android
!
Nous allons maintenant parler de la hiérarchie des fichiers d’un projet Android.
Nous avons cette hiérarchie:
Nous allons détailler un peu tout ça:
src: ce dossier contient toutes les classes du projet. Ainsi on y retrouvera tous les packages et fichiers .java. Nous y trouvons aussi le fichier HelloAndroid.java qui n’est autre que notre activité par défaut qui sera lancée au démarrage de l’application.
gen: Ce dossier contient le fichier R.java. Ce fichier renferme des données qui seront chargées sur le mobile lors de la compilation de votre projet. Les données incluses dans ce dossier sont par exemple, des fichiers texte décrivant la licence de votre application, des fichiers audio ou vidéo, etc.
res: Ce dossier regroupe l’ensemble des fichiers ressources du projet. C’est ce dossier qui est utilisé par ADT pour créer le fichier R.java. Ce dossier contient lui même des sous dossiers regroupant les fichier ressource par type.
Ces dossiers sont:
Pour finir, tout projet Android contient un fichier nommé AndroidManifest.xml qui définit la configuration de votre application au système Android. Ce fichier définit par exemple, le nom, l’icone (par défaut drawable/icon.png), la version minimale du système nécessaire à l’exécution de l’application, les activités, les services, etc. de votre application.
Passons maintenant à notre classe HelloAndroid.java:
package com.exemple.helloAndroid;
import android.app.Activity;
import android.os.Bundle;
public class HelloAndroid extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
Celle-ci définit une activité. Une activité correspond à un écran. Si une application se compose de plusieurs écrans, elle a une activité pour chaque écran. Chaque activité est une classe qui étend la classe de base Activity. Elle dispose d’une interface utilisateur graphique faite de vues (views) et elle répond à des évènements (events). Quand on change d’écran, on lance une nouvelle activité. Celle-ci peut retourner une valeur. Par exemple, si une activité permet de choisir quelque chose, un texte, une image, elle retourne ce qu’elle a choisi.
Nous allons la modifier pour pouvoir afficher notre petit message:
Commençons par modifier le fichier layout situé dans res -> layout -> main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:id="@+id/tv_message"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text=""
/>
</LinearLayout>
Ensuite on passe à la classe HelloAndroid:
package com.exemple.helloAndroid;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class HelloAndroid extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Nous alllons chercher notre composant Textview via son ID puis nous lui
// fixons le texte
((TextView)findViewById(R.id.tv_message)).setText("Hello World !");
// Nous aurions pu faire ainsi en stockant la référence du composant:
/*
TextView tv = (TextView)findViewById(R.id.tv_message);
tv.setText("Hello World !");
*/
}
}
Et voilà nous avons notre message.
Mais ceci est trop courant
. Nous allons ainsi rajouter une image à ce texte.
Voici le nouveau main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ImageView
android:src="@drawable/icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
/>
<TextView
android:id="@+id/tv_message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=""
android:layout_gravity="center"
/>
</LinearLayout>
Et voilà ! C’est quand même plus joli avec des couleurs !
Nous allons maintenant afficher le texte suite à un click sur un bouton.
Voici le nouveau code:
Le ficher layout:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ImageView
android:src="@drawable/icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
/>
<TextView
android:id="@+id/tv_message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=""
android:layout_gravity="center"
/>
<Button
android:id="@+id/bt_afficher_message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Afficher le message"
android:layout_gravity="center"
/>
</LinearLayout>
La nouvelle classe:
package com.exemple.helloAndroid;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class HelloAndroid extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// On associe l'évènement au bouton
(findViewById(R.id.bt_afficher_message)).setOnClickListener(bt_click);
}
// On créé un évènement
public Button.OnClickListener bt_click = new Button.OnClickListener(){
@Override
public void onClick(View v) {
((TextView)findViewById(R.id.tv_message)).setText("Hello World !");
}
};
}
A bientôt dans un prochain tutoriel !