Autore Topic: Scrivere su sdCard  (Letto 1577 volte)

Offline Matteo87

  • Utente junior
  • **
  • Post: 52
  • Respect: 0
    • Mostra profilo
Scrivere su sdCard
« il: 21 Novembre 2011, 12:27:05 CET »
0
Ciao stavo seguendo il seguente esempio dal libro di Massimo Carli per leggere e scrivere su sdcard:
Codice (Java): [Seleziona]
package it.apogeo.android.cap08.sdcardtest;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;

public class SDCardTestActivity extends Activity {
        // Colori relativi ai messaggi di successo ed errore
        private final static int SUCCESS_COLOR = Color.GREEN;
        private final static int ERROR_COLOR = Color.RED;
        // Path del file da salvare
        private final static String FILE_PATH = "mysdfile.txt";
        // TextView dei messaggi di output
        private TextView output;
        // EditText per l'input
        private EditText editText;

        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main);
                // Otteniamo il riferimento alla TextView di output
                output = (TextView) findViewById(R.id.output);
                // Otteniamo il riferimento all'EditText
                editText = (EditText) findViewById(R.id.inputText);
        }

        /**
         * Metodo di utilit‡ per il salvataggio del testo inserito
         *
         * @param button
         *            Riferimento al button
         */

        public void saveFile(View button) {
                // Riferimento al valore inserito
                CharSequence inputData = editText.getText();
                // Resettiamo il messaggio di output
                output.setText("");
                // Se diverso da null salviamo il contenuto su file
                try {
                        // Otteniamo la root della memoria esterna
                        File sdcardDir = Environment.getExternalStorageDirectory();
                        // Creiamo il riferimento al nostro file
                        File file = new File(sdcardDir,FILE_PATH);                     
                        if(!file.canWrite()){
                                output.setTextColor(ERROR_COLOR);
                                output.setText(R.string.cant_write_message);                           
                                return;
                        }
                        FileOutputStream fos = new FileOutputStream(file);
                        DataOutputStream dos = new DataOutputStream(fos);
                        dos.writeUTF(inputData.toString());
                        dos.close();
                        output.setTextColor(SUCCESS_COLOR);
                        output.setText(R.string.ok_message);
                } catch (IOException e) {
                        e.printStackTrace();
                        output.setTextColor(ERROR_COLOR);
                        output.setText(e.getMessage());
                }
        }

        /**
         * Caricamento del file e visualizzazione nella EditText
         *
         * @param button
         *            Riferimento al Button
         */

        public void loadFile(View button) {
                // Leggiamo il file
                try {
                        // Otteniamo la root della memoria esterna
                        File sdcardDir = Environment.getExternalStorageDirectory();
                        // Creiamo il riferimento al nostro file
                        File file = new File(sdcardDir,FILE_PATH);
                        if(!file.canRead()){
                                output.setTextColor(ERROR_COLOR);
                                output.setText(R.string.cant_read_message);                            
                                return;
                        }                              
                        FileInputStream fis = new FileInputStream(file);                       
                        DataInputStream dis = new DataInputStream(fis);
                        String text = dis.readUTF();
                        dis.close();
                        output.setTextColor(SUCCESS_COLOR);
                        editText.setText(text);
                        output.setText(R.string.ok_message);
                } catch (IOException e) {
                        e.printStackTrace();
                        output.setTextColor(ERROR_COLOR);
                        output.setText(e.getMessage());
                }
        }

        /**
         * Cancellazione del file e visualizzazione nella EditText
         *
         * @param button
         *            Riferimento al Button
         */

        public void deleteFile(View button) {
                // Otteniamo la root della memoria esterna
                File sdcardDir = Environment.getExternalStorageDirectory();
                // Creiamo il riferimento al nostro file
                File file = new File(sdcardDir,FILE_PATH);
                if(!file.canWrite()){
                        output.setTextColor(ERROR_COLOR);
                        output.setText(R.string.cant_write_message);                           
                        return;
                }              
                boolean deleted = false;
                try {
                        deleted = file.delete();
                        output.setTextColor(SUCCESS_COLOR);
                        output.setText("Deleted:" + deleted);
                        editText.setText("");
                } catch (SecurityException se) {
                        se.printStackTrace();
                        deleted= false;
                        output.setTextColor(ERROR_COLOR);
                        output.setText(se.getMessage());
                }
        }

}

Ho aggiunto anche il permesso nel manifest    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> ma se provo a salavare un file mi dice "non posso scrivere" .. come posso fare ?

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Scrivere su sdCard
« Risposta #1 il: 21 Novembre 2011, 12:42:29 CET »
0
Visto non lo ha specificato, ti faccio queste domande:
- su emulatore o su device fisico?
- se emulatore, hai creato una SDCARD in fase di creazione AVD?
- se device fisico, ce l'ha una SDCARD?
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Luigi.Arena

  • Utente senior
  • ****
  • Post: 616
  • DACIA DUSTER 4X4 SUPER
  • Respect: +56
    • Mostra profilo
    • ArenaWebTest
  • Dispositivo Android:
    epad m009
  • Play Store ID:
    Luigi Arena
  • Sistema operativo:
    Windows 7
Re:Scrivere su sdCard
« Risposta #2 il: 21 Novembre 2011, 12:56:10 CET »
0
Oltre a quello che ti ha suggerito da Bradipao.
Puoi fare questo test:
1)Avvia l'emulatore
2)Dal menù di windows --> open perspective -->Other
poi scegli DDMS
3)Seleziona il tab file explorer e posizionati nella cartella mnt-->sdcard
4)prova a vedere che permessi hai settato ed inoltre prova a copiarci un file
Così facendo questa prova puoi escludere il rpoblema nel tuo codice.

In allegato l'immagine della mia sdcard con i permessi corretti
È stata trovata una soluzione al tuo problema?Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato .

Offline Matteo87

  • Utente junior
  • **
  • Post: 52
  • Respect: 0
    • Mostra profilo
Re:Scrivere su sdCard
« Risposta #3 il: 21 Novembre 2011, 13:12:03 CET »
0
Si scusa, uso l'emulatore e ho creato l'sdcard.
Si luigi la mia situazione nel file explorer è identica alla tua, anche con i permessi. Infatti se avvio l'app e premo sul pulsante carica file(un txt) si ferma su questa istruzione  "String text = dis.readUTF();" quindi il file lo vede, ma non mi carica il contenuto, e se ne provo a creare uno nuovo mi dice impossibile scrivere  :-(
 

Offline Matteo87

  • Utente junior
  • **
  • Post: 52
  • Respect: 0
    • Mostra profilo
Re:Scrivere su sdCard
« Risposta #4 il: 21 Novembre 2011, 19:44:53 CET »
0
non riesco nemmeno a salvare un file in un punto diverso dalla cartella files delll'app che lo crea. Ad esempio
Codice (Java): [Seleziona]
try {
                        FileOutputStream fos = openFileOutput(FILE_PATH, mode);
                        DataOutputStream dos = new DataOutputStream(fos);
                        dos.writeUTF(inputData.toString());
                        dos.close();
con FILE_PATH="myFile.txt" crea il file in files, ma se specifico un altro path l'app mi da errore, ad esempio /data/myFiles

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Scrivere su sdCard
« Risposta #5 il: 21 Novembre 2011, 20:20:14 CET »
0
non riesco nemmeno a salvare un file in un punto diverso dalla cartella files delll'app che lo crea. Ad esempio
Codice (Java): [Seleziona]
try {
                        FileOutputStream fos = openFileOutput(FILE_PATH, mode);
                        DataOutputStream dos = new DataOutputStream(fos);
                        dos.writeUTF(inputData.toString());
                        dos.close();
con FILE_PATH="myFile.txt" crea il file in files, ma se specifico un altro path l'app mi da errore, ad esempio /data/myFiles

beh credo che questo sia normale, non puoi scrivere dove ti pare e piace, ma solo in ben determinate cartelle, come appunto "files".
Hai poi risolto il quesito iniziale?

Offline Matteo87

  • Utente junior
  • **
  • Post: 52
  • Respect: 0
    • Mostra profilo
Re:Scrivere su sdCard
« Risposta #6 il: 21 Novembre 2011, 20:34:54 CET »
0
risolto
« Ultima modifica: 21 Novembre 2011, 20:55:32 CET da Matteo87 »

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Scrivere su sdCard
« Risposta #7 il: 21 Novembre 2011, 20:56:31 CET »
0
Per pura curiosità, ma se toglie la parte dove controlli se può scrivere...

Codice (Java): [Seleziona]
if(!file.canWrite())
...
...

poi scrive?

NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Matteo87

  • Utente junior
  • **
  • Post: 52
  • Respect: 0
    • Mostra profilo
Re:Scrivere su sdCard
« Risposta #8 il: 21 Novembre 2011, 21:18:00 CET »
0
sisi scrive!

Offline froyo

  • Utente junior
  • **
  • Post: 81
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    desire
  • Sistema operativo:
    2.3
Re:Scrivere su sdCard
« Risposta #9 il: 30 Novembre 2011, 23:17:42 CET »
0
ragazzi a me serve il codice per creare leggere e scrivere un file su un path da me definito nel sd

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Scrivere su sdCard
« Risposta #10 il: 30 Novembre 2011, 23:20:47 CET »
0
ragazzi a me serve il codice per creare leggere e scrivere un file su un path da me definito nel sd

write file sd card android