Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用gluon mobile插件在移动设备上存储字符串_Android_Javafx_Local Storage_Gluon Mobile - Fatal编程技术网

Android 使用gluon mobile插件在移动设备上存储字符串

Android 使用gluon mobile插件在移动设备上存储字符串,android,javafx,local-storage,gluon-mobile,Android,Javafx,Local Storage,Gluon Mobile,我想将文本区域中的字符串保存到设备,然后在重新打开应用程序后重新加载。我试着按照示例()进行操作,但无法使其正常工作。当我尝试读取文件并使用StringInputConverter时,主要问题出现了 private void saveAndLoad(TextArea textArea){ File textFile = new File(ROOT_DIR,"text_file"); String text2 = textArea.getText();

我想将文本区域中的字符串保存到设备,然后在重新打开应用程序后重新加载。我试着按照示例()进行操作,但无法使其正常工作。当我尝试读取文件并使用StringInputConverter时,主要问题出现了

private void saveAndLoad(TextArea textArea){
        File textFile = new File(ROOT_DIR,"text_file");
        String text2 = textArea.getText();
        String loadedFile = "none";
        if (textFile.exists()){
            FileClient fileClient = FileClient.create(textFile);
        loadedFile = DataProvider.retrieveObject(fileClient.createObjectDataReader(
                new StringInputConverter()));
        }
        try(FileWriter writer = new FileWriter(textFile)){
            writer.write(textArea.getText());
        } catch (IOException e) {
            e.printStackTrace();
        }

        textArea.setText(text2);
    }
编辑:插入的代码,我试图开始读取文件和图像的错误,我得到


如果查看
数据提供程序::检索对象
文档:

使用指定的ObjectDataReader检索对象。将返回一个GluonObservableObject,当读取操作成功完成时,该对象将包含该对象

它返回
GluonObservableObject
,它是字符串的可观察包装,而不是字符串本身

您需要首先获取可观察对象,当操作成功结束时,您可以检索字符串:

if (textFile.exists()) {
    FileClient fileClient = FileClient.create(textFile);
    GluonObservableObject<String> retrieveObject = DataProvider
            .retrieveObject(fileClient.createObjectDataReader(new StringInputConverter()));

    retrieveObject.stateProperty().addListener((obs, ov, nv) -> {
        if (ConnectState.SUCCEEDED.equals(nv)) {
            loadedFile = retrieveObject.get();
        }
    });
}
if(textFile.exists()){
FileClient FileClient=FileClient.create(textFile);
GluonObservableObject retrieveObject=数据提供程序
.retrieveObject(fileClient.createObjectDataReader(新的StringInputConverter());
retrieveObject.stateProperty().addListener((obs、ov、nv)->{
if(ConnectState.successed.equals(nv)){
loadedFile=retrieveObject.get();
}
});
}
这是此功能的快速实现:

public class BasicView extends View {

    private static final File ROOT_DIR;
    static {
        ROOT_DIR = Services.get(StorageService.class)
                .flatMap(StorageService::getPrivateStorage)
                .orElseThrow(() -> new RuntimeException("Error")); 
    }

    private final File textFile;
    private final TextField textField;
    private String loadedFile = "none";

    public BasicView(String name) {
        super(name);

        textFile = new File(ROOT_DIR, "text_file");
        textField = new TextField();

        VBox controls = new VBox(15.0, textField);
        controls.setAlignment(Pos.CENTER);
        controls.setPadding(new Insets(30));

        setCenter(controls);
    }

    @Override
    protected void updateAppBar(AppBar appBar) {
        appBar.setNavIcon(MaterialDesignIcon.MENU.button(e -> System.out.println("Menu")));
        appBar.setTitleText("Basic View");
        appBar.getActionItems().add(MaterialDesignIcon.SAVE.button(e -> save()));
        appBar.getActionItems().add(MaterialDesignIcon.RESTORE_PAGE.button(e -> restore()));
    }

    private void save() {
        try (FileWriter writer = new FileWriter(textFile)) {
            writer.write(textField.getText());
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }

    private void restore() {
        if (textFile.exists()) {
            FileClient fileClient = FileClient.create(textFile);
            GluonObservableObject<String> retrieveObject = DataProvider
                    .retrieveObject(fileClient.createObjectDataReader(new StringInputConverter()));

            retrieveObject.stateProperty().addListener((obs, ov, nv) -> {
                if (ConnectState.SUCCEEDED.equals(nv)) {
                    loadedFile = retrieveObject.get();
                    textField.setText(loadedFile);
                }
            });
        }
    }
}
公共类基本视图扩展视图{
私有静态最终文件根目录;
静止的{
ROOT\u DIR=Services.get(StorageService.class)
.flatMap(StorageService::getPrivateStorage)
.orelsetrow(()->新运行时异常(“错误”);
}
私有最终文件textFile;
私有最终文本字段文本字段;
私有字符串loadedFile=“无”;
公共基本视图(字符串名称){
超级(姓名);
textFile=新文件(根目录,“文本文件”);
textField=新的textField();
VBox控件=新的VBox(15.0,文本字段);
控件。设置对齐(位置中心);
控件。设置填充(新插图(30));
设置中心(控制);
}
@凌驾
受保护的void updateAppBar(AppBar AppBar){
appBar.setNavIcon(materialdesignion.MENU.button(e->System.out.println(“菜单”));
appBar.setTitleText(“基本视图”);
appBar.getActionItems().add(MaterialDesignIcon.SAVE.button(e->SAVE());
appBar.getActionItems().add(MaterialDesignIcon.RESTORE_PAGE.button(e->RESTORE());
}
私有void save(){
try(FileWriter=newfilewriter(textFile)){
writer.write(textField.getText());
}捕获(IOEX异常){
例如printStackTrace();
}
}
私有无效恢复(){
if(textFile.exists()){
FileClient FileClient=FileClient.create(textFile);
GluonObservableObject retrieveObject=数据提供程序
.retrieveObject(fileClient.createObjectDataReader(新的StringInputConverter());
retrieveObject.stateProperty().addListener((obs、ov、nv)->{
if(ConnectState.successed.equals(nv)){
loadedFile=retrieveObject.get();
textField.setText(loadedFile);
}
});
}
}
}

根目录从哪里来?发布您的错误,以及从静态初始值设定项复制错误的方法:static{ROOT_DIR=Services.get(StorageService.class).flatMap(StorageService::getPrivateStorage).orelsetrow(()->new RuntimeException(“Error”);}你得到了什么错误?我用代码编辑了我的帖子,我得到的错误是我错误地使用了
retrieveObject.addListener((obs,ov,nv)->{if(ConnectState.succeed.equals(nv)){loadedFile=retrieveObject.get();})。直到看到输出,我才意识到这一点。它将文件内容作为新值返回。
retrieveObject.addListener((obs,ov,nv)->{loadedFile=nv;})是否有缺点