Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.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
Java Android LiveData未更新_Java_Android_Observable_Android Livedata - Fatal编程技术网

Java Android LiveData未更新

Java Android LiveData未更新,java,android,observable,android-livedata,Java,Android,Observable,Android Livedata,我目前正在尝试从片段中检测另一个文件中的更改,并使用LiveData相应地更新ui。我有一个类-datacontroller,其中包含应用程序数据的getter和setter。如果有人能告诉我为什么我的UI没有被更新,以及如何着手修复它,我将不胜感激 skills的getter是:它位于dataController类中并扩展了ViewModel private MutableLiveData<List> skillMutable = new MutableLiveData<Li

我目前正在尝试从片段中检测另一个文件中的更改,并使用LiveData相应地更新ui。我有一个类-datacontroller,其中包含应用程序数据的getter和setter。如果有人能告诉我为什么我的UI没有被更新,以及如何着手修复它,我将不胜感激

skills的getter是:它位于dataController类中并扩展了ViewModel

private MutableLiveData<List> skillMutable = new MutableLiveData<List>();
public  MutableLiveData<List> getSkills(){
   ArrayList<skill> listToReturn = new ArrayList<skill>();

    try {
        InputStream inputStream = context.openFileInput(skillFileName);

        if (inputStream != null) {
            InputStreamReader streamReader = new InputStreamReader(inputStream);
            BufferedReader bufferedReader = new BufferedReader(streamReader);

            String l;
            skill toAdd;
            while (( l = bufferedReader.readLine()) != null) {

                System.out.println("MY line  is" + l);
                String[] skillSeparated = l.split("_");
                toAdd= new skill(skillSeparated[0], skillSeparated[1]);
                listToReturn.add(toAdd);
            }

        }

        inputStream.close(); //close the file
    } catch (java.io.FileNotFoundException e) {
        //file doesnt exist
    } catch (IOException e) {
        e.printStackTrace();
    }
    skillMutable.setValue(listToReturn);
    return skillMutable;
}
检查这个

LiveData接收观察者并仅在其处于启动或恢复状态时通知其数据更改


您的技能没有更新,可能是因为您的视图没有更改状态。

在调用
observe()
方法之前设置了
skillMutable
的值。在设置值之前,必须调用
observe()
方法。否则,当它的值改变时,就没有什么可观察的
skillMutable

要想让它正常工作,您可以做的最简单的事情是将
skillable
设置为公共,然后在调用
getSkills()
之前调用
observe()

顺便说一句,我不知道为什么这里需要
MutableLiveData
getSkills()
方法能否返回
ArrayList
而不是返回
MutableLiveData

dataManager = new dataController(getContext());

    dataManager.getSkills().observe(this, skillMutable -> {
        // update UI
        if(dataManager.getResumeNumber() == "1") {
            resumeWebview.loadData(pdfManager.getResume1(), "text/html; charset=utf-8", "UTF-8");
        }
    });