je suis nouveau sur Android et j'ai un problème lorsque j'essaie d'enregistrer un fichier dans la mémoire interne, le nouvel exemple fonctionne sur mon SDK, mais ne fonctionne pas sur mon téléphone.
J'essaie d'exécuter de l'exemple dans un Sony Ericsson xperia, avec Android 2.1 d'ailleurs ... le log.i - me donne la ligne suivante:
/data/data/com.example.key/files/text/(my_title)
Merci.
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.new_text);
file = (EditText) findViewById(R.id.title_new);
entry = (EditText) findViewById(R.id.entry_new);
btn = (Button) findViewById(R.id.save_new);
btn.setOnClickListener( new OnClickListener() {
@Override
public void onClick(View v) {
File myDir = getFilesDir();
NEWFILENAME = file.getText().toString();
if (NEWFILENAME.contentEquals("")){
NEWFILENAME = "UNTITLED";
}
NEWENTRY = entry.getText().toString();
try {
File file_new = new File(myDir+"/text/", NEWFILENAME);
file_new.createNewFile();
Log.i("file", file_new.toString());
if (file_new.mkdirs()) {
FileOutputStream fos = new FileOutputStream(file_new);
fos.write(NEWENTRY.getBytes());
fos.flush();
fos.close();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Intent textPass = new Intent("com.example.TEXTMENU");
startActivity(textPass);
}
});
}
//That's for creating... then in other activity i'm reading
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.text_menu);
btn = (Button) findViewById(R.id.newNote);
listfinal = (ListView) findViewById(R.id.listView);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent textPass = new Intent("com.example.TEXTNEW");
startActivity(textPass);
}
});
listfinal.setOnItemClickListener(this);
File fileWithinMyDir = getApplicationContext().getFilesDir();
loadbtn = (Button) findViewById(R.id.loadList);
loadbtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
File myDir = getFilesDir();
File dir = new File(myDir + "/text/");
String[] files = dir.list();
//String[] files = getApplicationContext().fileList();
List<String> list = new ArrayList<String>();
for (int i =0; i < files.length; i++){
list.add(files[i]);
}
ArrayAdapter<String> ad = new ArrayAdapter<String>(TextMenu.this, Android.R.layout.simple_list_item_1,
Android.R.id.text1, list);
listfinal.setAdapter(ad);
}
});
}
dans mon Android manifiest j'ai les autorisations
<uses-sdk
Android:minSdkVersion="5"
Android:targetSdkVersion="15" />
<uses-permission Android:name="Android.hardware.camera" />
<uses-permission Android:name="Android.permission.INTERNET" />
<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission Android:name="Android.permission.WRITE_INTERNAL_STORAGE" />
Je ne sais pas trop à quel exemple vous faites référence, mais j'ai ici deux exemples de travail dont au moins un devrait répondre à vos besoins. Je les ai testés sur un X10 exécutant le numéro de build 2.1.A.0.435, un Xperia T exécutant le numéro de build 7.0.A.1.303 et un Nexus S exécutant le numéro de build JZO54K
Exemple 1
String filename = "myfile";
String outputString = "Hello world!";
try {
FileOutputStream outputStream = openFileOutput(filename, Context.MODE_PRIVATE);
outputStream.write(outputString.getBytes());
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
try {
FileInputStream inputStream = openFileInput(filename);
BufferedReader r = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder total = new StringBuilder();
String line;
while ((line = r.readLine()) != null) {
total.append(line);
}
r.close();
inputStream.close();
Log.d("File", "File contents: " + total);
} catch (Exception e) {
e.printStackTrace();
}
Exemple 2
String filename = "mysecondfile";
String outputString = "Hello world!";
File myDir = getFilesDir();
try {
File secondFile = new File(myDir + "/text/", filename);
if (secondFile.getParentFile().mkdirs()) {
secondFile.createNewFile();
FileOutputStream fos = new FileOutputStream(secondFile);
fos.write(outputString.getBytes());
fos.flush();
fos.close();
}
} catch (Exception e) {
e.printStackTrace();
}
try {
File secondInputFile = new File(myDir + "/text/", filename);
InputStream secondInputStream = new BufferedInputStream(new FileInputStream(secondInputFile));
BufferedReader r = new BufferedReader(new InputStreamReader(secondInputStream));
StringBuilder total = new StringBuilder();
String line;
while ((line = r.readLine()) != null) {
total.append(line);
}
r.close();
secondInputStream.close();
Log.d("File", "File contents: " + total);
} catch (Exception e) {
e.printStackTrace();
}
J'ai eu un problème "Autorisation refusée" avec Samsung Galaxy S7 même si j'avais donné des autorisations de lecture et d'écriture dans le fichier manifeste. Je l'ai résolu en accédant aux paramètres du téléphone >> application >> [mon application] et j'ai autorisé "Stockage" sous autorisation. A bien fonctionné après cela.