3 回答
TA贡献1809条经验 获得超8个赞
您应该为此创建自己的自定义侦听器,MyFirebaseListener并通过实现此接口来更新您的活动内容
public interface MyFirebaseListener {
void onSuccess(DocumentReference documentReference)
void onFailure(Exception e)
}
现在将Activity 作为参数传递给MyFirebaseListenertoaddNewUser()方法,如下所示
public class UserApi{
public void addNewUser(String firstname,
String lastname,
String email,
Integer gender,
String uid,
String profileImageUrl,
MyFirebaseListener myFirebaseListener){
Map<String, Object> data = new HashMap<>();
data.put("firstname", firstname);
data.put("lastname", lastname);
data.put("email", email);
data.put("gender", gender);
data.put("boxId", "independent");
data.put("notificationsEnabled", true);
data.put("profileImageUrl", profileImageUrl);
mFirebaseFirestore.collection("usersP").add(data)
.addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
@Override
public void onSuccess(DocumentReference documentReference) {
myFirebaseListener.onSuccess(documentReference)
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
myFirebaseListener.onFailure(e)
}
});
}
}
MyFirebaseListener在您的 Activity 中实现接口,因此您需要覆盖以下方法并在这些实现的方法中执行UI 修改,如下所示
public class MyActivity extends AppCompatActivity implements MyFirebaseListener {
void someMethod(){
addNewUser(firstname,
lastname,
email,
gender,
uid,
profileImageUrl,
this) // <- This will be reference to Activity with Type of MyFirebaseListener
}
void onSuccess(DocumentReference documentReference){
mProgressBar.setVisibility(View.GONE);
mIRegisterActivity.inflateFragment("Register Box", mHashMap);
Log.d(TAG, "DocumentSnapshot written with ID: " + documentReference.getId());
}
void onFailure(Exception e){
Log.d(TAG, "Error adding document", e);
}
}
这就是使用自定义接口分离 UI 逻辑和服务逻辑的方法
TA贡献1744条经验 获得超4个赞
您可以使用两种不同的方法......第一:你可以制作一个回调接口,就像我们在 RecyclerView 点击回调的情况下所做的一样......
第二:如果你必须对 rxJava2、arch life 或 Agera 有一点了解,你可以使用 livedata 观察者......
所以让我们考虑第一个方法
考虑你的班级是
class otherClass{
callbackInterface mCallBackInterface;
public(callbackInterface mCallBackInterface){
this.mCallBackInterface=mCallBackInterface;
}
interface callbackInterface{
void onSucuss(DocumentReference documentReference);
}
public void addNewUser(String firstname, String lastname, String email, Integer gender, String uid, String profileImageUrl){
Map<String, Object> data = new HashMap<>();
data.put("firstname", firstname);
data.put("lastname", lastname);
data.put("email", email);
data.put("gender", gender);
data.put("boxId", "independent");
data.put("notificationsEnabled", true);
data.put("profileImageUrl", profileImageUrl);
mFirebaseFirestore.collection("usersP").add(data)
.addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
@Override
public void onSuccess(DocumentReference documentReference) {
mCallBackInterface.onSucuss(decumentReference);
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.d(TAG, "Error adding document", e);
}
});
}
}
///The Class which will be calling it will be something like this
class CallingClass implements CallBackInterface{
@Override
void CallBackINterface(DocumentReference documentReference){
//Your code goes here
}
}
这将完成工作广播接收器也可以使用,但上述解决方案最适合初学者......
添加回答
举报
