Salve a tutti,
sono nuovo da queste parti e in generale sul mondo della programmazione Java, linguaggio che mi ha sempre affascinato e sono qui a chiedervi aiuto. Sto cercando di capire come funzionano le classi ecc ecc dopo aver seguito un corso online puramente basato sulla teoria, ora però il problema è che non riesco a mettere bene in pratica le mie conoscienze. Voglio creare una semplice applciazione per android che mi consenta di CREARE UN FILE IN UNA DIRECTORY per poi passare al metodo DELETE in seguito, sono sicuro che ho sbagliato qualcosa ma non riesco proprioa capire cosa (scusatemi fin da ora se fosse una bagianata)
Utilizzo i seguenti strumenti:
- Android Studio 3.1
- Riesco ad emulare la mia App su un samnsung Galaxy tab 3 (android 6 masmallow)
- ho impostato android studio per scrivere in compatibilità con la 5.0 come suggerito dal programma/ide stesso
- sto seguendo questa guida per le classi da utilizzare per il mio scopo
http://www.html.it/articoli/creazione-eliminazione-lettura-e-scrittura-di-file-di-testo-1/
Di seguito posto il codice fin'ora stilato (
activity.main.xml per l'interfaccia)
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@+id/deleteButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:onClick="deleteFile"
android:text="CANCELLA"
android:visibility="visible"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/newButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:onClick="newFile"
android:text="NEW FILE"
android:visibility="visible"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>
Di seguito invece il cuore dell' app
Main.activity.java :
package com.example.mufas.bookonline;
import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import java.io.File;
import java.io.FileReader;
import java.io.BufferedReader;
import java.io.FileWriter;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.FileFilter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void deleteFile(View view) {
//qui istruzioni metodo
}
public void newFile(View view) {
File path = Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_DOWNLOADS);
try {
File file = new File(path, "esempio.txt");
if (file.exists()) {
System.out.println("Il file " + path + " esiste");
} else if (file.createNewFile()) {
System.out.println("Il file " + path + " è stato creato");
} else {
System.out.println("Il file " + path + " non può essere creato");
}
// Make sure the Pictures directory exists.
path.mkdirs();
} catch (IOException e) {
e.printStackTrace();
}
}
}
qui invece il
Manifest.xml come potete vedere ho settato anche tutti per i permessi di lettura e scrittura per la memoria esterna ed esterna
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.mufas.bookonline">
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_INTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET" />
<application
android:isolatedProcess="true"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Posto anche il log degli errori per completezza:
Scheduling ad refresh 60000 milliseconds from now.
04-11 21:42:37.511 32191-32191/com.example.mufas.bookonline W/System.err: java.io.IOException: open failed: ENOENT (No such file or directory)
at java.io.File.createNewFile(File.java:939)
at com.example.mufas.bookonline.MainActivity.newFile(MainActivity.java:45)
at java.lang.reflect.Method.invoke(Native Method)
at android.view.View$DeclaredOnClickListener.onClick(View.java:4453)
at android.view.View.performClick(View.java:5204)
at android.view.View$PerformClick.run(View.java:21153)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
04-11 21:42:37.512 32191-32191/com.example.mufas.bookonline W/System.err: Caused by: android.system.ErrnoException: open failed: ENOENT (No such file or directory)
at libcore.io.Posix.open(Native Method)
at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186)
at java.io.File.createNewFile(File.java:932)
... 12 more
ed infine anche il Gradle :
apply plugin: 'com.android.application'
android {
compileSdkVersion 27
defaultConfig {
applicationId "com.example.mufas.bookonline"
minSdkVersion 21
targetSdkVersion 27
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support.constraint:constraint-layout:1.0.2'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.1'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
}
Risultato l'app viene correttamente eseguita ma il file non viene creato dove sbaglio? Ripeto il mio prossimo step sarebbe quello di poter eliminare un file in una directory precisa (bottone cancella) ed inviarlo a un server remoto si tratterà di un csv e non di un txt.
Grazie a tutti e buon lavoro, e scusate se tutto ciò vi sembra stupido oppure ho scritto oscenità.