안드로이드 스튜디오에서 plcaes api로 주변 식당,병원,등 시설을 표시하고 싶어서 유튜브 보고 따라하고 있는데 버튼클릭시 어플이 바로 꺼져버리네요. 도움한번만 부탁드립니다. ㅜㅜ
package com.example.myapplication;
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 androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import com.example.myapplication.parsers.JsonParser;
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 SubActivity3 extends AppCompatActivity {
Spinner spType;
Button btFind;
SupportMapFragment supportMapFragment;
GoogleMap map;
FusedLocationProviderClient fusedLocationProviderClient;
double currentLat = 0, currentLong = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sub3);
spType = findViewById(R.id.sp_type);
btFind = findViewById(R.id.bt_find);
supportMapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.google_map);
String[] placeTypeList = {"atm", "bank", "hospital", "movie_theater", "restaurant"};
String[] placeNameList = {"ATM", "Bank", "Hospital", "Movie Theater", "Restaurant"};
spType.setAdapter(new ArrayAdapter<>(SubActivity3.this,
android.R.layout.simple_spinner_dropdown_item, placeNameList));
fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this);
if (ActivityCompat.checkSelfPermission(SubActivity3.this,
Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
getCurrentLocation();
}else {
ActivityCompat.requestPermissions(SubActivity3.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);
}
});
}
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) {
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(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) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == 44) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
getCurrentLocation();
}
}
}
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);
}
}
}
}
Jsonparser 입니다
package com.example.myapplication.parsers;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class JsonParser {
private HashMap<String,String> parseJsonObject(JSONObject object){
HashMap<String,String> dataList = new HashMap<>();
try {
String name = object.getString("name");
String latitude = object.getJSONObject("geometry")
.getJSONObject("location").getString("lat");
String longitude = object.getJSONObject("geometry")
.getJSONObject("location").getString("lng");
dataList.put("name",name);
dataList.put("lat",latitude);
dataList.put("lng",longitude);
} catch (JSONException e) {
e.printStackTrace();
}
return dataList;
}
private List<HashMap<String,String>> parseJsonArray(JSONArray jsonArray){
List<HashMap<String,String >> dataList = new ArrayList<>();
for (int i=0; i<jsonArray.length(); i++){
try {
HashMap<String,String> data = parseJsonObject((JSONObject) jsonArray.get(i));
dataList.add(data);
} catch (JSONException e) {
e.printStackTrace();
}
}
return dataList;
}
public List<HashMap<String,String>> parseResult(JSONObject object){
JSONArray jsonArray = null;
try {
jsonArray = object.getJSONArray("result");
} catch (JSONException e) {
e.printStackTrace();
}
return parseJsonArray(jsonArray);
}
}


답변 1개
답변을 작성하려면 로그인이 필요합니다.