Skip to content
{
"version": 3,
"artifactType": {
"type": "APK",
"kind": "Directory"
},
"applicationId": "com.ldnr.welovestephane",
"variantName": "release",
"elements": [
{
"type": "SINGLE",
"filters": [],
"attributes": [],
"versionCode": 1,
"versionName": "1.0",
"outputFile": "app-release.apk"
}
],
"elementType": "File",
"baselineProfiles": [
{
"minApi": 28,
"maxApi": 30,
"baselineProfiles": [
"baselineProfiles/1/app-release.dm"
]
},
{
"minApi": 31,
"maxApi": 2147483647,
"baselineProfiles": [
"baselineProfiles/0/app-release.dm"
]
}
],
"minSdkVersionForDexing": 23
}
\ No newline at end of file
package com.ldnr.welovestephane;
import android.content.Context;
import androidx.test.platform.app.InstrumentationRegistry;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.junit.Assert.*;
/**
* Instrumented test, which will execute on an Android device.
*
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
*/
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
@Test
// vient cherché le contexte et son package et vérifie que le package de l'appli c'est bien
// com.ldnr.welovestephane
public void useAppContext() {
// Context of the app under test.
Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
assertEquals("com.ldnr.welovestephane", appContext.getPackageName());
}
}
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
tools:targetApi="31">
<activity android:name=".AccueilActivity"
android:exported="true"
android:label="@string/map_title">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity android:name=".CarteActivity" android:label="Stephane emotional map"/>
<activity android:name=".AquariumActivity" android:label="@string/fish_tank"/>
<activity android:name=".PopcornActivity" android:label="@string/popcorn"/>
<activity android:name=".AlerteActivity" android:label="@string/alerte_titre"/>
<activity android:name=".AnnuaireActivity" android:label="Annuaire"
android:theme="@style/annuaire_gris"/>
<activity android:name=".AnimauxActivity" android:label="@string/animal_title"/>
</application>
</manifest>
\ No newline at end of file
12/07/2000 Aujourd'hui le petit vincent s'est fait boulloter par un chimpansé. Faites attentions !
13/04/2000 Je porte un slip
12/06/2001 BOU !
12/09/2001 Vive la reine mère !
12/09/2010 Attention, les manchots sont agressifs
package com.ldnr.welovestephane;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.Scanner;
public class AccueilActivity extends Activity implements View.OnClickListener {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.accueil); // on va chercher le layout accueil
readNews();
// Bouton :
Button btmap = findViewById(R.id.btmap);
btmap.setOnClickListener(this);
// Button 2 :
Button btalerte = findViewById(R.id.btWarning);
btalerte.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// attention au this caché !
Intent i = new Intent(AccueilActivity.this, AlerteActivity.class);
startActivity(i);
}
});
//Button 3
Button btannuaire = findViewById(R.id.btannuaire);
btannuaire.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick (View v ){
Intent i =new Intent(AccueilActivity.this, AnnuaireActivity.class);
startActivity(i);
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// charger un menu avec l'objet getMenuInflater // decompresse sous forme d'objet :
getMenuInflater().inflate(R.menu.accueil, menu);
// Va chercher l'info si la case à été coché avant ou pas :
SharedPreferences sp = getSharedPreferences("zoo", MODE_PRIVATE);
menu.findItem((R.id.menu_envoyer))
.setChecked(sp.getBoolean("envoyer",true));
return true;
}
@Override
public boolean onMenuItemSelected(int featureId, @NonNull MenuItem item) {
if(item.getItemId()==R.id.menu_carte){
// Ouvre la carte
startActivity(new Intent(this,CarteActivity.class));
} if (item.getItemId()==R.id.menu_animaux){
startActivity(new Intent(this, AnimauxActivity.class));
}
if (item.getItemId()==R.id.menu_envoyer){
item.setChecked(!item.isChecked());
// Cree un fichier de préference dans lequel on va pouvoir écrire :
SharedPreferences sp = getSharedPreferences("zoo", MODE_PRIVATE);
// pour indiquer les modification voulu (celle qu'on veut enregistrer)
SharedPreferences.Editor e =sp.edit();
e.putBoolean("envoyer",item.isChecked());
e.commit();
}
return true;
}
@Override
public void onClick(View v) {
Intent i = new Intent(this, CarteActivity.class); // voila mon attention
//je part de this pour aller vers l'activity Carte
startActivity(i);
}
private void readNews() {
try {
// Ouvre le fichier "news.txt" dans le dossier assets de l'application
InputStream is = getAssets().open("news.txt");
// Initialise un Scanner pour lire l'InputStream, en spécifiant l'encodage UTF-8
Scanner scanner = new Scanner(is, StandardCharsets.UTF_8.name());
// Utilise le délimiteur "\\A" pour lire tout le contenu du fichier en une seule opération
// "\\A" est une expression régulière qui correspond au début de l'entrée
String content = scanner.useDelimiter("\\A").next();
// Ferme le Scanner pour libérer les ressources associées
scanner.close();
// Trouve le TextView avec l'ID textView3 dans le layout actuel
TextView tvNews = findViewById(R.id.textView3);
// Met à jour le TextView avec le contenu lu depuis le fichier
tvNews.setText(content); // Utilise le contenu du fichier pour mettre à jour le TextView
} catch (Exception e) {
Log.e("AccueilActivity","Erreur lecture news");
}
}
}
package com.ldnr.welovestephane;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
public class AlerteActivity extends Activity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.alerte);
// On associe les données à l'AutocompliteTextView, on créé un tableau
String[] lieux =getResources().getStringArray(R.array.alerte_lieu);
// Va chercher l' objet :
AutoCompleteTextView actv = findViewById(R.id.alerte_AutoC_lieu);
// On lie le tableau et l'objet autocompletion avec ArrayAdapter (classe spe qui prend une string )
// C'est une classe générique (il n'adapte que des chaines):
// 1 er parametre = context (donc this), 2iem c'est le layout, le troisième c'est le tableau
// lieux créé précedemment
ArrayAdapter <String> aa = new ArrayAdapter<>(this,
android.R.layout.simple_dropdown_item_1line,
lieux
);
actv.setAdapter(aa);
}
public void envoyerClick(View v){
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(R.string.alerte_titre);
builder.setMessage(R.string.alerte_confirmé);
builder.setIcon(R.mipmap.ic_launcher);
builder.setPositiveButton(android.R.string.yes,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int i) {
envoyer();
}
});
builder.setNegativeButton(android.R.string.no,null);
builder.show();
}
// Comment lire une donnée d'un composant d'un formulaire :
public void envoyer(){
String text =null;
// Trouve l'EditText dans le layout alerte en utilisant son ID
EditText et = findViewById(R.id.alerte_editText_intitule);
// Prends le texte dans et :
text = et.getText().toString();
// Trouve la CheckBox dans le layout alerte en utilisant son ID
CheckBox cb = findViewById(R.id.alerte_checkBox_urgent);
// si la checbox est coché envoyé le msg dont l'id correspond a alerte_envois_urgent
if (cb.isChecked() == true){
Toast.makeText(this,getString(R.string.alerte_envois_urgent, text)
, Toast.LENGTH_LONG).show();
}
Toast.makeText(this,getString(R.string.alerte_envois, text)
, Toast.LENGTH_LONG).show();
//finish();
}
}
package com.ldnr.welovestephane;
import android.Manifest;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.text.Html;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Scanner;
import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class AnimauxActivity extends Activity {
// recois les evenements thread
private Handler mainHandler;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.animal);
Button btsave =findViewById((R.id.btAddAnimal));
btsave.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Enregistrer();
}
});
// CREATION DU BOUTON RECHERCHE
Button btrecherche = findViewById(R.id.btChercher);
btrecherche.setOnClickListener(new View.OnClickListener() {
@Override //
public void onClick(View v) {
if(checkSelfPermission(Manifest.permission.INTERNET)==
PackageManager.PERMISSION_GRANTED){
EditText etEsp = findViewById(R.id.etEspece);
// On crée 2 caissiers (en gros) un peu comme des cores ou processeur :
ExecutorService executorService = Executors.newFixedThreadPool(2);
// APPEL RECHERCHER DANS LEXECUTOR
executorService.execute(AnimauxActivity.this::rechercher);
} else {
// FENETRE DE DEMANDE DE PERMISSION SI ON NE LA PAS RECU ALORS JE DEMANDE
requestPermissions(new String[]{Manifest.permission.INTERNET}
,0);
}
}
});
// TROUVE UNE BOUCLE D'EVENEMENT
mainHandler = new Handler(Looper.getMainLooper());
}
// FONCTION APPELER QUAND USAGE A ACCEPTER OU REFUSER LA PERMISSION
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if(grantResults[0] == PackageManager.PERMISSION_GRANTED){
// On crée 2 caissiers (en gros) un peu comme des cores ou processeur :
ExecutorService executorService = Executors.newFixedThreadPool(2);
// APPEL RECHERCHE DANS LEXECUTOR
executorService.execute(AnimauxActivity.this::rechercher);
} else
Log.i("AnimalActivity","L'usager refuse l'accès à internet");
}
// CREATION FCT DE RECHERCHE
public void rechercher () {
try {
afficher("....");// on peut aussi desactivée le bouton pour pas que l'usager appuis pleins
//de fois et lance plein de thread
EditText etEsp = findViewById(R.id.etEspece);
String url = null;
String espece = etEsp.getText().toString();
url = "https://fr.wikipedia.org/w/api.php?action=query&prop=extracts&exsentences=3&format=json&titles="
+ URLEncoder.encode(espece,"UTF-8");
URLConnection conn = new URL(url).openConnection();
//1er partie envois (ici rien car on a tout mis avant, rien de plus à envoyer)
//2iem parti lecture des données
InputStream is =conn.getInputStream();
Log.i("AnnimalActivity", "Recherche de " + url);
// RECUPERE LES INFOS DE WIKIPEDIA
Scanner scanner = new Scanner(is, StandardCharsets.UTF_8.name());
String contenuJson = scanner.useDelimiter("\\A").next();
is.close();
String message = formatJson(contenuJson);
afficher(Html.fromHtml(message));
} catch (Exception e) {
Log.e("AnimalActivity","Echec recherche", e);
}
}
private void afficher(CharSequence message){
mainHandler.post(()->{
TextView tvResultat = findViewById(R.id.tvresultat);
tvResultat.setText(message);
});
}
public void Enregistrer () {
EditText etNom = findViewById(R.id.edNom);
EditText etEsp = findViewById(R.id.etEspece);
EditText etAge = findViewById(R.id.etAge);
String nom = etNom.getText().toString();
String sage = etAge.getText().toString();
String espece = etEsp.getText().toString();
int age = Integer.parseInt(sage);
validation(nom, sage, espece);
Log.i("animauxActivity",
"Nouvel animal "+ nom + " " +" "+ sage + " "+espece);
animalHelper ah = new animalHelper(this);
if (ah.getIdEspece(espece)==(-1)) {
AlertDialog.Builder builder = new AlertDialog.Builder(AnimauxActivity.this);
builder.setTitle(R.string.alerte_titre);
builder.setMessage(R.string.animal_espece_dont_exist);
builder.setIcon(R.mipmap.ic_launcher);
builder.show();
} else {
int resultat = ah.insererAnimal(nom,age,espece);
Log.i("ActivityAnimal", "il y a "+ resultat + " n'animaux de cette espèce");
List<String> animaux = ah.ListeAnimals();
for(String animal : animaux)
Log.i("AnnimalActivity", animal);
etAge.setText("");
etNom.setText("");
etEsp.setText(""); }
}
public void validation (String nom, String sage, String espece){
if ( nom.isEmpty() || sage.isEmpty() || espece.isEmpty()) {
AlertDialog.Builder builder = new AlertDialog.Builder(AnimauxActivity.this);
builder.setTitle(R.string.alerte_titre);
builder.setMessage(R.string.animal_validation);
builder.setIcon(R.mipmap.ic_launcher);
builder.show();
} else {
int age = Integer.parseInt(sage);
Log.d("nom : ", nom);
Log.d("age : ", sage);
Log.d("espèce : ", espece);
}
}
// FCT POUR CONVERTIR UN JSON EN HTML
private String formatJson(String json) {
String messageHtml =":(";
try {
JSONObject racine = new JSONObject(json);
JSONObject query = racine.getJSONObject("query");
JSONObject pages = query.getJSONObject("pages");
String numeropage = pages.keys().next();
JSONObject page = pages.getJSONObject(numeropage);
messageHtml = page.getString("extract");
} catch (JSONException e) {
throw new RuntimeException(e);
}
return messageHtml;
}
}
package com.ldnr.welovestephane;
import android.app.Activity;
import android.os.Bundle;
import androidx.annotation.Nullable;
public class AnnuaireActivity extends Activity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.annuaire);
}
}
package com.ldnr.welovestephane;
import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
public class AquariumActivity extends Activity {
private long debut, fin;
static final String CLE_RETOUR ="messageAffiche";
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new AquariumView(this));
Log.i("Aquarium","Activity Create");
debut = System.currentTimeMillis();
// Fait apparaitre un toast donc un message quand on lance l'application
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getActionMasked() == MotionEvent.ACTION_DOWN) {
fin = System.currentTimeMillis();
long duree =fin-debut;
Intent i = new Intent(this, PopcornActivity.class); // voila mon attention
i.putExtra("temps",duree); // envois de la donnée
//je part de this pour aller vers l'activity Aquarium
// 1 Procédure standart
//startActivity(i);
//}
// 2 Si on veux recevoir des données d'une autre activité :
startActivityForResult(i, 0);
}
return true;
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (data!= null && data.getBooleanExtra(CLE_RETOUR,false))
Log.i("Aquarium", "Message Popcorn Affiché");
else
Log.i("Aquarium","Message du popcorn non Affiché ");
}
public class AquariumView extends View {
public AquariumView(Context context) {
super(context);
}
@Override
protected void onDraw(@NonNull Canvas canvas) {
Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.aquarium);
canvas.drawBitmap(bmp, 0, 0, null);
}
}
}
package com.ldnr.welovestephane;
import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
public class CarteActivity extends Activity {
//SE RELIER A UNE VUE
// 1 RELIER OBJET VUE à L'ACTIVITE :
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new CarteView(this));
// Fait apparaitre un log
Log.i("CarteActivity","Activity Create");
// Fait apparaitre un toast donc un message quand on lance l'application
Toast.makeText(this,
getString(R.string.map_welcome_msg)
,Toast.LENGTH_LONG).show();
}
// Fonction pour changer d'activity
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getActionMasked() == MotionEvent.ACTION_DOWN) {
// pour que ça marche que quand on clique en haut à droite
int largeur = findViewById(android.R.id.content).getWidth();
int longueur = findViewById(android.R.id.content).getHeight();
if ((event.getX() > largeur / 2) && (event.getY() < longueur / 2)) {
// Pas le droit d'instancier une activity donc on laisse android le faire
Intent i = new Intent(this, AquariumActivity.class); // voila mon attention
//je part de this pour aller vers l'activity Aquarium
startActivity(i);
} else {
Intent i = new Intent(
Intent.ACTION_VIEW,
Uri.parse("https://fr.wikipedia.org/wiki/St%C3%A9phane_Bern#:~:text=St%C3%A9phane%20Bern%2C%20n%C3%A9%20le%2014,acteur%20et%20%C3%A9crivain%20franco%2Dluxembourgeois.&text=St%C3%A9phane%20Bern%20en%202012%20lors,et%20de%20St%C3%A9phanie%20de%20Lannoy.")
);
try {
startActivity(i);
} catch (ActivityNotFoundException e) {
Log.e("CarteActivity", "pas de navigateur ?", e);
}
}
}
return true;
}
// 2 CREER L'OBJET VU // PREPARATION DE LA VUE / OBJET VUE -----------------------------------
// En Android on met une classe dans une classe
public class CarteView extends View {
// Pas oublier d'appeler le constructeur de classe mère
public CarteView(Context context) {
super(context);
}
@Override // le compilateur verifie qu'on hérite bien cette fonction de la classe mère
// ça évite de se tromper
// la fonction onDraw prend un objet Canvas en entrée, c'est un objet sur lequel on va
// pouvoir dessiner la on affiche juste une image
protected void onDraw(@NonNull Canvas canvas) {
// super.onDraw(canvas); pas utile ici
// Obtient un objet image, le R c'est pour ressources
Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.carte);
// Prends l'image pour la mettre à la position 0 0
canvas.drawBitmap(bmp, 0, 0, null);
}
}
}
package com.ldnr.welovestephane;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
public class PopcornActivity extends Activity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new PopcornActivity.PopcornView(this));
Log.i("Popcorn","Activity Create");
// La clef "temps" doit correspondre à la clef dans aquariumAquariumActivity
long duree = getIntent().getLongExtra("temps",0);
// si on est resté plus de 5s sur aquarium :
if(duree > 500) {
// on récupère la string des seconde dans le fichier xml en fonction du temps écoulé
String second = getResources().getQuantityString(R.plurals.popcorn_seconds,(int)duree/1000);
// on ajoute la string seconde dans la string text
String text =getString(R.string.popcorn_warning, (int)duree/1000,
second);
// on affiche ce toast :
Toast.makeText(this,text,
Toast.LENGTH_LONG).show();
// Enregistre l'info si on a affiché le message ou non :
Intent resultat = new Intent();
resultat.putExtra(AquariumActivity.CLE_RETOUR,true);
setResult(0,resultat);
}
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getActionMasked() == MotionEvent.ACTION_DOWN) {
Intent i = new Intent(this, CarteActivity.class);
// Les flags pour neutraliser une annimation
//i.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
//i.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
}
return true;
}
public class PopcornView extends View {
public PopcornView(Context context) {
super(context);
}
@Override
protected void onDraw(@NonNull Canvas canvas) {
Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.popcorn);
canvas.drawBitmap(bmp, 0, 0, null);
}
}
}
package com.ldnr.welovestephane;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import androidx.annotation.Nullable;
import java.util.ArrayList;
import java.util.List;
public class animalHelper extends SQLiteOpenHelper {
// simplification constructeur de la mère :
public animalHelper(@Nullable Context context) {
super(context, "animal.sqlite", null , 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE espece(id INTEGER PRIMARY KEY, nom TEXT)");
String insertionEspece ="INSERT INTO espece(nom) VALUES (?)";
db.execSQL(insertionEspece,new Object[]{"singe"});
db.execSQL(insertionEspece,new Object[]{"hippopotame"});
db.execSQL(insertionEspece,new Object[]{"lion"});
db.execSQL(insertionEspece,new Object[]{"girafe"});
db.execSQL(insertionEspece,new Object[]{"cacatoes"});
db.execSQL("CREATE TABLE animal(id INTEGER PRIMARY KEY, nom TEXT, " +
"age INTEGER, " +
"id_espece INTEGER," +
"FOREIGN KEY (id_espece) REFERENCES espece(id))");
}
// dans le cas d'une évolution de base de donnée :
@Override
public void onUpgrade(SQLiteDatabase db, int ancien, int nouveau) {
}
public int getIdEspece(String espece){
int idEspece = -1;
SQLiteDatabase db = getReadableDatabase();
Cursor c = db.rawQuery("SELECT id FROM espece WHERE nom LIKE ?",
new String[]{ String.valueOf(espece)});
if (c.moveToFirst()) {
idEspece = c.getInt(0);
}
c.close();
return idEspece;
}
public int insererAnimal (String nom, Integer age, String espece) {
int id_espece = getIdEspece(espece);
SQLiteDatabase db = getWritableDatabase();
db.execSQL("INSERT INTO animal (nom, age, id_espece) VALUES (?,?,?)",
new Object[]{nom, age, id_espece});
Cursor c = db.rawQuery("SELECT COUNT(*) FROM animal WHERE id_espece = ?",
new String[]{String.valueOf(id_espece)});
c.moveToNext();
int resultat = c.getInt(0);
c.close();
db.close();
return resultat;
}
public List<String> ListeAnimals (){
List<String> animaux = new ArrayList<>();
SQLiteDatabase db = getReadableDatabase();
String sql = "SELECT * FROM animal JOIN espece ON id_espece=espece.id ORDER BY age";
Cursor c = db.rawQuery(sql,null);
while (c.moveToNext()) {
animaux.add(c.getString(1)+"|"+c.getInt(2)+"|"
+c.getString(5));
}
c.close();
db.close();
return animaux;
}
}