Tôi nhận được thông báo lỗi này nói rằng Variable "snackbar" might not have been initialized
.Biến 'thanh snack' có thể chưa được khởi tạo
Sau đây là một phần của MainActivity.java mã của tôi:
public class NetworkChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
NetworkInfo info = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
if (info != null && info.isConnected()) {
final Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), "WiFi change detected; updating information...", Snackbar.LENGTH_LONG)
.setAction("DISMISS", new View.OnClickListener() {
@Override
public void onClick(View v) {
snackbar.dismiss();
}
});
snackbar.setActionTextColor(Color.BLUE);
snackbar.show();
getWifi();
}
}
}
tôi đã đọc chấp nhận Stack Overflow câu trả lời here và nó gợi ý rằng tôi khởi snackbar
ngay sau khi public class NetworkChangeReceiver extends BroadcastReceiver
. Vì vậy, tôi đã thay đổi mã để:
/* no changes here */
@Override
public void onReceive(Context context, Intent intent) {
Snackbar snackbar = null;
/* no changes here */
if (...) {
snackbar = Snackbar.make(...);
}
/* no changes here */
}
Nhưng điều này mang lại cho tôi một lỗi Variable "snackbar" is accessed from within inner class, needs to be declared final
và cảnh báo Method invocation "snackbar.dismiss()" may produce "java.lang.NullPointerException"
.
Bất kỳ đề xuất nào về cách giải quyết vấn đề này? Cảm ơn!
Chỉ cần tò mò, đây là một lỗi trong Android studio hay tôi có nghĩa là để mã nó theo cách bạn đã đề xuất? –
Đây không phải là lỗi. Đó là vì cách thức các lớp ẩn danh được triển khai thực sự, điều này thực sự khá rõ ràng khi bạn vuốt xung quanh một chút. Tôi đã thực sự viết một lời giải thích chi tiết ... sẽ tiếp tục và đăng một liên kết ở đây. –
Cảm ơn @Andy Turner, mong được đọc bài viết của bạn :) –