9
我在运行 Android 应用程序时遇到这个问题。有谁知道这个问题以及如何解决它?
当我运行 Android 应用程序时,我在 Logcat 中遇到了这个问题。有谁知道这个问题以及如何解决它?
应用程序没有崩溃,但是当我在微调器中选择选项并单击按钮时,它不会在谷歌地图上显示结果
MainActivity.Java
package com.example.nearbyplacedemo;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.loader.content.AsyncTaskLoader;
import android.Manifest;
import android.content.AsyncQueryHandler;
import android.content.pm.PackageManager;
import android.location.Location;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Spinner;
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 MainActivity extends AppCompatActivity {
//initialize variable
Spinner sp_type;
Button bt_find;
SupportMapFragment supportMapFragment;
GoogleMap map;
FusedLocationProviderClient fusedLocationProviderClient;
double currentLat = 0, currentLong = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Assign Variable
sp_type = findViewById(R.id.sp_type);
bt_find = findViewById(R.id.bt_find);
supportMapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.google_map);
//Initialize Array of place list
String[] placeTypeList = {"hospital", "medical", "atm"};
//Initialize Array of Place name list
String[] placeNameList = {"Hospital", "Medical", "ATM"};
//set Adapter on Spinner
sp_type.setAdapter(new ArrayAdapter<>(MainActivity.this, android.R.layout.simple_spinner_dropdown_item, placeNameList));
//Initialize Fused location client
fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this);
//check permission
if (ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
//if permission is granted
//call method
getCurrentLocation();
} else {
//when permission denied
//request permission
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 44);
}
bt_find.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//get selected position of spinner
int i = sp_type.getSelectedItemPosition();
//Initialize Url
String url = "https://maps.googleapis.com/maps/api/place/nearbysearch/json" +//Url
"?location=" + currentLat + "," + currentLong +//location latitude and longitude
"&radius=5000" +//nearby Radius
"&type" + placeTypeList[i] +//place type
"&sensor = true" +//Sensor
"&key=" + "AIzaSyCEidC6oECzj0IexspcvUpqnKPS2_nhKfQ";
//execute place task method to download json data
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)
{
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION},44);
return;
}
//Initailize task location
Task<Location> task = fusedLocationProviderClient.getLastLocation();
task.addOnSuccessListener(new OnSuccessListener<Location>() {
@Override
public void onSuccess(Location location) {
//when successs
if(location!=null){
//when location is not null
//get current latitude
currentLat = location.getLatitude();
//get current longitude
currentLong = location.getLongitude();
//sync map
supportMapFragment.getMapAsync(new OnMapReadyCallback() {
@Override
public void onMapReady(@NonNull GoogleMap googleMap) {
//when map is ready
map = googleMap;
//zoom on current location
map.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(currentLat,currentLong),14));
}
});
}
}
});
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if(requestCode==44){
if (grantResults.length >0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
//when permission is granted
//call methode
getCurrentLocation();
}
}
}
private class Placetask extends AsyncTask<String,Integer,String> {
@Override
protected String doInBackground(String... strings) {
String data ;
try {
//Initialize data
data=downloadUrl(strings[0]);
} catch (IOException e) {
throw new RuntimeException(e);
}
return data;
}
@Override
protected void onPostExecute(String s) {
//Excute parser task
new ParserTask().execute(s);
}
}
private String downloadUrl(String string) throws IOException {
//Initialize Url
URL url = new URL(string);
//Initialize connection
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
//connect connection
connection.connect();
//initialize inputstream
InputStream stream = connection.getInputStream();
//Initialize bufferreader
BufferedReader reader= new BufferedReader(new InputStreamReader(stream));
//Initialize string builder
StringBuilder builder = new StringBuilder();
//Initailize String variable
String line = "";
//use while loop
while ((line = reader.readLine())!=null){
//append line
builder.append(line);
}
//get append data
String data = builder.toString();
//close reader
reader.close();
//return data
return data;
}
private class ParserTask extends AsyncTask<String,Integer, List<HashMap<String,String>>> {
@Override
protected List<HashMap<String, String>> doInBackground(String... strings) {
//create jason parser
JsonPaeser jsonPaeser = new JsonPaeser();
//Initialize hash map list
List<HashMap<String,String>> mapList=null;
JSONObject object ;
try {
//intialize jsonobject
object = new JSONObject(strings[0]);
//Parse jsonobject
mapList = jsonPaeser.parseResult(object);
} catch (JSONException e) {
throw new RuntimeException(e);
}
//return map list
return mapList;
}
@Override
protected void onPostExecute(List<HashMap<String, String>> hashMaps) {
if (map != null) {
map.clear();
} else {
// Handle the case when the GoogleMap object is null
Log.e("GoogleMap", "GoogleMap object is null");
}
//clear map
// map.clear();
//use for loop
for (int i=0;i<hashMaps.size();i++){
//initialize hashmap
HashMap<String,String> hashMapList = hashMaps.get(i);
//get latitude
double lat = Double.parseDouble(hashMapList.get("lat"));
//get longitude
double lng = Double.parseDouble(hashMapList.get("lng"));
//get name
String name = hashMapList.get("name");
//concat latitude longitude
LatLng latLng = new LatLng(lat,lng);
//Initialize Marker Option
MarkerOptions options = new MarkerOptions();
//set position
options.position(latLng);
//set title
options.title(name);
//add marker option
map.addMarker(options);
}
}
}
}
JsonParser.java:-
package com.example.nearbyplacedemo;
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 JsonPaeser {
private HashMap<String , String> parseJsonObject(JSONObject object){
//initialize hashmap
HashMap<String,String> datalist = new HashMap<>();
//get name form object
try {
String name = object.getString("name");
//get latitude from object
String latitude = object.getJSONObject("geometery")
.getJSONObject("location").getString("lat");
//get longitude from object
String longitude = object.getJSONObject("geometery")
.getJSONObject("location").getString("lng");
//put all value in hashmap
datalist.put("name",name);
datalist.put("lat",latitude);
datalist.put("lng",longitude);
} catch (JSONException e) {
throw new RuntimeException(e);
}
return datalist;
}
private List<HashMap<String,String>> parseJsonArray(JSONArray jsonArray){
//Initialize hashmap list
List<HashMap<String,String>> datalist= new ArrayList<>();
for (int i=0;i<jsonArray.length();i++){
try {
//Initialize Hashmap
HashMap<String,String> data = parseJsonObject((JSONObject) jsonArray.get(i));
//add data in hashmap
datalist.add(data);
} catch (JSONException e) {
throw new RuntimeException(e);
}
}
//retuen hashmap list
return datalist;
}
public List<HashMap<String,String>> parseResult(JSONObject object){
//initialize jsonArray
JSONArray jsonArray ;
try {
//get result array
jsonArray = object.getJSONArray("results");
} catch (JSONException e) {
throw new RuntimeException(e);
}
//return array
return parseJsonArray(jsonArray);
}
}
我构建了 Android 应用程序,其中查找用户当前位置,如果用户想要附近的医院、医疗机构、ATM,则选择该应用程序并显示结果。但在我的应用程序中,应用程序运行成功,但当用户输入输入应用程序时,在 logcat 中显示错误并且不显示结果
Круто придумано。 Мне нравится задумка