我正在尝试使用GeoFire中的getLocation()
方法,它需要两个回调。但是,@ Override Method does not override method from its superclass
和onLocationResult()
出现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;
答案 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
。