Map<String, Object> city = new HashMap<>();
city.put("name", "Los Angeles");
city.put("state", "CA");
city.put("country", "USA");
db.collection("cities").document("LA")
.set(city)
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Log.d(TAG, "DocumentSnapshot successfully written!");
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.w(TAG, "Error writing document", e);
}
});
这是FirebaseFirestore的简单数据输入代码。
但是当我研究onSuccess()
和onFailure()
方法时,它们每个都有一个不同的Log类方法。而且我不知道为什么这些代码在那些覆盖方法(onSuccess()
和onFailure()
)中以不同的方式使用它们。
答案 0 :(得分:2)
为什么这个特定代码在另一个代码上使用一个?因为写信的人选择了。他们本来可以使用i
(信息)和e
(错误)。
简短的答案是使用任何您想使用的内容,因为它最终无关紧要:最终,您的消息会进入您可以查看的LogCat输出流中。
更长的答案是,您想根据要记录的信息类型登录到特定的“流”。您可以选择5种主要的日志“流”,从最开始到最晚使用的顺序在此处列出(从最低到最高):Error
,Warn
,Info
, Debug
和Verbose
。
同样,您可以登录到任何您想要的,但通常说话的地方:
检测到有效的错误状态或异常实际上阻止您的应用正常运行时,登录到ERROR
(Log.e()
)。例如,如果您认为您正在处理switch语句的所有情况,则可以在default
情况下添加错误日志,这种情况不应发生。这些情况是开发人员希望了解并解决的,即使它们没有使您的应用程序崩溃。您可能会在Crashlytics中将这些报告为“非致命”异常。
登录到WARN
(Log.w()
)以查找发生意外但非严重的错误。这些是为了提醒大家注意某些地方出了问题,但该应用程序会尽可能继续进行。在您发布的示例中,“失败侦听器”可能正在使用WARN
,因为该失败是可以处理的有效情况,并且您想知道失败,但是众所周知,失败是可能的,因此应用程序应该适当地处理它并能够继续。
登录INFO
(Log.i()
),以获取通常可以找到有用信息的信息,但不要太吵。这些将有助于您在崩溃报告中查找错误。记录活动生命周期事件就是一个例子。
登录DEBUG
(Log.d()
),以获取在开发中暂时有助于解决特定问题或尝试查找特定bug的信息。例如,如果您的应用程序在某个特定位置崩溃,则可以在该位置之前添加一个Log.d
调用,并记录局部变量的状态或一些有助于您找出崩溃原因的信息。问题或错误解决后,您可能会删除它们。
如果您需要更多甚至更频繁的信息,则登录VERBOSE
(Log.v()
),然后即可使用DEBUG
。顾名思义,它打算是 verbose 。它将在LogCat中喷出大量文本,使其变得嘈杂而无法使用。例如,您可能会将长循环的每次迭代记录到VERBOSE
。
一旦登录到任何特定流,就可以过滤LogCat日志以帮助查找特定消息。例如,如果您在应用程序中使用的库出了问题,则可以过滤到WARN
以缩小LogCat日志的大小,并查找该库可能报告的任何警告。
您可以通过选择LogCat标签中的下拉列表在Android Studio中进行过滤。 Android Studio还为每个流(您可以在设置中配置)着色,以帮助区分日志消息。
希望有帮助!
答案 1 :(得分:1)
他们正在呼叫different method:d
代表debug
,w
代表warning
。
操作失败时使用警告,一切正常时调试,只是告诉您...