getApplicationContext() on a null object reference <p>I allways get this <code>java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context android.content.Context.getApplicationContext()' on a null object reference</code> error while I run my app. I saw other answers but I didn't understand how to use those answer, I understood that there is some problem withe the context because there isn't call by Activity, so I also tried to pass the Activity context with no success... this is my code:</p> <p><strong><em>EDIT</em></strong> I already did your answers and it'snt worked, so I deleted this becuase I thought it'snt the solution. Due to yours answers I updated the code(with context as parmerter to the Distance class >to MySingleton class...)</p> <pre><code>public class MainActivity extends AppCompatActivity { private Button b; private TextView t; private LocationManager locationManager; private LocationListener listener; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); t = (TextView) findViewById(R.id.textView); b = (Button) findViewById(R.id.button); locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); listener = new LocationListener() { @Override public void onLocationChanged(Location location) { Log.d("Co", "onLocationChanged"); Distance distance=new Distance(); t.setText("\n " + location.getLongitude() + " " + location.getLatitude()+"\n "+distance.getDistance(location)); Location l2=new Location(""); //float distance=location.distanceTo(l2); Log.d("Co", String.valueOf(distance)); } @Override public void onStatusChanged(String s, int i, Bundle bundle) { } @Override public void onProviderEnabled(String s) { } @Override public void onProviderDisabled(String s) { Intent i = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); startActivity(i); } }; configure_button(); } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { switch (requestCode){ case 10: { configure_button(); Log.d("Co", "premmsioenChecks"); } break; default: break; } } public void configure_button(){ // first check for permissions if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED &amp;&amp; ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { if (Build.VERSION.SDK_INT &gt;= Build.VERSION_CODES.M) { requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION,Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.INTERNET} ,10); Log.d("Co", "premmsioen"); } return; } // this code won't execute IF permissions are not allowed, because in the line above there is return statement. b.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //noinspection MissingPermission locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, listener); locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, listener); Log.d("Co", "onClick"); Location l2=new Location(""); } }); } } </code></pre> <p>public class Distance {</p> <pre><code>static String url = ""; static String result=""; public String getDistance(Location location,Context context) { Log.d("app","getDistance"); String origins=location.getLatitude()+","+location.getLongitude(); url="https://maps.googleapis.com/maps/api/distancematrix/json?&amp;origins="+origins+"&amp;destinations="+destinations; Log.d("URL",url); JsonObjectRequest jsObjRequest = new JsonObjectRequest (Request.Method.GET, url, null, new Response.Listener&lt;JSONObject&gt;() { @Override public void onResponse(JSONObject response) { Log.d("app","onRespone"); String distance=getText(response); if (distance.contains("Error")) { result=distance; return; } else { if (distance.contains("km")) { int meters = Integer.parseInt(distance.replaceAll("[\\D]", "")) * 1000; result= "The distance is " + meters + " meters"; return; } Log.d("7", String.valueOf(Integer.parseInt(distance.replaceAll("[\\D]", "")))); result= "The distance is " + distance; } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Log.d("app","Error Respone"); } } ); MySingleton.getInstance(context).addToRequestque(jsObjRequest); return result; } public String getText(JSONObject response) { String text=""; try { JSONArray rows = response.getJSONArray("rows"); Log.d("1", rows.toString()); if(rows.toString().contains("[]")) return text="Error"; JSONObject elements = rows.getJSONObject(0); Log.d("2", elements.toString()); rows = elements.getJSONArray("elements"); Log.d("3", rows.toString()); elements = rows.getJSONObject(0); Log.d("4", elements.toString()); Log.d("Error1","Error is @"+elements.getString("status")); if( elements.getString("status").contains("OK")) { JSONObject d = elements.getJSONObject("distance"); Log.d("5", d.toString()); text = d.getString("text"); } else { Log.d("Error2", elements.getString("status")); text = "Error-" + elements.getString("status"); } } catch (JSONException e) { text="Some error ocuerd"; } return text; } </code></pre> <p>}</p> <pre><code>public class MySingleton { private static MySingleton mInstance; private RequestQueue requestQueue; public static Context mCtx; private MySingleton(Context context) { mCtx=context; requestQueue= getRequestQueue(); } public RequestQueue getRequestQueue() { if(requestQueue==null) { requestQueue = Volley.newRequestQueue(mCtx.getApplicationContext()); } return requestQueue; } public static synchronized MySingleton getInstance(Context context) { if(mInstance==null) { mInstance=new MySingleton(context); } return mInstance; } public &lt;T&gt; void addToRequestque(Request&lt;T&gt; request) { requestQueue.add(request); } } </code></pre> <p>and this is the logcat</p> <pre><code>06-24 16:19:26.771 25300-25300/com.example.elicahi.gateor D/Co: onClick 06-24 16:19:27.556 25300-25300/com.example.elicahi.gateor D/Co: onLocationChanged 06-24 16:19:27.579 25300-25300/com.example.elicahi.gateor D/AndroidRuntime: Shutting down VM 06-24 16:19:27.579 25300-25300/com.example.elicahi.gateor E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.elicahi.gateor, PID: 25300 java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context android.content.Context.getApplicationContext()' on a null object reference at android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:107) at com.example.elicahi.gateor.MySingleton.getRequestQueue(MySingleton.java:24) at com.example.elicahi.gateor.MySingleton.&lt;init&gt;(MySingleton.java:19) at com.example.elicahi.gateor.MySingleton.getInstance(MySingleton.java:32) at com.example.elicahi.gateor.Distance.getDistance(Distance.java:79) at com.example.elicahi.gateor.MainActivity$1.onLocationChanged(MainActivity.java:54) at android.location.LocationManager$ListenerTransport._handleMessage(LocationManager.java:285) at android.location.LocationManager$ListenerTransport.-wrap0(LocationManager.java) at android.location.LocationManager$ListenerTransport$1.handleMessage(LocationManager.java:230) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) </code></pre>