Autore Topic: save edittext  (Letto 926 volte)

Offline fillo

  • Nuovo arrivato
  • *
  • Post: 9
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Window 7
save edittext
« il: 12 Febbraio 2012, 16:10:53 CET »
0
ciao di nuovo a tutti! allora vi spieo sto creando un applicazione capace di creare file .txt e di salvarli solo che, quando clicco sul pulsante "Save" mi salva il testo sul file precedentemente salvato...allora io volendo distinguere i due file (esempio: scrivo sulla mia app la prima volta "ciao" salvo,esco dall'app,riapro l'app scrivo "bella" e salvo. Il secondo file "bella" viene salvato sul primo file) quindi ho creato il bottone new ovvero nuovo testo...ma non so come impostare che quando clicco su questo bottone e poi su salva mi generi un altro file diverso da quello precedente in modo da non sovrasscriverlo....io sono messo così: (immagine allegate) grazie a tutti in anticipo
« Ultima modifica: 13 Febbraio 2012, 00:15:02 CET da fillo »

Offline undead

  • Utente senior
  • ****
  • Post: 666
  • Respect: +113
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S6
  • Play Store ID:
    DrKappa
  • Sistema operativo:
    Windows 10 64-bit, Windows 8.1 64-bit
Re:Bottone (nuovo edittext)
« Risposta #1 il: 12 Febbraio 2012, 16:32:07 CET »
0
Ti consiglio di utilizzare i tag code=java, allegare immagini non è il massimo per te che invii e per noi che leggiamo.

Ad occhio e croce puoi controllare se il file esiste e se esiste puoi salvarlo con un altro nome. Per esempio per la cartella downloads sullo storage esterno...

Codice (Java): [Seleziona]
String myPath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);

File file = new File(myPath, nomefile);
        if( !file.exists() )
                return false;

Per distinguerli la prima cosa che mi viene in mente è banalmente un sistema del genere:

Codice (Java): [Seleziona]
String m_sBaseFileName = "miofile-";
Integer m_nBaseFileNumber = 0;
String m_sBaseFileExt = ".txt";

Componendo il nome del file come miofile-0.txt miofile-1.txt e così via puoi verificare se il file esiste già.

EDIT: su indicazione di fillo, che ringrazio, ho specificato meglio cosa intendevo per "iltuopath", diventato "mypath" dopo l'edit.

 ;-)
« Ultima modifica: 12 Febbraio 2012, 16:46:46 CET da undead »

Offline fillo

  • Nuovo arrivato
  • *
  • Post: 9
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Window 7
Re:Bottone (nuovo edittext)
« Risposta #2 il: 12 Febbraio 2012, 17:02:48 CET »
0
ho fatto come hai detto soltanto che mi da un errore,non mi riconsce la funzione catch (l'ultima) :
Codice (Java): [Seleziona]
package mine.jimdoteam.programma2;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.inputmethod.EditorInfo;
import android.widget.Button;
import android.widget.EditText;

public class Programma2Activity extends Activity {
    public EditText edittext;
    public Button save, newtext;
    public String input;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        edittext = (EditText) findViewById(R.id.edittext);
        edittext.setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI);
        save = (Button)findViewById(R.id.save);
        save.setOnClickListener(btnListener);
        newtext = (Button)findViewById(R.id.newtext);
        newtext.setOnClickListener(btnListener);
    }
    private OnClickListener btnListener = new OnClickListener() {
        public void onClick(View v) {
            input = edittext.getText().toString();
            File file = new File(Environment.getExternalStorageDirectory(), "fileGregory.txt");
            if ( !file.exists() )
                return false;
                BufferedWriter writer = new BufferedWriter(new FileWriter(file,true));
                writer.write(input);
                writer.newLine();
                writer.flush();
                writer.close();
                String m_sBaseFileName = "fileGregory-";
                Integer m_nBaseFileNumber = 0;
                String m_sBaseFileExt = ".txt";
            }
            catch (IOException e) {
                e.printStackTrace();
            }
        }
    ;
}
« Ultima modifica: 12 Febbraio 2012, 17:04:36 CET da fillo »

Offline undead

  • Utente senior
  • ****
  • Post: 666
  • Respect: +113
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S6
  • Play Store ID:
    DrKappa
  • Sistema operativo:
    Windows 10 64-bit, Windows 8.1 64-bit
Re:Bottone (nuovo edittext)
« Risposta #3 il: 12 Febbraio 2012, 17:12:14 CET »
0
Il problema è quando tu carichi il file con:

Codice (Java): [Seleziona]
file = new File(Environment.getExternalStorageDirectory(), "fileGregory.txt");
Hai già deciso che il nome del file è fileGregory.txt. Devi comporlo in questo modo per esempio:

Codice (Java): [Seleziona]
String myFileName = m_sBaseFileName;
myFileName += m_nBaseFileNumber.toString();
myFileName += m_sBaseFileExt;

File file = new File(Environment.getExternalStorageDirectory(), myFileName);

Le dichiarazioni di m_sBaseFileName,m_nBaseFileNumber,m_sBaseFileExt devono stare nella classe, non nel metodo. Questo perchè m_nBaseFileNumber è l'Integer che ti distingue i files e se lo metti lì tornerà sempre ad essere 0 invece tu vuoi incrementarlo con m_nBaseFileNumber++ ogni volta che scrivi (o ogni volta che premi un bottone o altro).

Diciamo che puoi organizzarla in molti modi differenti il principio però rimane: devi trovare un modo per avere dei file con dei nomi univoci (nel mio esempio aumenti l'intero m_nBaseFileNumber) e prima di scrivere devi controllare se il file esiste.

Occhio però che ad ogni esecuzione riparte da zero. Se non vuoi che questo accada puoi utilizzare le sharedpreferences salvando/caricando m_nBaseFileNumber.

EDIT: non puoi riportare false la funzione è void.  ;-) Scrivi solo se il file non esiste.
« Ultima modifica: 12 Febbraio 2012, 17:24:32 CET da undead »

Offline fillo

  • Nuovo arrivato
  • *
  • Post: 9
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Window 7
Re:Bottone (nuovo edittext)
« Risposta #4 il: 12 Febbraio 2012, 17:28:03 CET »
0

Anche così mi da sempre errore in "catch" (scusa la mia ignoranza ma non ho mai programmato)


Codice (Java): [Seleziona]
package mine.jimdoteam.programma2;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.inputmethod.EditorInfo;
import android.widget.Button;
import android.widget.EditText;

public class Programma2Activity extends Activity {
    public EditText edittext;
    public Button save, newtext;
    public String input;
    String m_sBaseFileName = "file-";
    Integer m_nBaseFileNumber = 0;
    String m_sBaseFileExt = ".txt";
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        edittext = (EditText) findViewById(R.id.edittext);
        edittext.setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI);
        save = (Button)findViewById(R.id.save);
        save.setOnClickListener(btnListener);
        newtext = (Button)findViewById(R.id.newtext);
        newtext.setOnClickListener(btnListener);
    }
    private OnClickListener btnListener = new OnClickListener() {
        public void onClick(View v) {
            input = edittext.getText().toString();
            File file = new File(Environment.getExternalStorageDirectory(), "fileGregory.txt");
            if ( !file.exists() )
                return false;
                BufferedWriter writer = new BufferedWriter(new FileWriter(file,true));
                writer.write(input);
                writer.newLine();
                writer.flush();
                writer.close();

            }
            catch (IOException e) {
                e.printStackTrace();
            }
        }
    ;
}

Offline undead

  • Utente senior
  • ****
  • Post: 666
  • Respect: +113
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S6
  • Play Store ID:
    DrKappa
  • Sistema operativo:
    Windows 10 64-bit, Windows 8.1 64-bit
Re:Bottone (nuovo edittext)
« Risposta #5 il: 12 Febbraio 2012, 17:42:23 CET »
+1
Fai attenzione alle parentesi e se se vuoi catturare una eccezione di IO col catch metti un try attorno ai comandi dei file:

Codice (Java): [Seleziona]
    private OnClickListener btnListener = new OnClickListener() {
        // Inizia la definizione della classe listener
        public void onClick(View v) {
        // Inizia la definizione del metodo onlick
            input = edittext.getText().toString();
            try{
           // Inizia il try
         
          // Qui ci va il tuo codice che usa i files

           // Finisce il try
             }
            catch (IOException e) {
           // Cattura le eccezioni IO all'interno del blocco try
                e.printStackTrace();
            }
          // Finisce la definizione del metodo onlick
        }
          // Finisce la definizione della classe
        };

Offline Brig

  • Nuovo arrivato
  • *
  • Post: 17
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S
  • Sistema operativo:
    Ubuntu 10.4, Windows 7
Re:save edittext
« Risposta #6 il: 13 Febbraio 2012, 22:57:03 CET »
0
oppure con un approccio un po diverso:
ti stabilisci un "marcatore fine file", lo metti in coda al testo che vuoi scrivere nel file e quando lo riapri lo fai in modalità append.
Per recuperare e distinguere i testi leggi fino al marcatore, quello è un testo... ripeti l'operazione fino alla fine del file XD