Я создаю приложение, в котором пользователи могут отслеживать продукты, которые они едят. Требование этого состоит в том, чтобы они могли добавлять новые продукты в свое портфолио.
Для отображения продуктов, которые они для них создали, Я загружаю файл CSV из моей необработанной папки для отображения в TableView.
Загрузка файла выполняется следующим способом:
public static ArrayList<Meals> load(String fileName) {
ArrayList<Meals> listings = new ArrayList<Meals>();
try{
URL url = MealLoader.class.getResource("/raw/"+fileName);
CSVReader reader = new CSVReader(new FileReader(new File(url.toURI())));
String [] line;
//skip the first row (column headers)
reader.readNext();
while ((line = reader.readNext()) != null) {
int key = convertInt(line[0]);
String type = line[1];
String name = line[2];
double calories = convertDouble(line[3]);
double carbs = convertDouble(line[4]);
double protein = convertDouble(line[5]);
double fat = convertDouble(line[6]);
double saturates = convertDouble(line[7]);
double sugar = convertDouble(line[8]);
double fibre = convertDouble(line[9]);
double salt = convertDouble(line[10]);
double b1 = convertDouble(line[11]);
double b2 = convertDouble(line[12]);
double b3 = convertDouble(line[13]);
double b6 = convertDouble(line[14]);
double b9 = convertDouble(line[15]);
double b12 = convertDouble(line[16]);
double d = convertDouble(line[17]);
double iron = convertDouble(line[18]);
Meals listing = new Meals(key, type, name, calories, carbs, protein, fat, saturates, sugar, fibre, salt, b1, b2, b3, b6, b9, b12, d, iron);
System.out.println("Created meal");
listings.add(listing);
}
} catch(IOException | URISyntaxException e){
System.out.println("Failure! Something went wrong");
e.printStackTrace();
}
System.out.println("Success! Number of loaded records: " + listings.size());
return listings;
}
У пользователя есть возможность для создания новой еды.
Когда они это сделают, файл "foods.csv" успешно изменен, чтобы иметь дополнительную новую строку.
Эта строка добавляется сразу после того, как пользователь нажимает " кнопку «Подтвердить», после ввода названия и информации о питании новой пищи.
Однако, когда вы go возвращаетесь к просмотру таблицы, пищи нет, несмотря на загрузку всех блюд снова, и новая запись присутствует в CSV-файле.
У меня есть распечатка, сколько блюд загружено с помощью вышеуказанного метода «загрузки», и это то же самое до и после новой записи, несмотря на то, что файл CSV был обновлен.
Когда вы закрываете и перезапускаете приложение, появляется еда.
Код взят из старой версии этого приложения который не использовал Gradle или конфигурацию MVC, и использовал Java 13 вместо Java 8, который я сейчас использую - раньше он работал отлично, и, глядя между двумя версиями, единственное различие заключается в этой нагрузке функция, в том смысле, что он получает .csv из папки «raw».
Каталог файлов:
Старая версия Кодекса:
public static ArrayList<Meals> load(String fileName) {
ArrayList<Meals> listings = new ArrayList<Meals>();
try{
URL url = MealLoader.class.getResource(fileName);
CSVReader reader = new CSVReader(new FileReader(new File(url.toURI()).getAbsolutePath()));
String [] line;
//skip the first row (column headers)
reader.readNext();
while ((line = reader.readNext()) != null) {
int key = convertInt(line[0]);
(Продолжается как прежде)
Build.gradle:
/*
* This build file was generated by the Gradle 'init' task.
*
* This generated file contains a sample Java project to get you started.
* For more details take a look at the Java Quickstart chapter in the Gradle
* user guide available at https://docs.gradle.org/4.1/userguide/tutorial_java_projects.html
*/
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'org.javafxports:jfxmobile-plugin:1.3.17'
}
}
plugins {
id 'java'
id 'application'
//id 'org.openjfx.javafxplugin' version '0.0.8'
}
apply plugin:'org.javafxports.jfxmobile'
mainClassName = "src.main.java.MainMenu"
jfxmobile {
javafxportsVersion = '8.60.12'
android {
applicationPackage = 'org.javafxports.ensemble'
compileSdkVersion = '27'
androidSdk = 'C:/Users/Luke/AppData/Local/Android/Sdk'
packagingOptions {
exclude 'META-INF/DEPENDENCIES.txt'
exclude 'META-INF/NOTICE'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/LICENSE'
exclude 'META-INF/LICENSE.txt'
}
}
ios {
forceLinkClasses = ['ensemble.**.*']
}
}
repositories {
jcenter()
maven {
url 'http://nexus.gluonhq.com/nexus/content/repositories/releases/'
}
mavenCentral()
}
dependencies {
// This dependency is found on compile classpath of this component and consumers.
compile 'com.google.guava:guava:22.0'
// Use JUnit test framework
testCompile 'junit:junit:4.12'
testCompile 'org.testfx:testfx-junit:4.0.15-alpha'
testCompile 'org.hamcrest:hamcrest-all:1.3'
compile "com.opencsv:opencsv:4.0"
compile 'com.gluonhq:charm:5.0.0'
compile group: 'org.jfxtras', name: 'jmetro', version: '8.6.5'
}
allprojects {
tasks.withType(JavaCompile) {
options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
}
}
Есть ли что-то, что мне не хватает, что означает, что есть простое объяснение этого поведения?