【问题标题】:onStart and Override Error in android studioandroid studio中的onStart和覆盖错误
【发布时间】:2018-08-24 18:01:18
【问题描述】:

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

当我将鼠标放在上面时出现第一个错误,消息显示: 'com.abdullrahman.eng.myapp.FriendsFragment' 中的 'onStart()' 与 'android.app.Fragment' 中的 'onStart()' 冲突;试图分配较弱的访问权限(“受保护”);是“公开的”

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

谁能解决这些问题并帮助我?

代码:

@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);

}

【问题讨论】:

    标签: java android


    【解决方案1】:

    错误确实可以说明您遇到的问题。

    第一个错误是由 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

    【讨论】:

    • 你能编辑代码并纠正问题吗,因为我无法解决问题。
    • 我已经更新了它,但如果没有有关 Firebase 版本的信息,我只能做这些 - 我不知道您想要覆盖的确切方法应该是什么。
    • 第一个问题解决了,但第二个问题没有解决,这是我的 gradle implementations firebase: implementation 'com.google.firebase:firebase-auth:11.8.0' implementation 'com.firebaseui:firebase- ui-database:3.1.0' 实施 'com.google.firebase:firebase-database:11.8.0' 实施 'com.google.firebase:firebase-storage:11.8.0' 实施 'com.google.firebase:firebase-消息传递:11.8.0'
    • 看起来实现已经改变。我想,这就是你在protected void onBindViewHolder(ChatHolder holder, int position, Chat model) 方法中所需要的。您可以查看 Firevase README.md 文件 github.com/firebase/FirebaseUI-Android/blob/master/database/… 和 Stackoverflow 上的这篇文章 stackoverflow.com/questions/46859983/…
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-22
      • 1970-01-01
      • 1970-01-01
      • 2017-06-08
      • 2015-03-21
      • 2015-05-21
      相关资源
      最近更新 更多