Android-приложение вылетает при вызове метода записи в файл

264
24 апреля 2018, 04:35

Пытаюсь сделать запись настроек приложения в файл, ввиду чего использую класс написанный для "простой" java. При изменении положения Сикбара в текстовый файл должно записываться число. Но почему-то при движении Сикабара приложение вылетает:

package com.pacs31.calc;
import android.app.Activity;
import android.os.Bundle;
import android.widget.SeekBar;
import android.widget.TextView;
public class SettingsActivity extends Activity {
SeekBar sB1;
TextView tvSetAc;
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_settings);
    sB1 = (SeekBar) findViewById(R.id.seekBarSettingsAccuracy);
    tvSetAc = (TextView) findViewById(R.id.tvSettingsAccuracy);
    sB1.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
        @Override
        public void onProgressChanged(SeekBar seekBar1, int progressAccuracy, boolean fromUser) {
            int progress = progressAccuracy;
            tvSetAc.setText("Accuracy: "+progressAccuracy);
            ReadNWrite.write(Integer.toString(progressAccuracy), "settingsAccuracy");
        }
        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {
        }
        @Override
        public void onStopTrackingTouch(SeekBar seekBar1) {
        }
    });
}
}

Вот класс ReadNWrite, который вызывается в Сикбаре:

package com.pacs31.calc;
import java.io.File;
import java.util.Formatter;
import java.util.Scanner;
public class ReadNWrite {
private Formatter fileF;
protected void openFileW(String fileName) {
    try {
        //fileF = new Formatter("D:\\fileSettings.txt");
        fileF = new Formatter(fileName);
        //System.out.println("Added");
    } catch (Exception e) {
        //System.out.println("Error");
    }
}
protected void addRecordW(String record) {
    fileF.format(record);
}
protected void closeFileW() {
    fileF.close();
}
//---------------------------------------------
private Scanner fileS;
protected void openFileR(String fileName) {
    try {
        //fileS = new Scanner(new File("D:\\fileSettings.txt"));
        fileS = new Scanner(new File(fileName));
        //System.out.println("Scanned");
    } catch (Exception e) {
        //System.out.println("Error");
    }
}
protected String readFileR() {
    String id = null;
    while (fileS.hasNext()) {
        id = fileS.next();
        //System.out.println(id);
    }
    return id;
}
protected void closeFileR() {
    fileS.close();
}
//------------------------------
protected static void write(String recordArg, String fileName){
    ReadNWrite func = new ReadNWrite();
    func.openFileW(fileName);
    func.addRecordW(recordArg);
    func.closeFileW();
}
protected static String read(String fileName){
    ReadNWrite func = new ReadNWrite();
    func.openFileR(fileName);
    String ret = func.readFileR();
    func.closeFileR();
    return ret;
}
}

Почему так происходит? Пробовал сделать через файл настроек типа "ключ-значение", но потерпел неудачу.

Answer 1

Для записи файла нужно получить разрешение . До 6 версии это делалось через manifest после нужно ручное протверждение

Answer 2

Вы установили разрешение на чтение и запись в манифесте? К тому же, на последних android Нужно проверять сей permision при попытки пользователя писать даннные. Посмотрите здесь https://stackoverflow.com/questions/1998400/data-directory-has-no-read-write-permission-in-android

READ ALSO
Как дать доступ к записи через пароль JavaFX

Как дать доступ к записи через пароль JavaFX

Пишу школьный проект - программа для шифрованияВ таблице TableView есть записи, на которых стоит пароль, т

213
Не работает @Controller Spring-Boot + MyBatis

Не работает @Controller Spring-Boot + MyBatis

При использовании интерфейса CommandLineRunner приложение работает как положено:

266
Десериализация через Gson

Десериализация через Gson

Нужно имея json файл заполнить все int'ы и String'ы в этом же классе(он static)

212
работа с числами в массиве java

работа с числами в массиве java

ЗдравствуйтеПытаюсь сделать некоторые операции по выводу уникальных чисел из массива, и в большинстве случаев выдается нормальный результат,...

305