android studio中的onStart和Override Error

时间:2018-03-15 19:23:50

标签: java android

我写了一些代码来从Firebase获取数据,但它显示了一些错误。我将解释下面的错误并附上一张图片。

enter image description here

我把鼠标放在它上面的第一个错误,消息显示: 'com.abdullrahman.eng.myapp.FriendsFragment'中的'onStart()'与'android.app.Fragment'中的'onStart()'冲突;试图分配较弱的访问权限('protected');是'公开'

将鼠标放在上面时出现第二个错误,消息显示: 方法不会覆盖其超类

中的方法

任何人都可以解决这些问题并帮助我吗?

代码:

@Override
protected void onStart() {
    super.onStart();

    FirebaseRecyclerAdapter<Friends, FriendsViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Friends, FriendsViewHolder>(

            Friends.class,
            R.layout.users_single_layout,
            FriendsViewHolder.class,
            mUsersDatabase

    ) {
        @Override
        protected void populateViewHolder(FriendsViewHolder friendsViewHolder, Friends friends, int position) {

            friendsViewHolder.setDisplayName(friends.getName());
            friendsViewHolder.setUserStatus(friends.getStatus());
            friendsViewHolder.setUserImage(friends.getThumb_image(), mMainView.getContext());

            final String user_id = getRef(position).getKey();

            friendsViewHolder.mView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {

                    Intent profileIntent = new Intent(getActivity(), UserProfile.class);
                    profileIntent.putExtra("user_id", user_id);
                    startActivity(profileIntent);

                }
            });
        }
    };

    mUsersList.setAdapter(firebaseRecyclerAdapter);

}

2 个答案:

答案 0 :(得分:0)

错误确实说明了你遇到的问题。

第一个错误是由onStart()方法上的protected访问修饰符引起的,而它应该是public。 它应该是

@Override
publin void onStart() {
    super.onStart();
    // rest of the code
}

而不是

@Override
protected void onStart() {
    super.onStart();
    // rest of the code
}

您可以在docs available on Oracle site中找到有关错误原因的更多信息。

第二个问题与FirebaseRecyclerAdapter的定义有关。看起来没有像

这样的方法
protected void populateViewHolder(FriendsViewHolder friendsViewHolder, Friends friends, int position).

我建议您查看此类的文档/来源,以获取有关您在项目中使用的Firebase版本的覆盖方法应如何显示的信息。

此外,我可以看到您使用的是IntelliJ IDEA或某些类似的IDE,因此您可以使用built-in feature to implement/override correct method

答案 1 :(得分:0)

将您的受保护修饰符更改为公开,它将会消失。

在Java中,与父方法相比,覆盖方法可以具有相同或更弱的访问权限...这里父类将方法声明为公共,因此您没有其他选择,只能使用公共访问修饰符覆盖它,因为它是最弱的访问。