This is my code in a fragment.
'''
Bundle b= new Bundle();
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
adapter= new PlatformAdapter(data);
recyclerView=view.findViewById(R.id.recyclerView);
recyclerView.setLayoutManager( new LinearLayoutManager(getContext()));
recyclerView.setAdapter(adapter);
RequestVolley.getInstance(getContext())
.doGetRequest("http://www...... .json", new RequestVolley.OnCompleteCallback() {
@Override
public void onCompleted(String response) {
try {
JSONArray jsonArray = new JSONArray(response);
for(int i=0;i<jsonArray.length();i++){
JSONObject object= jsonArray.optJSONObject(i);
if(object!=null){
data.add(Platform.parseJSON(object));
}
}
adapter.notifyDataSetChanged();
}catch(JSONException e){
e.printStackTrace();
}
}
});
b.putSerializable("ListPlatforms", (Serializable) data);
}
then, I try to do this, in another fragment: '''
@Override
public void onLocationChanged(@NonNull Location location) {
if (googleMap != null) {
if (myMarker == null) {
MarkerOptions options = new MarkerOptions();
options.title("My location");
options.position(new LatLng(location.getLatitude(), location.getLongitude()));
myMarker = googleMap.addMarker(options);
googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(location.getLatitude(), location.getLongitude()), 10f));
} else {
myMarker.setPosition(new LatLng(location.getLatitude(), location.getLongitude()));
}
}
Bundle b=new Bundle ();
ArrayList<Platform> platforms= (ArrayList<Platform>) b.getSerializable("ListPlatforms");
for(Platform platform:platforms) {
double latitudine = platform.getClatitudine__wgs84__();
double longitudine = platform.getClongitudine__wgs_84__();
double distance = getDistanceinKm(latitudine, longitudine, location.getLatitude(), location.getLongitude());
if (distance >=0.0) {
MarkerOptions options = new MarkerOptions();
options.title(platform.getCdenominazione__());
options.position(new LatLng(latitudine, longitudine));
myMarker = googleMap.addMarker(options);
}
}
} ''' But I have java.lang.NullPointerException: Attempt to invoke virtual method 'java.util.Iterator java.util.ArrayList.iterator()' on a null object reference error when I try to do" for(Platform platform:platforms)".. platforms in null. .. why??
since you didn't share how do you navigate between fragments I will assume you're using Navigation graph with actions.
so if we assume that this is your code navigate from fragment A to B
NavHostFragment.findNavController(FragA.this)
.navigate(R.id.action_FragA_FragB); //navigate from FragA to FragB action
b.putSerializable("ListPlatforms", (Serializable) data);
on from the first fragment as a second parameter in the navigation code like this (notice I'm now including b as a second parameter to the method):NavHostFragment.findNavController(FragA.this)
.navigate(R.id.action_FragA_FragB,b); //navigate from FragA to FragB action
getArguments()
method which could be called from anyplace in a fragment.Bundle FragA_b = getArguments();
ArrayList<Platform> platforms= (ArrayList<Platform>) FragA_b.getSerializable("ListPlatforms");
N.B : don't get confused with the savedInstanceState bundle that gets sent as a parameter in OnCreate
,onViewCreated
,onStateRestored
and onSaveState
life cycle fragments methods, these savedInstanceState bundle has nothing to do with the one that you send during navigation and get using getArguments()
method.