当前位置: 首页 > 知识库问答 >
问题:

如何使用viewmodel类在片段中从数据库中获取数据为什么用户等于null

凤伟泽
2023-03-14

我试图从数据库中获取用户,但我从viewmodel中获取null,有人知道为什么吗??

java.lang.NullPointerException:尝试在以下位置对空对象引用调用虚拟方法“int java.lang.string.HashCode()”:omer.lukatz.rooms.ui.games.gamesfragment.onCreateView(gamesfragment.java:81),androidx.fragment.app.fragment.PerformCreateView(fragment.java:2698),androidx.fragment.app.fragmentStatemanager.CreateView(fragment.java:320), 在android.app.activitythread.main(activitythread.java:6938)在java.lang.reflect.Method.invoke(本机方法)在com.android.internal.os.zygoteinit.main(zygoteinit.java:1374)在java.lang.reflect.methodandargscaller.run(zygote.java:327)在com.android.internal.os.zygoteinit.java:1374)

公共类GamesFragment扩展片段{

ListView lvGames;
ArrayList<Game> arrayList;
ArrayAdapter<Game> arrayAdapter;
String console;
private GamesViewModel gamesViewModel;
SharedPreferences gameSharedPreferences;

public View onCreateView(@NonNull LayoutInflater inflater,
                         ViewGroup container, Bundle savedInstanceState) {

    View root = inflater.inflate(R.layout.fragment_games, container, false);
    lvGames = root.findViewById(R.id.lvGames);
    arrayList = new ArrayList<>();
    arrayAdapter = new ArrayAdapter<>(getActivity().getApplicationContext(), android.R.layout.simple_list_item_1,arrayList);
    lvGames.setAdapter(arrayAdapter);

    gameSharedPreferences = getActivity().getSharedPreferences("game",0);

    SharedPreferences usernameSharedPreferences = getActivity().getSharedPreferences("users",0);
    final String username = usernameSharedPreferences.getString("username","");

    gamesViewModel =
            ViewModelProviders.of(this).get(GamesViewModel.class);
    gamesViewModel.getUser().observe(getViewLifecycleOwner(), new Observer<User>() {
        @Override
        public void onChanged(User user) {
            console = user.getConsole();
        }
    });

公共类GamesViewModel扩展了AndroidViewModel{

private MutableLiveData<User> user;

public GamesViewModel(Application application) {
    super(application);
    SharedPreferences usernameSharedPreferences = getApplication().getSharedPreferences("users",0);
    String username = usernameSharedPreferences.getString("username","");
    user = new MutableLiveData<>();
    User.getUser(username, new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot snapshot) {
            user.setValue(snapshot.getValue(User.class));

        }

        @Override
        public void onCancelled(@NonNull DatabaseError error) {

        }
    });
}

public LiveData<User> getUser() {
    return this.user;
}

}

public class User implements Serializable {
private String fullName;
private String userName;
private String email;
private String password;
private String console;
private String url;

public User()
{

}

public User(String fullName, String userName, String email, String password,String console, String url) {
    this.fullName = fullName;
    this.userName = userName;
    this.email = email;
    this.password = password;
    this.console = console;
    this.url = url;
}

public static void addUser(User user, OnCompleteListener listener)
{
    FirebaseDatabase.getInstance().getReference("Users").child(user.getUserName()).setValue(user).addOnCompleteListener(listener);
}

public static void getUser(String username, ValueEventListener listener)
{
    FirebaseDatabase.getInstance().getReference("Users").child(username).addListenerForSingleValueEvent(listener);
}

public String getConsole() {
    return console;
}

public void setConsole(String console) {
    this.console = console;
}

public String getUrl() {
    return url;
}

public void setUrl(String url) {
    this.url = url;
}

public String getFullName() {
    return fullName;
}

public void setFullName(String fullName) {
    this.fullName = fullName;
}

public String getUserName() {
    return userName;
}

public void setUserName(String userName) {
    this.userName = userName;
}

public String getEmail() {
    return email;
}

public void setEmail(String email) {
    this.email = email;
}

public String getPassword() {
    return password;
}

public void setPassword(String password) {
    this.password = password;
}

}

共有1个答案

壤驷敏学
2023-03-14

首先,将ViewModel创建和observe移动到onViewCreate(),而不是onCreateView()

其次,user.getUser()方法没有返回任何内容(它是void)。 将它的返回类型更改为它应该返回的任何内容,并将函数更改为返回您需要的内容。

 类似资料:
  • 我需要观察Modelview中的livedata更改来更新片段(将列表添加到RecycerView中)。 该实现工作正常,但在片段之间切换时面临问题。 并试图将观察者移除为:或或或尝试在

  • 问题内容: 我想知道如何在CodeIgniter中使用AJAX从数据库获取数据。您能否检查下面的代码以找出问题的原因?当我从视图中单击链接时,没有任何反应。 这是我的看法: 这是我的控制器: 这是我的模型: 这是我的JavaScript文件: 问题答案: 试试这个: 我所看到的问题是这是因为您的选择器是锚,并且锚具有文本而不是值。因此,我建议您使用而不是。

  • 问题内容: 我正在尝试创建一个用于在PHP上执行oracle sql语句的类。 这是我的index.php,我正在尝试调用我的函数 和我的dbcontrol.php用于我的功能 我不确定似乎有什么问题。但是每次我运行这个。页面上未显示任何内容。没有结果,没有数据。但是我确信数据库中有数据。 问题答案: 您总是得到空白页的原因是: oci_num_rows()函数不会返回您可能认为的所选行数。它返回

  • 我有一个DialogFragment,它使用FragmentPagerAdapter来显示选项卡。每个选项卡都有一个使用RecyclerView的不同片段。我可以获取单击后传递给片段的项目,但如何才能将数据从片段获取到DialogFragment,以便将其传递给调用活动? TabDialog扩展DialogFraank: TabAdapter扩展了FragmentPagerAdapter 在Fra

  • 问题内容: 这是我的类,用于从数据库中获取数据 这是我的文件: 当我运行该程序时,出现异常后,请帮助我如何解决它。我是Hibernate的新手,尝试学习但被卡住了。 虽然我能够将数据存储在数据库中,但我有2个用于第一和第二类的数据获取数据,但在获取数据时遇到了问题PLZ帮助。 问题答案: 让我引述一下: 据我所知,您正在使用表名。 所以应该是这样的:

  • 我想从数据库中获取数据(经度/纬度),并使用Ajax调用将其返回到Google地图上绘制多个标记。 下面是包含ajax的javascript: 在ajax设置中,当我输入“dataType:json”时,函数错误被执行。输出为警报“加载数据时出错”。 这是我的控制器: 我尝试console.log(响应),它显示整个javascript代码。 当前没有“数据类型:'json'”的错误显示“未捕获类

  • 我正在尝试通过将数据与接口传递给片段来将数据从对话片段获取到片段。到目前为止,我知道首先是因为它的片段,我需要在MainActive上实现接口,并从那里将数据发送到我想要的任何片段。我明白,但我不知道如何做到这一点。到目前为止,我已经在MainActive中实现了接口,我正在获取数据,但我不知道如何将其发送到片段。 主要活动 对话片段-此对话片段从画廊/相机获取图片 片段-此片段应从dialogf

  • 我必须得到一个特定用户的用户配置文件细节后,他们登录使用Firebase。现在,它正在返回我的FireStore中所有用户的详细信息。