为什么会导致错误?
if (extras != null) {
if (extras.getString("ActionBar") != null) {
if (extras.getString("ActionBar").equals("NO")) {
if (bar != null) bar.setDisplayHomeAsUpEnabled(false);
}
}
}
我检查以确保它首先不为空。
答案 0 :(得分:1)
您收到警告,因为您可能未收到任何bundle
(来自发件人activity
),因为您未在当前上下文中初始化它(或activity
)。因此,在这种情况下,如果您不检查extras
是否为null
(并且extras
的行为等于null
),则此行:
if (extras.getString("ActionBar") != null)
会抛出NullPointerException
。因此,您必须先检查extras
是否为空,以避免任何潜在的崩溃。
答案 1 :(得分:1)
您正在拨打extras.getString("ActionBar")
两次。检查return
ed值对null
(但从不使用它),一旦您使用它而不检查null
。现在,可能该函数的契约表示如果使用相同的参数调用它,它将始终return
相同的值,但不一定是这种情况,您的IDE可能不会知道。
您应该将return
值存储在(最好是final
)变量中,然后警告就会消失。
if (extras != null) {
final String actbar = extras.getString("ActionBar");
if (actbar != null) {
if (actbar.equals("NO")) {
// ...
}
}
}
这也可能是一种性能优势,因为您不需要两次getString
的工作。
无论如何,如果您的代码中包含if (o != null) { … }
个大量的<div class="container-fluid mt100 mr5 ml5">
<div class="row">
<table class='table s12'>
<tr style="background: #e4e9eb;">
<td>Name</td>
<td>Address</td>
<td>City</td>
<td>Edit</td>
<td></td>
</tr>
<tr ng-repeat="listItem in Items">
<td>
{{listItem.name}}
</td>
<td>
{{listItem.address}}
</td>
<td>
{{listItem.city}}
</td>
<td>
<a class="dropdown-toggle" ng-click="isCollapsed = !isCollapsed" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span class="caret"></span>
</a>
</td>
</tr>
<tr>
<td colspan="3" class="hiddenRow">
<div class="collapse" collapse="isCollapsed">
<table class="table display" style="border-collapse:collapse;">
<thead>
<tr class='pix2' style="background: #e4e9eb;">
<th>First</th>
<th>Second</th>
<th>Third</th>
</tr>
</thead>
<tbody>
<tr ng-repeat='item in listItem.subItems'>
<td>{{item.first}}</td>
<td>{{item.second}}</td>
<td>{{item.third}}</td>
</tr>
</tbody>
</table>
</div>
</td>
</tr>
</table>
</div>
</div>
检查,这可能表示code smell。