Geofire回调错误

时间:2017-08-30 09:03:52

标签: android firebase callback override geofire

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

注意:我的类扩展了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

依赖关系:编译&#39; com.firebase:geofire-android:2.1.1&#39;

1 个答案:

答案 0 :(得分:2)

这是因为您没有初始化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 - &gt;选择两种方法 - &gt;单击确定。这将帮助您以正确的方式覆盖这两种方法。

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