Partage
  • Partager sur Facebook
  • Partager sur Twitter

Récupération de donnée à partir d'un scan QRCODE

20 février 2019 à 16:38:47

Bonjour a tous, dans le cadre de mes études je me doit de réaliser un projet avec pour objectif la digitalisation des vérifications machines d'une usine. En effet au lieu de remplir une simple fiche chaque semaine les agents se connecteront à une application et utiliserons le QRCode pour effectuer ses verifs seulement j'ai rencontrai une contrainte technique comment au scan de mon qr code faire apparaitre des infos présentes dans ma db concernant cette machine pour pouvoir par la suite exploiter ses données par l'integration de formulaire.

Je ne sais pas si j'ai était clair, si vous avez des questions n'hesitez pas.

Je vous remercie d'avance pour vos suggestions et autres aides

Cordialement

  • Partager sur Facebook
  • Partager sur Twitter
25 février 2019 à 10:29:31

Salut,

Tu n'indiques pas la technologie utilisée ;)

  • Partager sur Facebook
  • Partager sur Twitter
25 février 2019 à 14:30:26

Bonjour j'utilise Android Studio et une base de donnée distante MySQL, et mon souci est de pouvoir au scan du qr code afficher des données de ma base.
  • Partager sur Facebook
  • Partager sur Twitter
25 février 2019 à 15:07:57

J'imagine que ton QR Code te donne des informations déjà et que ces informations te permettent de savoir quoi demander à ta base de données ?

Si oui, il convient généralement de mettre en place une API entre ton application mobile et ta base de données. Ton application va appeler cet API via un appel HTTP. L'API fait la requête SQL et renvoie le résultat à l'application mobile.

  • Partager sur Facebook
  • Partager sur Twitter
25 février 2019 à 16:06:50

C'est exactement ca tu a très bien cerné le problème, donc je rentre un identifiant dans mon QRCode et j'appel ma requete sql en fonction de cet id de ton point de vu ?

  • Partager sur Facebook
  • Partager sur Twitter
27 février 2019 à 14:21:37

Auriez vous un tuto pour la base de donnée distante mysql je ne trouves rien de récent.
  • Partager sur Facebook
  • Partager sur Twitter
27 février 2019 à 22:20:52

comme je le disais plus haut, généralement on évite de se connecter directement à mySQL. Il convient de mettre en place une couche intermédiaire que l'on appelle une API ou web-services.
  • Partager sur Facebook
  • Partager sur Twitter
11 mars 2019 à 15:22:50

Bonjour NicolasMialon,

La réponse que rolandi est très claire. Je vais juste te préciser que ce n'est pas dans le code source de ton application mobile que tu mettra en place l'API.

Si tu as de bonnes connaissances d'au moins un langage de programmation utilisé pour le développement web en backend, tu peux mettre en place toi meme l'API. Sinon, il te faudra apprendre à le faire sinon demander à développeur web backend de le faire pour toi.

Et lorsque l'API sera implémentée, tu pourras l'utiliser pour récupérer les données dont tu as besoin chaque fois que tu feras une requête vers cette dernière. Afin de faire un appel à l'API, le cours suivant te sera utile : https://openclassrooms.com/fr/courses/4568576-recuperez-et-affichez-des-donnees-distantes 

-
Edité par David95 11 mars 2019 à 15:24:19

  • Partager sur Facebook
  • Partager sur Twitter
3 avril 2019 à 10:03:59

Bonjour a vous et merci pour vos réponses mon problème est résolu pour la base distante, seulement j'ai désormais un nouveau soucis ou plutôt une interrogation.

En fait au SCAN de mon QR_CODE ce dernier va choisir d'ouvrir un formulaire en fonction du text flasher qui correspond à une machine.

En effet lorsque je scan mon QR et que ce dernier contient le texte "PAP" en réference a la machine PAP du meme nom, j'aimerais pouvoir ouvrir le formulaire qui lui correspond pour y entrer des informations en base . Petite parenthèse il existe bon nombre de machines et mes formulaire sont pratiquement identique hormis quelque subtilité. C'est donc pourquoi j'aimerai ne pas avoir à créer une nouvelle java classe pour charger chaque formulaire et répéter mon code.

Exemple :

Comme vous le voyez ici je passe par une classe différente pour chaque formulaire que je veux afficher or cela alourdi le code et j'aimerai passer toujours par la même classe par exemple PV1.java et pouvoir y charger mes différents forms en fonction du flash du qrcode. Existe t'il un moyen de faire cela ?

switch (data) {
case "PAP":
startActivity(new Intent(ScanQR.this, PV1.class));
break;
case "BNS":
startActivity(new Intent(ScanQR.this, BIB.class));
break;
case "FAE":
startActivity(new Intent(ScanQR.this, FAE.class));
break;
default:
System.out.println("no match");
}

Voila je ne sais pas si j'ai était assez clair, n’hésitez pas à me poser des questions si ce n'est pas le cas. Merci d'avance

Bonne journée

  • Partager sur Facebook
  • Partager sur Twitter
8 avril 2019 à 15:03:39

Tu pourrais peut être envoyer le paramètre " data " directement à l'activité P1 qui se chargera d'afficher la vue qu'il faut.

Comment procéder ?
Créer un fragment pour chaque formulaire. Chaque fragment aura un layout

Concernant la classe P1 :
- Créer une méthode par formulaire dans la classe P1. Chaque méthode servira a injecter le formulaire (fragment) concerné dans le layout de ton activité P1. (Ex: showFaeForm() pour afficher le formulaire destiné au machines FAE )
- Contrôler au démarrage de l'activité si un paramètre est reçu (la data). Si oui tu fais apparaitre le formulaire adéquat grâce aux méthodes créées précédemment.

Concernant la classe qui le code que tu as posté :
- Envoyer directement la variable data comme un paramètre (dans le Bundle) de la l'activité P1.
- Changer ton " switch " par un simple " if / else " vu que l'activité P1 se chargera de faire le contrôle et afficher la vue adéquate. Dans ton if tu pourrais simplement vérifier que la data n'est pas nulle ni vide.

-
Edité par David95 8 avril 2019 à 15:05:58

  • Partager sur Facebook
  • Partager sur Twitter
10 avril 2019 à 10:25:13

Bonjour David et merci pour ta solution je vais procéder de cette manière ;)

Je suis cependant à nouveau dans une impasse (je débute sur Android).

Mon problème est le suivant :

Je charge une liste view de questions via ma base distante que j'affiche par la suite dans une vue avec un adapter seulement j'aimerai pouvoir faire saisir à l'utilisateur une note pour chacune de ses questions j'ai donc rajoutez un EditText dans mon adapteur, je ne sais si c'est la bonne méthode..  Car j'aimerais par la suite pouvoir enregistrer autant de notes qu'il y a de questions. NIveau affichage tout est bon mais lors de la validation de saisie chacune des notes est égal à nulle.

Je vous remercie par avance et je vous souhaite une bonne journée.

Voici mon code :

public class QuestionsListeAdapter extends BaseAdapter {

private ArrayList<Questions> lesQuestions;
private LayoutInflater inflater;

public QuestionsListeAdapter (Context contexte, ArrayList<Questions> lesQuestions){
this.lesQuestions = lesQuestions;
this.inflater = LayoutInflater.from(contexte);
}

@Override
public int getCount() {
return lesQuestions.size();
}

@Override
public Object getItem(int i) {
return lesQuestions.get(i);
}

@Override
public long getItemId(int i) {
return i;
}

@Override
public View getView(int i, View view, ViewGroup parent) {
ViewHolder holder;
if(view == null){
holder = new ViewHolder();
view = inflater.inflate(R.layout.layout_liste_questions, null);
holder.txtListeQuestions = (TextView)view.findViewById(R.id.txtListeQuestion);
holder.txtNote = (EditText) view.findViewById(R.id.txtNote);
view.setTag(holder);
} else {
holder = (ViewHolder) view.getTag();
}
holder.txtListeQuestions.setText(lesQuestions.get(i).getLibelle());
holder.txtNote.getText();
return view;
}

private class ViewHolder{
TextView txtListeQuestions;
EditText txtNote;
}
}
public class BIB extends Activity {

private Controle controle;
private EditText txtDateAudit;
private EditText txtAuditeur;
private TextView txtMachine;
private EditText txtNote;
private TextView txtScore;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.bib);
this.controle = Controle.getInstance(this);
créerListe();
init();
}


private void créerListe(){
ArrayList<Questions> lesQuestions = controle.getLesQuestions();
if(lesQuestions != null){
ListView lstQuestions = (ListView) findViewById(R.id.lstQuestions);
QuestionsListeAdapter adapter = new QuestionsListeAdapter(this, lesQuestions);
lstQuestions.setAdapter(adapter);
}
}

private void init(){
txtDateAudit = findViewById(R.id.Date);
txtAuditeur = findViewById(R.id.Auditeurs);
txtMachine = findViewById(R.id.Lieu);
txtNote = findViewById(R.id.txtNote);
txtScore = findViewById(R.id.Score);
ecouteCalcul();
}
private void ecouteCalcul(){
((Button) findViewById(R.id.Valider)).setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
String auditeur = "";
String dateAudit = "";
String machine = "";
Integer note = null;
try{
dateAudit = (txtDateAudit.getText().toString());
auditeur = (txtAuditeur.getText().toString());
machine = (txtMachine.getText().toString());
note = Integer.parseInt(txtNote.getText().toString());
} catch (Exception e) {};

//controle des données saisies
if (dateAudit=="" || auditeur=="" || note==null ){
Toast.makeText(BIB.this, "Saisie incorrecte (Valeur non saisie)", Toast.LENGTH_SHORT).show();
}
else if(note>5 ){
Toast.makeText(BIB.this, "Saisie incorrecte (Note supérieur à 5)", Toast.LENGTH_SHORT).show();
}
else{
afficheResult(dateAudit, auditeur, machine, note);
}
}
});
}
private void afficheResult(String dateAudit, String auditeur, String machine, Integer note){
this.controle.enregScore(dateAudit, auditeur, machine, note);
float score = this.controle.getNoteTotal();
txtScore.setText(score +"/100");
}
}

public class Score implements Serializable {

private String dateAudit;
private String auditeur;
private String machine;
private Integer note;

private Integer noteTotal;

public String getDateAudit() {
return dateAudit;
}

public String getAuditeur() {
return auditeur;
}

public String getMachine() {
return machine;
}

public Integer getNote() {
return note;
}


public Integer getNoteTotal(){
return noteTotal;
}

public Score (String dateAudit, String auditeur, String machine, Integer note) {
this.dateAudit = dateAudit;
this.auditeur = auditeur;
this.machine = machine;
this.note = note;
this.calculNote();
}

private void calculNote(){
this.noteTotal += note;
}

public JSONArray convertToJSONArray(){
List laListe = new ArrayList();
laListe.add(dateAudit);
laListe.add(auditeur);
laListe.add(machine);
laListe.add(note);
return new JSONArray(laListe);
}
}
public final class Controle {
private static Controle instance = null;
private static Score score;
private static String nomPic = "savescore";
private static AccesDistant accesDistant;
private ArrayList<Questions> lesQuestions = new ArrayList<>();

private Controle(){
super();
}

public static final Controle getInstance(Context contexte){
if(Controle.instance == null){
Controle.instance = new Controle();
accesDistant = new AccesDistant();
accesDistant.envoi("forms", new JSONArray());
}
return Controle.instance;
}

public ArrayList<Questions> getLesQuestions() {
return lesQuestions;
}

public void setLesQuestions(ArrayList<Questions> lesQuestions) {
this.lesQuestions = lesQuestions;
}

public int getNoteTotal(){
return score.getNoteTotal();
}

public void enregScore(String dateAudit, String auditeur, String machine, Integer note) {
score = new Score(dateAudit, auditeur, machine, note);
accesDistant.envoi("enreg",score.convertToJSONArray());
}
}
   <RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
tools:context=".view.BIB">

<TextView
android:id="@+id/Titre"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="3dp"
android:text="AUDIT BIB STANDARD"
android:textSize="24sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintHorizontal_bias="0.055"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.028" />

<TextView
android:id="@+id/Lieu"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/Titre"
android:layout_alignParentLeft="true"
android:layout_centerInParent="true"
android:layout_marginLeft="10dp"
android:layout_marginTop="20dp"
android:gravity="left"
android:text="OCF PAP"
android:textColor="@color/Bleu"
android:textSize="20sp" />

<EditText
android:id="@+id/Date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/Lieu"
android:layout_alignParentLeft="true"
android:layout_centerInParent="true"
android:layout_marginLeft="10dp"
android:layout_marginTop="10dp"
android:gravity="left"
android:inputType="date"
android:hint="Date (JJ/MM/AAAA)"
android:textColor="@color/Bleu"
android:textSize="20sp" />
<EditText
android:id="@+id/Auditeurs"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/Date"
android:layout_alignParentLeft="true"
android:layout_centerInParent="true"
android:layout_marginLeft="10dp"
android:layout_marginTop="10dp"
android:gravity="left"
android:hint="Auditeurs"
android:textColor="@color/Bleu"
android:textSize="20sp"
android:inputType="text" />

<LinearLayout
android:id="@+id/line"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_below="@+id/Auditeurs">

<ListView
android:id="@+id/lstQuestions"
android:layout_marginLeft="10dp"
android:layout_marginTop="10dp"
android:gravity="left"
android:textColor="@color/Bleu"
android:textSize="20sp"
android:layout_width="match_parent"
android:layout_height="2000dp" />
</LinearLayout>

<TextView
android:id="@+id/Score"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/line"
android:text="TextView" />

<Button
android:id="@+id/Valider"
android:layout_below="@+id/Score"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_centerHorizontal="true"
android:layout_weight="1"
android:textSize="15sp"
android:textColor="@color/Bleu"
android:text="Valider" />

</RelativeLayout>
</ScrollView>
<LinearLayout android:id="@+id/line"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/line1"
android:layout_marginTop="10dp"
android:layout_marginLeft="10dp"
android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android">

<TextView
android:id="@+id/txtListeQuestion"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@color/Bleu"
android:textSize="20sp"
android:text="TextView" />

<EditText
android:id="@+id/txtNote"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/Bleu"
android:textSize="20sp"
android:hint="Note"
android:inputType="number" />
</LinearLayout>
  • Partager sur Facebook
  • Partager sur Twitter