PC SOFT

GRUPOS DE DISCUSSÃO PROFISSIONAL
WINDEVWEBDEV e WINDEV Mobile

Inicio → WINDEV Mobile 2024 → Problème de stockage des fichiers de l'application
Problème de stockage des fichiers de l'application
Iniciado por Pascal BOULESTEIX, jul., 20 2024 9:03 AM - 7 respostas
Membro registado
1.006 mensagems
Popularité : +16 (20 votes)
Publicado em julho, 20 2024 - 9:03 AM
Salut à tous
Je suis devant un problème. Quand mon application démarre en zone blanche, le dossier des fichiers de l'application n'est pas le bon !
En d'autres mots, dans l'init du projet, un des premières choses qui soit faite est de changer le dossier des fichiers de l'application par un

SI HChangeRep("*",gsRepDatas)=Faux ALORS
Erreur("ERR50","Erreur HFSQL : " + HErreurInfo())

Trace ("myTrace : erreur HChangeRep >>"+HErreurInfo())

SINON

Trace ("myTrace : après HChangeRep >>"+gsRepDatas)

FIN


ce qui donne dans le logcat
myTrace : après HChangeRep >>/storage/emulated/0/Android/data/fr.saxrub.visiolittoral/files/Documents/fr.saxrub.wnat_mobile/Datas


que l'on soit en zone blanche ou pas, le hChangeRep ne génère pas d'erreur et pointe bien au bon endroit

Là ou ça se corse, c'est lors de la lecture d'un fichier HFSQL.

Dans le cas de
Trace("myTRACE : gPROC_RETREIVE_USER_INFO 1")

HLitPremier(SESSION_PARAM)

Trace("myTRACE : gPROC_RETREIVE_USER_INFO 1 SESSION_PARAM dossier ="+SESSION_PARAM..Répertoire)
Trace("myTRACE : gPROC_RETREIVE_USER_INFO 1 SESSION_PARAM nom sur disque ="+SESSION_PARAM..NomPhysique)
Trace("myTRACE : gPROC_RETREIVE_USER_INFO 1 SESSION_PARAM NbEnr="+HNbEnr(SESSION_PARAM))

SI HTrouve() = Vrai ALORS
Trace("myTRACE : gPROC_RETREIVE_USER_INFO 2")


en zone pas blanche, on trouve retrouve bien dans le logcat le bon lieu de stockage des fichiers FHSQL et le contenu de SESSION_PARAM est correcte alors qu'en zone blanche, le chemin est différent et chose extraordinaire, SESSION_PARAM contient des données, qui sont vraisemblables mais fausses

Logcat "normal"
myTRACE : gPROC_RETREIVE_USER_INFO 1
myTRACE : gPROC_RETREIVE_USER_INFO 1 SESSION_PARAM dossier =/storage/emulated/0/Android/data/fr.saxrub.visiolittoral/files/Documents/fr.saxrub.wnat_mobile/Datas
myTRACE : gPROC_RETREIVE_USER_INFO 1 SESSION_PARAM nom sur disque =session_param
myTRACE : gPROC_RETREIVE_USER_INFO 1 SESSION_PARAM NbEnr=1
myTRACE : gPROC_RETREIVE_USER_INFO 2
myTRACE : gPROC_RETREIVE_USER_INFO 2 SESSION_PARAM ENUM ={ "SESSION_PARAM":{ "IDSESSION_PARAM":1, "ORGANISME":"Visiolittoral", "CODE_USER":2, "EMAIL":"Pascal.boulesteix@saxrub.fr", "KEEP_CONNECT":1, "IDTERRITOIRE":9, "IDLAST_CLASSE":11, "DATE_HEURE_AUTO":1, "LONG_LAT_AUTO":1, "LISTE_ESPECES":3, "INDICES_LISTE_COURTE":0, "NBR_USE":238, "WRITE_LOG":0= } }


Logcat zone blanche
myTRACE : gPROC_RETREIVE_USER_INFO 1
myTRACE : gPROC_RETREIVE_USER_INFO 1 SESSION_PARAM dossier =/data/user/0/fr.saxrub.visiolittoral/databases
myTRACE : gPROC_RETREIVE_USER_INFO 1 SESSION_PARAM nom sur disque =session_param
myTRACE : gPROC_RETREIVE_USER_INFO 1 SESSION_PARAM NbEnr=1
myTRACE : gPROC_RETREIVE_USER_INFO 2
myTRACE : gPROC_RETREIVE_USER_INFO 2 SESSION_PARAM ENUM ={ "SESSION_PARAM":{ "IDSESSION_PARAM":1, "ORGANISME":"Visiolittoral", "CODE_USER":2, "EMAIL":"Pascal.boulesteix@saxrub.fr", "KEEP_CONNECT":1, "IDTERRITOIRE":9, "IDLAST_CLASSE":0, "DATE_HEURE_AUTO":1 } }
myTRACE : gPROC_RETREIVE_USER_INFO 3 1
myTRACE : gPROC_RETREIVE_USER_INFO 3 GPSSATELLITE


Question : pourquoi /storage/emulated/0/Android/data/fr.saxrub.visiolittoral/files/Documents/fr.saxrub.wnat_mobile/Datas est-il remplacé par /data/user/0/fr.saxrub.visiolittoral/databases ? Où puis-je trouver /data/user/0/fr.saxrub.visiolittoral/databases sur le téléphone ?

--
Pascal Boulesteix
Applications Visiolittoral et WNat
Membro registado
3.434 mensagems
Popularité : +93 (137 votes)
Publicado em julho, 20 2024 - 7:43 PM
Salut
C'est très bizarre ton histoire
Mon application en wm25 ne fonctionne pas avec internet et je n'ai pas ce problème
J'ai toujours mes données.
Il faut dire que je n'utilise jamais HChangeRep
Quel est ton code de remplissage de ta variable gsRepDatas
Bien sûr si ton code change selon zone blanche ou pas merci de donner toutes les versions
Membro registado
1.006 mensagems
Popularité : +16 (20 votes)
Publicado em julho, 21 2024 - 10:39 AM
Notez que l'utilisation de SysRepStockageExterne est une relique du temps ou on pouvez conserver les fichiers d'une installation à une autre et du stockage sur carte SD. Je pourrais simplifier aujourd'hui.

gnNumStockageExterne=1
Trace("myTrace fRepEnCours : "+fRepEnCours)
gsRepRacine= SysRepStockageExterne (gnNumStockageExterne, sseAppDocument )
Trace("myTrace gsRepRacine : "+gsRepRacine)
gsRepRacineApp= gsRepRacine+[fSep()]+"fr.saxrub.wnat_mobile"+[fSep()]
Trace("myTrace gsRepRacineApp : "+gsRepRacineApp)

QUAND EXCEPTIONEXCEPTION DANS
lnNumFichier = fOuvre( gsRepRacine+[fSep()]+"test_ecriture.txt",foCréation)
fEcritLigne(lnNumFichier,sInfoRépertoire)
fFerme(lnNumFichier)
<Compile SI TypeConfiguration=Android>
lnNumFichier = fOuvre( gsRepRacine+[fSep()]+"test_permission.txt",foCréation)
POUR TOUT ÉLÉMENT Perm de PermissionListe()
fEcritLigne(lnNumFichier,Perm.Nom+"/"+Perm.Description+"/"+Perm.Accordé)
FIN
fFerme(lnNumFichier)
<FIN>
FAIRE
Info("ATTENTION REQUISE !","La vérification de l'autorisation de création et d'accès aux fichiers du téléphone a échoué !","","Veuillez désinstaller et réinstaller l'application et choisissez d'autoriser l'accès aux fichiers quand il sera demandé")
RETOUR
FIN

gsRepDatas= gsRepRacineApp+[fSep()]+"Datas"


--
Pascal Boulesteix
Applications Visiolittoral et WNat
Membro registado
3.434 mensagems
Popularité : +93 (137 votes)
Publicado em julho, 21 2024 - 1:48 PM
Salut
Dans ton code, je ne vois rien en rapport avec internet.
Tout ce que je peux te dire c'est que
/storage/emulated/0/Android/data/fr.saxrub.visiolittoral/files/Documents/
C'est le répertoire documents de ton application

Et /data/user/0/fr.saxrub.visiolittoral/databases
C'est le répertoire des données utilisateur pour ton application

Tout les deux sont dans la mémoire interne Android et pas sur la SDCARD

En gros, je ne sais pas répondre à ta question.
Membro registado
369 mensagems
Publicado em julho, 22 2024 - 3:29 PM
Bonjour,
Reprenons : il y a une différence entre présence d'internet qu'on appellera "mode connecté" ou pas d'internet, qu'on nommera "hors-connexion". Je suppose que tes traitements tiennent compte de l'un ou de l'autre cas.
Lorsque tu es en mode "hors-connexion", est-ce que tu passes bien par le code :
gsRepRacine= SysRepStockageExterne (gnNumStockageExterne, sseAppDocument )
Trace("myTrace gsRepRacine : "+gsRepRacine)
gsRepRacineApp= gsRepRacine+[fSep()]+"fr.saxrub.wnat_mobile"+[fSep()]
Trace("myTrace gsRepRacineApp : "+gsRepRacineApp)

De plus, parviens-tu à localiser tes 2 fichiers texte (test_ecriture.txt et test_permission.txt) ?
Leur horodatage correspond-il au test en cours ?
Leur emplacement est-il le bon ou en correspondance avec ce qu'indique les Trace() (/data/user/0/...) ?

Enfin, as-tu vérifié les propriétés du fichier de données, onglet "Détail", "Répertoire par défaut du fichier de données" ?
Membro registado
1.006 mensagems
Popularité : +16 (20 votes)
Publicado em julho, 24 2024 - 8:15 AM
Bonjour
1 - en zone blanche on est en "mode connecté", l'internet est pourri mais il fonctionne. Si j'active le mode avion je n'ai pas de problème.
2 - qu'on soit "code connecté" ou pas, on passe bien sur le code indiqué
3 - quand ça fonctionne, si je regarde les fichiers textes, ils sont bien au bon endroit et au bon timestamp
4 - malheureusement, je ne sais pas accéder avec un explorateur au dossier /data/user/0/fr.saxrub.visiolittoral/databases : si vous avez une astuce, je prends (il semblerait que le lieu de stockage diffère selon les téléphones ; moi, j'utilise un samsung galaxy s24 android 14)
5 - dans l'analyse le dossier est "Répertoire de l'application"

S'il y a un volontaire, je peux organiser une visio pour une lecture critique du code de démarrage de mon projet. Me contacter en privé (email dans le playstore de mes applications)

--
Pascal Boulesteix
Applications Visiolittoral et WNat
Mensagem modificada, julho, 24 2024 - 8:22 AM
Membro registado
369 mensagems
Publicado em julho, 25 2024 - 12:36 PM
Bonjour Pascal,

Peux-tu nous dire ce qu'affiche un Trace de SESSION_PARAM..Répertoire juste après le HChangeRep ?
Puisqu'il ne s'agit pas d'une histoire de connexion, qu'est-ce qui te fait croire que c'est la qualité de la connexion qui détermine le changement de comportement ?
Que donne un essai avec un autre appareil (en Android 14 aussi, ou en Android 9) ?

Sinon,
Je suis remonté au début du sujet. Tu dis que tu fais ton HChangeRep (et donc ton SysRepStockageExterne) dans l'init du projet, ce qui m'étonne et voilà pourquoi.
Si pour une raison ou pour une autre tu dois faire valider une permission de stockage à l'utilisateur, le dialogue risque d'être caché par ta première fenêtre. Depuis Android10(11?) ces histoires de stockage sont devenues contraignantes. J'ai moi-même été confronté à cette demande de permission qui était cachée (MANAGE_EXTERNAL_STORAGE). Ca vaut pour toutes les permissions qui doivent être demandées "manuellement". J'avais alors déménagé ces traitements (dont SysRepStockageExterne) dans la fin d'init de ma première fenêtre. Depuis tout va bien.
N'y aurait-il pas qqc à fouiller de ce côté ?
Autre chose : as-tu essayé d'insérer un SysEtatStockageExterne avant le SysRepStockageExterne ?

A bientôt !
Membro registado
1.006 mensagems
Popularité : +16 (20 votes)
Publicado em julho, 25 2024 - 3:03 PM
/storage/emulated/0/Android/data/fr.saxrub.visiolittoral/files/Documents/fr.saxrub.wnat_mobile/Datas est le répertoire, ce qui est normal. Le problème c'est que je n'ai pas de trace "après hchangeRep" (que j'ai ajouté récemment) quand ça plante !
Hier, j'ai fait des tests aux endroits (zones blanches) où je reproduisais le problème mais malheureusement, je n'y suis pas arrivé (hormis les traces que j'ai rajouté, le code et la cinématique d'initialisation n'ont pas été changés).
Bref, je ne sais quoi dire à l'heure qu'il est.
Tu parles de problème de connexion ; j'utilise du HFSQL classique et je ne fais pas de connexions explicites.
Comme je le dis plus haut, tout ce qui tourne autour de SysRepStockageExterne est une relique du passé. Je vais simplifier tout ça.
Si tu veux on fait une visio .

--
Pascal Boulesteix
Applications Visiolittoral et WNat