procedure TAndroidModule1.SalvaDati( FileName: string; const Manutenzioni: tmanutenzioni);
.....
for i := 0 to High(Manutenzioni) do
F.WriteBuffer(Manutenzioni, SizeOf(Tmanutenzione));
.....
Scusa, magari per te è banale, ma ... AVD sarebbe ?
Dici che crasha durante il debug. Intendi dire che quando invece gira senza debug funziona tutto correttamente ?
Ciao, Mario
procedure TAndroidModule1.SalvaDati( FileName: string; const Manutenzioni: tmanutenzioni);
.....
for i := 0 to High(Manutenzioni) do
F.WriteBuffer(Manutenzioni, SizeOf(Tmanutenzione));
.....
Hai passato il tipo "tmanutenzioni" come parametro (è un array, visto che poi lo usi con l'indice ?), poi usi il sizeof(TManutenzione) ...
Deduco che il "TManutenzioni" è un array di tipo "TManutenzione" ? Tutto giusto ?
Se è così, prova nel "for" ad usare "LOW(Manutenzioni)" invece di "0".
Ciao
F.WriteBuffer(Manutenzioni[i], SizeOf(Tmanutenzione));
Manca l'indiceCodice: [Seleziona]F.WriteBuffer(Manutenzioni[i], SizeOf(Tmanutenzione));
Se sviluppi per android immagino che usi LAMW. Quindi mi chied, perchè scrivere nei file (che non sai mai le restrizioni che hai sul filesystem adesso e in futuro) e non usi il database sqlite che android mette a disposizione per i propri software?
Trovi anche diversi esempi con l'installazione di LAMW
Manca l'indiceCodice: [Seleziona]F.WriteBuffer(Manutenzioni[i], SizeOf(Tmanutenzione));
Manca l'indiceCodice: [Seleziona]F.WriteBuffer(Manutenzioni[i], SizeOf(Tmanutenzione));
anche con l'indice mi da errore readonly
procedure TAndroidModule1.SalvaDati(FileName: string; const Manutenzioni: tmanutenzioni);
var
F: TFileStream;
i: Integer;
begin
FileName := tPath.Combine(tPath.GetDocumentsPath, filename);
showmessage('salvo '+filename);
try
F := TFileStream.Create(FileName, fmCreate);
try
for i := low(Manutenzioni) to High(Manutenzioni) do
F.WriteBuffer(Manutenzioni, SizeOf(Tmanutenzione));
finally
F.Free;
end;
showmessage('Dati salvati con successo');
except
on E: Exception do
showmessage('Errore durante il salvataggio dei dati: ' + E.Message);
end;
end;
Ok, l'errore "read only" è già diverso dal crash (forse si poteva capire da un tuo precedente post).
Che versione usi di Android simulato e che versione di SDK Android si basa il tuo sviluppo (non ho LAMW installato e non sò quali sono le release) ?
In Android, c'è stato un cambio di qualche tempo fà in cui alla memoria interna si accede normalmente (non serve più la "user permission") e sulla esterna si scrive solo se il programma è "firmato" e previo set e richiesta della corrispondente "user permission". Penso che ciò valga anche per l'APK (a meno che l'utente non abbia forzato l'installazione nella memoria esterna).
GetDocumentsPath dovrebbe riferirsi alla memoria interna, e GetSharedDocumentsPath invece a quella esterna.
Se stai provando con una vecchia versione di Android, potrebbe essere che servano ancora le USER PERMISSION di scrittura e che magari LAMW non le esponga più (ad esempio ciò è quello che succede in Delphi ora).