Firebase setValue()未在Android 6 Marshmallow

时间:2017-08-06 19:51:16

标签: android firebase firebase-realtime-database firebase-authentication

我一直在努力解决这个问题。半天,无法找到任何解决方案。

  • 在Android Lollipop和其他人的下方工作。

  • 主要尝试所有解决方案。

  • 甚至不会触发FailureListener

代码:

DatabaseReference mFirebaseRef = FirebaseDatabase.getInstance().getReferenceFromUrl(constants.FIREBASE_URL+"rootssahaj/authGplus/users/teachers");
ProfileInformation pro= new ProfileInformation(email,personName,personPhotoUrll,personGooglePlusProfile,personPhotoUrllThumb,"true");

Log.e("SahajLOGwq", "CalledInside" +prefs.getBoolean("callProfileToFireBase",true)+" Email: "+EmailPref +pro+"  yo > "+pro.getUserNAME());
mFirebaseRef.child(EmailPref).child("profile").setValue(pro, new DatabaseReference.CompletionListener() {
    @Override
    public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference) {
        if (databaseError != null) {
            Log.e("SahajLOGwq", "Data could not be saved. " + databaseError.getMessage());
        } else {
            Log.e("SahajLOGwq", "Data saved successfully.");
        }
    }
});

logcat的:

  

08-07 01:18:32.866 30547-30547 / com.rana.sahaj.myyu E / SahajLOGwq:NOTICE__android USER SIGNED IN

     

08-07 01:18:32.921 30547-30547 / com.rana.sahaj.myyu E / SahajLOGwq:CalledOutsidetrue

     

08-07 01:18:32.922 30547-30547 / com.rana.sahaj.myyu E / SahajLOGwq:CalledInsidetrue Email:narveshrana68 com.rana.sahaj.myyu.profile.ProfileInformation@e6ddcfd yo> Narvesh Rana

*现在的规则

{
  "rules": {
    ".read": true,    
    ".write": true
  }    
}

*编辑:

这是我在Firebase的Debug LogLevel之后找到的

  

08-07 18:22:08.275 8863-9013 / com.rana.sahaj.myyu D / RepoOperation:set:/ testforwrite

     

08-07 18:22:08.275 8863-9013 / com.rana.sahaj.myyu D / DataOperation:set:/ testforwrite true

     

08-07 18:22:08.289 8863-9013 / com.rana.sahaj.myyu D / RepoOperation:中止路径的事务:/ testforwrite。受影响:/ testforwrite

     

08-07 18:22:08.290 8863-9013 / com.rana.sahaj.myyu D / RepoOperation:set:/ rootssahaj / authGplus / users / teachers / narveshrana68 / profile

     

08-07 18:22:08.291 8863-9013 / com.rana.sahaj.myyu D / DataOperation:set:/ rootssahaj / authGplus / users / teachers / narveshrana68 / profile {                                                                       isTeacher =真                                                                       picurl = https://l400                                                                       picurl50DP = https://lh230                                                                       USEREMAIL = na.om                                                                       userNAME = Narvesh Rana

     

}

     

08-07 18:22:08.296 8863-9013 / com.rana.sahaj.myyu D / RepoOperation:中止路径的交易:/ rootssahaj /

1 个答案:

答案 0 :(得分:0)

当我连接到wifi时,我能够在Lollipop上复制并获得相同的D/RepoOperation: Aborting transactions for path: /testforwrite. Affected: /testforwrite,禁用实际的Internet连接,然后重新启用Internet连接(所有设备均保持与wifi网络的连接) )。此后,如果我尝试执行setValue()写入,则在Firebase重新连接和setValue()完成之前,大约需要18分钟。我联系了Firebase团队,并被告知这是预期的行为,因为Android OS基本上在恢复连接时忽略了通知应用程序。

根据我的经验,解决的唯一方法是禁用和重新启用WiFi,或者重新启动应用程序(重新启动活动无济于事)。

Firebase支持回到我身边,建议先调用goOffline(),然后再调用goOnline()-我验证了这一点可以立即重新连接Firebase数据库。我现在要做的是为我自己的setValue()超时设置一个Handler,因为我似乎不依赖于onComplete()抛出DatabaseError。