我尝试使用var heatmap;
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
var heatmapData = [];
myObj = JSON.parse(this.responseText);
for (var i = 0; i < myObj.points.length; i++) {
var latLng = new google.maps.LatLng(myObj.points[i].lat, myObj.points[i].lng);
var pushData = {
location: latLng,
weight: myObj.points[i].weight
}
heatmapData.push(pushData);
}
heatmap = new google.maps.visualization.HeatmapLayer({
data: heatmapData,
maxIntensity: 10,
radius: 30,
opacity: 0.4,
map: map
})
}
};
,但随后会出现警告。我已经看到了用于解决此警告的几种不同方法,但我不知道哪些方法适用于我的代码。有谁知道在这种情况下删除此警告的正确方法是什么?
方法调用&#39; findViewById&#39;可能会产生&#39; java.lang.NullpointerException&#39;
Page1Fragment.java
findViewById
答案 0 :(得分:0)
我假设你在谈论一个棉绒警告。
根据片段所处的生命周期的哪个部分,它可能已经或者可能没有调用其onCreateView方法。
如果尚未创建片段视图(尚未调用onCreateView),则对getView()的调用将返回null。
因此,你需要像这样检查null:
View contentView = getView();
if (contentView != null) {
contentView.findViewById(R.id.blue_square).setVisibility(View.VISIBLE);
}
要知道片段何时附加到活动并且其视图已创建,并不总是很容易。例如,如果您已启动AsyncTask以在后台线程上检索某些数据然后再更新UI,则用户可能已从您的片段导航,并且在这种情况下getView()将返回null。
有关详细说明片段生命周期的更多信息,请查看developer.android.com上Fragment的文档。
答案 1 :(得分:0)
如果您知道在哪里调用getView()方法,(在onCreateView
之后和onDestroyView
之前),您可以忽略这些警告。
此方法将在这两个回调之外返回null
。
避免一遍又一遍地检查它的一种简洁方法是将rootView
作为dislplaySettings
方法的参考传递。
public void displaySettings(View rootView) {
if (squareState) {
rootView.findViewById(R.id.blue_square).setVisibility(View.VISIBLE);
} else {
rootView.findViewById(R.id.blue_square).setVisibility(View.GONE);
}
}
当您在onResume
内使用时,您将不会抱怨如下:
@Override
public void onResume() {
displaySettings(getView()); // You're safe here!
}
请参阅片段生命周期docs。
<强>加成强>
避免一些代码重复
public void displaySettings(View rootView) {
rootView.findViewById(R.id.blue_square).setVisibility(squareState ? View.VISIBLE : View.GONE);
}