-1

**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) ""

Akshit
  • 1

0 Answers0