**THIS IS THE CODE **
package com.example.sleepdetectorapp.activity;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.fragment.app.FragmentActivity;
import android.Manifest;
import android.content.pm.PackageManager;
import android.location.Location;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Spinner;
import com.example.sleepdetectorapp.R;
import com.google.android.gms.location.FusedLocationProviderClient;
import com.google.android.gms.location.LocationServices;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.android.gms.tasks.Task;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.List;
public class mapactivity extends AppCompatActivity {
GoogleMap map;
Spinner spType;
Button btFind;
SupportMapFragment supportMapFragment;
FusedLocationProviderClient fusedLocationProviderClient;
double currentLat=0 , currentLong=0 ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mapactivity);
spType = findViewById(R.id.sp_type);
btFind = findViewById(R.id.bt_find);
supportMapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.google_map);
// mapFragment.getMapAsync(this);
String[] placeTypeList = {"cafe", "hotel", "restroom", "hospital", "restaurant"};
String[] placeNameList = {"CAFE", "HOTEL", "RESTROOM", "HOSPITAL", "RESTAURANT"};
spType.setAdapter(new ArrayAdapter<>(mapactivity.this, android.R.layout.simple_spinner_dropdown_item, placeNameList));
fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this);
if (ActivityCompat.checkSelfPermission(mapactivity.this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
{
getCurrentLocation();
}
}
else{
ActivityCompat.requestPermissions(mapactivity.this,new String[]{Manifest.permission.ACCESS_FINE_LOCATION},44);
}
btFind.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int i= spType.getSelectedItemPosition();
String url = "https://maps.googleapis.com/maps/api/place/nearbysearch/json"+"?location="+ currentLat +","+ currentLong+"&radius=5000"+
"&types="+placeTypeList[i]+"&sensor=true"+"&key=" + getResources().getString(R.string.google_map_key);
new PlaceTask().execute(url);
}
});
/*@Override
public void onMapReady(@NonNull GoogleMap googleMap) {
map=googleMap;
LatLng home = new LatLng(28.31207706445047, 79.4244047503945);
map.addMarker(new MarkerOptions().position(home).title("HOME"));
map.moveCamera(CameraUpdateFactory.newLatLng(home));
*/
}
private void getCurrentLocation() {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
// TODO: Consider calling
// ActivityCompat#requestPermissions
// here to request the missing permissions, and then overriding
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
// int[] grantResults)
// to handle the case where the user grants the permission. See the documentation
// for ActivityCompat#requestPermissions for more details.
return;
}
Task<Location> task = fusedLocationProviderClient.getLastLocation();
task.addOnSuccessListener(new OnSuccessListener<Location>() {
@Override
public void onSuccess(Location location) {
if(location!=null){
currentLat = location.getLatitude();
currentLong= location.getLongitude();
supportMapFragment.getMapAsync(new OnMapReadyCallback() {
@Override
public void onMapReady(@NonNull GoogleMap googleMap) {
map = googleMap;
map.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(currentLat,currentLong),10));
}
});
}
}
});
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if(requestCode==44){
if(grantResults.length>0 && grantResults[0]==PackageManager.PERMISSION_GRANTED){
getCurrentLocation();
}
}
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
private class PlaceTask extends AsyncTask<String,Integer,String> {
@Override
protected String doInBackground(String... strings) {
String data = null;
try {
data =downloadUrl(strings[0]);
} catch (IOException e) {
e.printStackTrace();
}
return data;
}
@Override
protected void onPostExecute(String s) {
new ParserTask().execute(s);
}
}
private String downloadUrl(String string) throws IOException {
URL url= new URL(string);
HttpURLConnection connection =(HttpURLConnection) url.openConnection();
connection.connect();
InputStream stream=connection.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
StringBuilder builder =new StringBuilder();
String line = "";
while((line=reader.readLine())!=null){
builder.append(line);
}
String data = builder.toString();
reader.close();
return data;
}
private class ParserTask extends AsyncTask<String,Integer, List<HashMap<String,String>>> {
@Override
protected List<HashMap<String, String>> doInBackground(String... strings) {
JsonParser jsonParser = new JsonParser();
List<HashMap<String,String>> mapList=null;
JSONObject object = null;
try {
object = new JSONObject(strings[0]);
mapList=jsonParser.parseResult(object);
} catch (JSONException e) {
e.printStackTrace();
}
return mapList;
}
@Override
protected void onPostExecute(List<HashMap<String, String>> hashMaps) {
map.clear();
for (int i=0;i<hashMaps.size();i++){
HashMap<String,String> hashMapList = hashMaps.get(i);
double lat = Double.parseDouble(hashMapList.get("lat"));
double lng = Double.parseDouble(hashMapList.get("lng"));
String name = hashMapList.get("name");
LatLng latLng = new LatLng(lat,lng);
MarkerOptions options = new MarkerOptions();
options.position(latLng);
options.title(name);
map.addMarker(options);
}
}
}
}
2022-05-26 17:23:14.355 6335-6335/com.example.sleepdetectorapp E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.sleepdetectorapp, PID: 6335 java.lang.NullPointerException: Attempt to invoke virtual method 'void com.google.android.gms.maps.GoogleMap.clear()' on a null object reference at com.example.sleepdetectorapp.activity.mapactivity$ParserTask.onPostExecute(mapactivity.java:201) at com.example.sleepdetectorapp.activity.mapactivity$ParserTask.onPostExecute(mapactivity.java:182) at android.os.AsyncTask.finish(AsyncTask.java:771) at android.os.AsyncTask.access$900(AsyncTask.java:199) at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:788) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loopOnce(Looper.java:201) at android.os.Looper.loop(Looper.java:288) at android.app.ActivityThread.main(ActivityThread.java:7839) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003) ""