Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Android Studio | NearbyPlaces中查找地图上的附近位置_Java_Android - Fatal编程技术网

Java 如何在Android Studio | NearbyPlaces中查找地图上的附近位置

Java 如何在Android Studio | NearbyPlaces中查找地图上的附近位置,java,android,Java,Android,在我的Android项目中,我想根据我在谷歌地图上的当前位置显示最近的位置。我通过听视频学习新知识。但是,当我想在微调器中选择场地类型时,我得到了这个错误。错误:E/libprocessgroup:set\u Timer缺少写入失败:不允许操作您能帮助我吗 MainActivity.java: public class MainActivity extends AppCompatActivity { Spinner spinner; Button btn_find; Su

在我的Android项目中,我想根据我在谷歌地图上的当前位置显示最近的位置。我通过听视频学习新知识。但是,当我想在微调器中选择场地类型时,我得到了这个错误。错误:E/libprocessgroup:set\u Timer缺少写入失败:不允许操作您能帮助我吗

MainActivity.java:
public class MainActivity extends AppCompatActivity {
    Spinner spinner;
    Button btn_find;
    SupportMapFragment supportmap;
    GoogleMap map;
    FusedLocationProviderClient fusedLocationProviderClient;
    double currentLat = 0, currentLong = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        spinner = findViewById(R.id.spinner);

        btn_find = findViewById(R.id.btn_find);
        supportmap = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.google_map);


        String[] placeTypeList = {"camii", "park", "avm", "müze", "restaurant"};
        String[] placeNameList = {"Camii", "Müze", "Avm", "Park", "Restaurant"};

        spinner.setAdapter(new ArrayAdapter<>(MainActivity.this, android.R.layout.simple_spinner_dropdown_item, placeNameList));


        fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this);
        if (ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
            getCurrentLocation();
        } else {
            ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 44);
        }
        btn_find.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int i = spinner.getSelectedItemPosition();
                // String url = "https://maps.googleapis.com/maps/api/...​" + "?location=" + currentLat + "," + currentLong + "&radius=5000" + "&type=" + placeTypeList[i] + "&sensor=true" + "&key=" + getResources().getString(R.string.google_map_key);
                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();
                      supportmap.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) {


        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);
            }
            super.onPostExecute(hashMaps);
        }
    }
}

JsonParser.java:
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("geometri").getJSONObject("location").getString("lat");
            String longitude=object.getJSONObject("geometri").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("results");
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return parseJsonArray(jsonArray);
    }
}
activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:orientation="vertical"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="8dp"
        android:orientation="horizontal">

        <Spinner
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:id="@+id/spinner"
            android:background="@android:drawable/editbox_background"></Spinner>

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/btn_find"
            android:text="BUL"></Button>

    </LinearLayout>

    <fragment
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/google_map"
        android:name="com.google.android.gms.maps.SupportMapFragment"></fragment>
</LinearLayout>
MainActivity.java:
公共类MainActivity扩展了AppCompatActivity{
纺纱机;
按钮btn_查找;
支持图片段支持图;
谷歌地图;
FusedLocationProviderClient FusedLocationProviderClient;
双currentLat=0,currentLong=0;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
微调器=findViewById(R.id.spinner);
btn_find=findviewbyd(R.id.btn_find);
supportmap=(SupportMapFragment)getSupportFragmentManager()
.findFragmentById(R.id.google_地图);
String[]placeTypeList={“camii”、“park”、“avm”、“müze”、“restaurant”};
String[]placeNameList={“Camii”、“Müze”、“Avm”、“Park”、“Restaurant”};
setAdapter(新的ArrayAdapter(MainActivity.this,android.R.layout.simple_spinner_dropdown_item,placeNameList));
fusedLocationProviderClient=LocationServices.getFusedLocationProviderClient(此);
if(ActivityCompat.checkSelfPermission(MainActivity.this、Manifest.permission.ACCESS\u FINE\u LOCATION)==PackageManager.permission\u已授予){
getCurrentLocation();
}否则{
ActivityCompat.requestPermissions(MainActivity.this,新字符串[]{Manifest.permission.ACCESS\u FINE\u LOCATION},44);
}
btn_find.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
int i=spinner.getSelectedItemPosition();
//字符串url=”https://maps.googleapis.com/maps/api/...​" + "?location=“+currentLat+”、“+currentLong+”&radius=5000”+“&type=“+placeTypeList[i]+”&sensor=true”+“&key=“+getResources().getString(R.string.google\u map\u key);
字符串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\u map\u key);
新建PlaceTask().execute(url);
}
});
}
私有void getCurrentLocation(){
if(ActivityCompat.checkSelfPermission(this,Manifest.permission.ACCESS\u FINE\u LOCATION)!=PackageManager.permission\u已授予和&ActivityCompat.checkSelfPermission(this,Manifest.permission.ACCESS\u LOCATION)!=PackageManager.permission\u已授予){
返回;
}
Task Task=fusedLocationProviderClient.getLastLocation();
task.addOnSuccessListener(新的OnSuccessListener(){
@凌驾
成功时的公共无效(位置){
如果(位置!=null){
currentLat=location.getLatitude();
currentLong=location.getLongitude();
getMapAsync(新的OnMapReadyCallback(){
@凌驾
4月1日公开作废(谷歌地图谷歌地图){
地图=谷歌地图;
map.animateCamera(CameraUpdateFactory.newLatLngZoom(新LatLng(currentLat,currentLong),10));
}
});
}
}
});
}
@凌驾
public void onRequestPermissionsResult(int-requestCode,@NonNull-String[]permissions,@NonNull-int[]grantResults){
if(requestCode==44){
如果(grantResults.length>0&&grantResults[0]==已授予PackageManager.PERMISSION){
getCurrentLocation();
}
}
}
私有类PlaceTask扩展了AsyncTask{
@凌驾
受保护的字符串背景(字符串…字符串){
字符串数据=null;
试一试{
数据=下载URL(字符串[0]);
}捕获(IOE异常){
e、 printStackTrace();
}
返回数据;
}
@凌驾
受保护的void onPostExecute(字符串s){
新建ParserTask()。执行;
}
}
私有字符串下载URL(字符串字符串)引发IOException{
URL=新URL(字符串);
HttpURLConnection connection=(HttpURLConnection)url.openConnection();
connection.connect();
InputStream=connection.getInputStream();
BufferedReader reader=新的BufferedReader(新的InputStreamReader(流));
StringBuilder=新的StringBuilder();
字符串行=”;
而((line=reader.readLine())!=null){
builder.append(行);
}
字符串数据=builder.toString();
reader.close();
返回数据;
}
私有类ParserTask扩展了AsyncTask{
@凌驾
受保护列表doInBackground(字符串…字符串){
JsonParser JsonParser=新的JsonParser();
列表映射列表=空;
JSONObject对象=null;
试一试{
object=新的JSONObject(字符串[0]);
mapList=jsonParser.parseResult(对象);
}捕获(JSONException e){
e、 printStackTrace();
}
返回地图列表;
}
@凌驾
受保护的void onPostExecute(列出哈希映射){
map.clear();
对于(int i=0;i