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
.
我正在尝试使用 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
.