Итак, я создаю объект в поле MainActivity как поле, а в onCreate вызываю метод для загрузки данных из firecloud. В методе загрузки данных я добавляю значение для объекта, который объявляю как поле в MainActivity, но все же, когда я проверил значение из объекта, он выдаст ошибку с NullPointerException, вот упрощенный код:
EDIT: Добавить firebase logi c
public class MainActivity extends AppCompatActivity {
Layanan UP;
Layanan GU;
Layanan LS;
Bundle extras = new Bundle();
String TAG = "a";
protected void onCreate (Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState == null) {
loadData(extras);
//I add new log
try {
UP = extras.getParcelable(UPParcelable);
UP.getNama();
Log.d(TAG, "Check if object not null after loadData() " + UP.getNama());
} catch (NullPointerException e){
e.printStackTrace();
Log.d(TAG, "Null pointer message: " + e);
}
}
}
//loadData() look below
}
Кто-нибудь может сказать мне, почему UP все еще не имеет значения? Надеюсь будет какое-то просветление, аминь
как это исправить? Спасибо
РЕДАКТИРОВАТЬ 3: Вот фактический код loadData (), который я делаю
public void loadData(final Bundle extrasBundle){
mFirebase.collection("panduan_layanan")
.addSnapshotListener(new EventListener<QuerySnapshot>() {
@Override
public void onEvent(@Nullable QuerySnapshot queryDocumentSnapshots, @Nullable FirebaseFirestoreException e) {
if (e != null){
Log.w(TAG, "Listen error", e);
return;
}
for (QueryDocumentSnapshot doc : queryDocumentSnapshots){
if (doc.exists()){
if (doc.get("nama").equals("UP")){
try {
UP = doc.toObject(Layanan.class);
extrasBundle.putParcelable(UPParcelable, UP);
Log.v(TAG, "Success add " + UP.getNama());
Log.d(IFDOC, "Check if object not null inside for loops, the value is " + UP.getNama());
} catch (NullPointerException nep){
nep.printStackTrace();
}
}
if (doc.get("nama").equals("GU")){
try {
GU = doc.toObject(Layanan.class);
extrasBundle.putParcelable(GUParcelable, GU);
Log.v(TAG, "Success add " + GU.getNama());
Log.d(IFDOC, "Check if object not null inside for loops, the value is " + GU.getNama());
}catch (NullPointerException nep){
nep.printStackTrace();
}
}
if (doc.get("nama").equals("LS")){
try {
LS = doc.toObject(Layanan.class);
extrasBundle.putParcelable(LSParcelable, LS);
Log.v(TAG, "Success add " + LS.getNama());
Log.d(IFDOC, "Check if object not null inside for loops, the value is " + LS.getNama());
} catch (NullPointerException nep){
nep.printStackTrace();
}
}
}
}
try {
Log.d(OUTSIDEFOR, "Check if object not null from OUTSIDEFOR, the value is " + UP.getNama());
UP.getNama();
} catch (NullPointerException nep){
nep.printStackTrace();
}
}
});
try {
Log.d(TAG, "loadData: " + UP.getNama());
} catch (NullPointerException nep) {
nep.printStackTrace();
Log.d(TAG, "Null Pointer Exception inside loadData() body " + nep);
}
}
Вот результат logcat
2020-05-10 15:00:42.998 5008-5008/com.kppnbandungi.plkbi W/System.err: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.kppnbandungi.plkbi.Layanan.getNama()' on a null object reference
2020-05-10 15:00:43.002 5008-5008/com.kppnbandungi.plkbi D/a: Null Pointer Exception inside loadData() body java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.kppnbandungi.plkbi.Layanan.getNama()' on a null object reference
2020-05-10 15:00:43.003 5008-5008/com.kppnbandungi.plkbi W/System.err: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.kppnbandungi.plkbi.Layanan.getNama()' on a null object reference
2020-05-10 15:00:43.005 5008-5008/com.kppnbandungi.plkbi D/a: Null pointer message: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.kppnbandungi.plkbi.Layanan.getNama()' on a null object reference
2020-05-10 15:00:43.936 5008-5008/com.kppnbandungi.plkbi D/a: Check if object not null inside for loops, the value is GU
2020-05-10 15:00:43.948 5008-5008/com.kppnbandungi.plkbi D/a: Check if object not null inside for loops, the value is LS
2020-05-10 15:00:43.956 5008-5008/com.kppnbandungi.plkbi D/a: Check if object not null inside for loops, the value is UP
2020-05-10 15:00:43.956 5008-5008/com.kppnbandungi.plkbi D/a: Check if object not null from OUTSIDEFOR, the value is UP