Geofire回调错误

Geofire callback error

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

注意:我的class扩展了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 构建错误:

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

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

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

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

发生这种情况是因为您没有初始化 GeoFire。为了访问 GeoFire 的方法,您需要像这样创建一个 class 的新对象:

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

然后你可以使用setter和吸气剂。请看这个 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.