【发布时间】:2017-12-22 13:51:39
【问题描述】:
我有一个小问题,在我的onStop 中我的MainActivity 我正在上传一些数据到firebase,所以,如果我快速切换到我的注销活动并按SignOut,我执行SignOut,但是当时我正在注销数据仍在上传,所以,当我注销时,我得到我的 GetCurrentUser = null ,所以数据仍然无法上传并且我的应用程序崩溃,在我的注销中我想检查用户是否已经上传了所有之前注销,我在MainActivity.class 中添加了onCompletionListeners,所以如果用户为空,我可以处理,但它一直在崩溃,我想我需要在按下SignOut 按钮之前进行结帐,所以,我检查数据是否已全部上传,然后注销,我在过去一周一直在解决这个问题,并且越来越烦人。
这是我在MainActivity.class上传的内容
myref.putStream(groups)
.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
@SuppressWarnings("VisibleForTests") Uri downloadUrlGrupos = taskSnapshot.getDownloadUrl();
mDatabase.child("Users").child(mAuth.getCurrentUser().getUid()).child("groups").setValue(downloadUrlGrupos.toString(), new DatabaseReference.CompletionListener() {
@Override
public void onComplete(DatabaseError databaseError, DatabaseReference groupsReference) {
if(groupsReference!=null){
Log.d("TAG", "Se guardo correctamente url Grupos");
}else
{
Log.d("TAG", "Error al subir url Grupos");
}
}
});
}
这是我在其他类中的注销按钮
button.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
//I think here need to be a check , so i first check if all the data is uploaded to firebase, and then SignOut
Auth.GoogleSignInApi.signOut(mGoogleApiClient).setResultCallback(new ResultCallback<Status>() {
@Override
public void onResult(@NonNull Status status) {
FirebaseAuth.getInstance().signOut();
mGoogleApiClient.disconnect();
finish();
}
});
整个 OnStop
@Override
protected void onStop() {
super.onStop();
if(mAuth.getCurrentUser()!=null){
referenciaGrupos.putStream(g)
.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
@SuppressWarnings("VisibleForTests") Uri downloadUrlG = taskSnapshot.getDownloadUrl();
mDatabase.child("user").child(mAuth.getCurrentUser().getUid()).child("URL_g").setValue(downloadUrlG.toString(), new DatabaseReference.CompletionListener() {
@Override
public void onComplete(DatabaseError databaseError, DatabaseReference referenciaG) {
if(referenciaG!=null){
Log.d("TAG", "Se guardo correctamente url G");
}else
{
Log.d("TAG", "Error al subir url G");
}
}
});
}
});
referenciaPictos.putStream(p).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
@SuppressWarnings("VisibleForTests") Uri downloadUrlP = taskSnapshot.getDownloadUrl();
mDatabase.child("User").child(mAuth.getCurrentUser().getUid()).child("URL_p").setValue(downloadUrlP.toString(), new DatabaseReference.CompletionListener() {
@Override
public void onComplete(DatabaseError databaseError, DatabaseReference referenciaP) {
if(referenciaP!=null){
Log.d("TAG", "Se guardo correctamente url P");
}else{
Log.d("TAG", "Error al subir url P");
}
}
});
}
});
referenciaF.putStream(fG).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
@SuppressWarnings("VisibleForTests") Uri downloadUrlF = taskSnapshot.getDownloadUrl();
mDatabase.child("User").child(mAuth.getCurrentUser().getUid()).child("URL_f").setValue(downloadUrlF.toString(), new DatabaseReference.CompletionListener() {
@Override
public void onComplete(DatabaseError databaseError, DatabaseReference referenciaF) {
if(referenciaF!=null){
Log.d("TAG", "Se guardo correctamente url F");
}else{
Log.d("TAG", "Error al subir url F");
}
}
});
}
});
}else{
Log.d("TAG","El usuario es null");
Toast.makeText(this, "ERROR, SUBIENDO ARCHIVOS", Toast.LENGTH_SHORT).show();
}
}
【问题讨论】:
标签: android firebase firebase-authentication