简体   繁体   中英

Why I am getting a null pointer at my getter

Please give me a clue why I am getting a null pointer where I am getting the value of getlatitude and how I can fix it??

Main Activity

  @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        p = new Proximity();

        NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
        navigationView.setNavigationItemSelectedListener(this);


        initLocationFetching(MainActivity.this); 
}

 @Override
    public void locationFetched(Location mLocal, Location oldLocation, String time, String locationProvider) {
        super.locationFetched(mLocal, oldLocation, time, locationProvider);
        p.setLatitude(mLocal.getLatitude());
        p.setLongitude(mLocal.getLongitude()); 
}

On My fragment where I am getting the value

  Proximity p = new Proximity();

    public MapFragment(Context c, Activity a) { context = c; activity = a;}

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View v = inflater.inflate(R.layout.fragment_contact_us, container, false);

        if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            checkLocationPermission();
        }
        // Initializing
        MarkerPoints = new ArrayList<>();

        Toast.makeText(context, "Asdasdasdasdas"+p.getLatitude().toString(), Toast.LENGTH_SHORT).show();

Proximity

public class Proximity {
    Double latitude;

    public Double getLatitude() {
        return latitude;
    }

    public void setLatitude(Double latitude) {
        this.latitude = latitude;
    }

    public Double getLongitude() {
        return longitude;
    }

    public void setLongitude(Double longitude) {
        this.longitude = longitude;
    }

    Double longitude;
}

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mark/com.mark.activity.MainActivity}: java.lang.NullPointerException at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245) at android.app.ActivityThread.access$800(ActivityThread.java:135) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5021) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:827) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:643) at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.NullPointerException at com.fragment.MapFragment.onCreateView(MapFragment.java:113 ) at android.support.v4.app.Fragment.performCreateView(Fragment.java:2239) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1332) at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1574) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1641) at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:794) at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2415) at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2200) at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2153) at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2063) at android.support.v4.app.FragmentController.execPendingActions(FragmentController.java:388) at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:554) at android.support.v7.app.AppCompatActivi ty.onStart(AppCompatActivity.java:177) at com.mark.BaseActivityLocation.onStart(BaseActivityLocation.java:135) at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1174) at android.app.Activity.performStart(Activity.java:5437) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2168) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245) at android.app.ActivityThread.access$800(ActivityThread.java:135) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5021) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515)

In your fragment you have created an object p Proximity p = new Proximity(); But the member variable latitude (Assuming that it is an object) is not set. ie latitude is null. As per the logs, in MapFragment.java: line no. 113 MapFragment.java: line no. 113 you are trying to access it. I think it is the code to show Toast where p.getLatitude().toString() results in NullPointerException.

You may have to pass Proximity instance to fragment either using Fragment.setArguments while adding the fragment or create a method in your fragment and access it from activity. As the code for Proximity is not a posted I assume that lat and long are Objects not primitive data types.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM