【问题标题】:Geofire callback errorGeofire回调错误
【发布时间】:2017-08-30 09:03:52
【问题描述】:

我正在尝试使用 GeoFire 中的 getLocation() 方法,它需要两个回调。但是,@Override onLocationResult()onCancelled() 出现 Method does not override method from its superclass 错误。如何解决这个问题?

注意:我的类扩展了 Fragment,getLocation()onCreateView() 内。

代码:

public class Browse extends Fragment {
    ...
    private DatabaseReference mDatabase; // NEW
    private GeoFire geoFire;
    private String businessID;
    ...

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_browse, container, false);

        SharedPreferences businessID1 = getActivity().getSharedPreferences("BUSINESS_ID", Context.MODE_PRIVATE);
        businessID = businessID1.getString("businessID", "businessIDNotFound");

        mDatabase = FirebaseDatabase.getInstance().getReference().child("geo_fire"); // NEW

        GeoFire geoFire = new GeoFire(mDatabase); // NEW

        geoFire.getLocation(businessID, new LocationCallback() {
            @Override <<<--ERROR HERE !
            public void onLocationResult(String key, GeoLocation location) {
                if (location != null) {
                    System.out.println(String.format("The location for key %s is [%f,%f]", key, location.latitude, location.longitude));
                } else {
                    System.out.println(String.format("There is no location for key %s in GeoFire", key));
                }
            }

            @Override <<<--ERROR HERE !
            public void onCancelled(DatabaseError databaseError) {
                System.err.println("There was an error getting the GeoFire location: " + databaseError);
            }
        });


        return rootView;
    }
}

编辑:我的 gradle 构建错误:

Error:(90, 13) 错误:方法没有覆盖或实现超类型中的方法

Error:(99, 13) 错误:方法没有覆盖或实现超类型中的方法

错误:(89, 41) 错误:不兼容的类型:无法转换为 com.firebase.geofire.LocationCallback

依赖:编译'com.firebase:geofire-android:2.1.1'

【问题讨论】:

    标签: android firebase callback overriding geofire


    【解决方案1】:

    这是因为您没有初始化 GeoFire。为了能够访问 GeoFire 的方法,您需要像这样创建一个新的类对象:

    GeoFire geoFire = new GeoFire(yourDatabaseReference.child(user.getUid()));
    

    然后你可以使用setter和getter。请看这个example

    编辑:看到您更新的代码,问题是您以不正确的方式覆盖了onCancelled() 方法。您需要更改这行代码:

    public void onCancelled(DatabaseError databaseError) {
    

    public void onCancelled(com.firebase.client.FirebaseError firebaseError) {
    

    参数的类型是FirebaseError,而不是DatabaseError

    还可以尝试使用 Android Studio 执行以下步骤。在出现错误的活动中,删除onLocationResult()onCancelled 这两种方法。然后按CTRL+O -> 选择两种方法 -> 单击确定。这将帮助您以正确的方式覆盖这两种方法。

    稍后编辑:经过多次尝试,解决问题的解决方案是将所有 Firebase 依赖项更新到最新版本,目前为 11.2.0。因为GeoFire 2.x 基于 Firebase 的new 3.x release,所以它可以与最新的 Firebase Android SDK 版本一起使用。在这种情况下11.2.0

    【讨论】:

    • 我在编辑中添加了 3 行代码(见 //NEW)。错误仍然存​​在。
    • 还是没有解决。这些如何解决“方法不会覆盖其超类错误中的方法”?
    • 没有 onCancelled() 选项。您能否展示一下它应该是什么样子的示例代码?这真的很有帮助。
    • Interface LocationCallback 有两个方法 onCancelled(com.firebase.client.FirebaseError firebaseError)onLocationResult(String key, GeoLocation location) 您需要覆盖它们。您确定错误出现在此处而不是代码的另一部分吗?
    • 您需要将所有内容更新到最新版本。 geofire-android:2.1.1 仅适用于版本 11.2.0。
    猜你喜欢
    • 2018-09-23
    • 1970-01-01
    • 2018-01-08
    • 2015-10-08
    • 1970-01-01
    • 2012-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多