AndroidStudio - сохранить информацию о пользователе в CSV-файл и прочитать его - PullRequest
0 голосов
/ 22 января 2019

Я новичок в программировании на Android Studio.Я пытаюсь создать простое приложение, чтобы получить базовый опыт.В приложении мне нужно было бы хранить отдельные входы в файл (в идеале CSV) во внутренней памяти.Прежде всего, я пытаюсь сохранить данные пользователя - мое имя и номер телефона.Метод сохранения выглядит следующим образом:

public void save(View view)
    {
        String fileName = "user.csv";
        ContextWrapper contextWrapper = new ContextWrapper(getApplicationContext());
        File directory = contextWrapper.getDir(getFilesDir().getName(), ContextWrapper.MODE_PRIVATE);
        File file = new File(directory, fileName);

        String data = "FirstName,LastName,PhoneNumber";
        FileOutputStream outputStream;
        try {
            outputStream = openFileOutput(fileName, Context.MODE_PRIVATE);
            outputStream.write(data.getBytes());
            outputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

        Intent intent = new Intent(this, MainActivity.class);
        startActivity(intent);
    }

Данные, похоже, сохранены, и я перенаправлен на MainActivity.Вот метод:

protected void onCreate(Bundle savedInstanceState) {
    File file = new File(getFilesDir(),"user.csv");
    if(!file.exists()) {
        Intent intent = new Intent(this, activity_login.class);
        startActivity(intent);
    }
    else {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TextView tv_name = findViewById(R.id.tv_name);
        TextView tv_phone = findViewById(R.id.tv_phone);

        BufferedReader br = null;
        try {
            String sCurrentLine;
            br = new BufferedReader(new FileReader("user.csv"));
            while ((sCurrentLine = br.readLine()) != null) {
                tv_name.setText(sCurrentLine);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (br != null)br.close();
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
    }
}

В TextView tv_name значение не сохраняется, и поле пустое.Где я ошибаюсь?

Большое спасибо за помощь!

Ответы [ 3 ]

0 голосов
/ 22 января 2019

Ниже приведен код для создания файла .csv и вставки в него данных.

Подробнее см. В моем ответе: https://stackoverflow.com/a/48643905/8448886

КОД ЗДЕСЬ:

    String csv = (Environment.getExternalStorageDirectory().getAbsolutePath() + "/MyCsvFile.csv"); // Here csv file name is MyCsvFile.csv


    //by Hiting button csv will create inside phone storage.
      buttonAdd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

            CSVWriter writer = null;
                try {
                    writer = new CSVWriter(new FileWriter(csv));

                    List<String[]> data = new ArrayList<String[]>();
                    data.add(new String[]{"Country", "Capital"});
                    data.add(new String[]{"India", "New Delhi"});
                    data.add(new String[]{"United States", "Washington D.C"});
                    data.add(new String[]{"Germany", "Berlin"});

                    writer.writeAll(data); // data is adding to csv 

                    writer.close();
                    callRead();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        });
0 голосов
/ 22 января 2019

Для чтения сохраненных данных используйте этот метод, UTF_8 ENCODING

public static String readAsString(InputStream is) throws IOException {
    BufferedReader reader = null;
    StringBuilder sb = new StringBuilder();
    try {
        String line;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            reader = new BufferedReader(new InputStreamReader(is,UTF_8));
        }
        while ((line = reader.readLine()) != null) {
            sb.append(line);
        }
    } finally {
        if (reader != null) {
            reader.close();
        }
    }
    return sb.toString();
}

Используйте этот метод следующим образом, анализируя файл "user.csv".

public static String readFileAsString(File file) throws IOException {
    return readAsString(new FileInputStream(file));
}

Получить строку и установить textView

0 голосов
/ 22 января 2019

Используйте как это, чтобы прочитать файл:

FileInputStream fis = new FileInputStream("your full file path");
BufferedReader bfr = new BufferedReader(new InputStreamReader(fis));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...