gpt4 book ai didi

android - Google map 和无法解析主机 maps.googleapis.com

转载 作者:行者123 更新时间:2023-11-30 02:11:38 25 4
gpt4 key购买 nike

我对谷歌地图有疑问。我尝试从我当前的位置和标记的位置添加 poliline。这是代码:

public class MapsFragment extends Fragment implements GoogleMap.OnMarkerClickListener, LocationListener {

static final LatLng CEK = new LatLng(50.293734, 18.680679);
static final LatLng SPIRALA = new LatLng(50.285402, 18.677715);
static final LatLng SPIRALA2 = new LatLng(50.285283, 18.678014);
static final LatLng ZIEMOWIT_PIAST = new LatLng(50.287742, 18.675693);
static final LatLng NOWA_HALA = new LatLng(50.289633, 18.679960);
static final LatLng STOLOWKA = new LatLng(50.288337, 18.674267);
static final LatLng RYNEK = new LatLng(50.294028, 18.665659);
static final LatLng LAKA_IGROWA = new LatLng(50.288844, 18.679562);

private static GoogleMap map;
private ArrayList<Marker> markerPoints;
private ArrayList<LatLng> mMarkerPoints;
private HashMap<String, Event> haspMap;
private Event cekEvent, spiralaEvent, spirala2Event, ziemowitEvent, nowaHalaEvent, stolowkaEvent, rynekEvent, lakaEvent;
private double mLatitude=0;
private double mLongitude=0;
private Location currentBestLocation = null;
private LocationManager locationManager;
private LatLng currentPos;
private Location location;
private Polyline polyline;
private static View v;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if (v != null) {
ViewGroup parent = (ViewGroup) v.getParent();
if (parent != null)
parent.removeView(v);
}
try {
v = inflater.inflate(R.layout.fragment_map, container, false);
} catch (InflateException e) {
e.printStackTrace();
}
haspMap = new HashMap <String, Event>();
mMarkerPoints = new ArrayList<>();
locationManager = (LocationManager) getActivity().getSystemService(getActivity().LOCATION_SERVICE);
setEventsData();
try {
initializeMap();

} catch (Exception e) {
e.printStackTrace();
}
return v;
}

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);

ButterKnife.inject(this, view);
try {
initializeMap();

} catch (Exception e) {
e.printStackTrace();
}
zoomMapOnMarkers();

}

private void initializeMap() {
if (map == null) {
map = ((SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map))
.getMap();
map.setOnMarkerClickListener(this);
setPointsList();
}
}

private void setPointsList(){
markerPoints = new ArrayList<>();
markerPoints.add(map.addMarker(new MarkerOptions()
.position(CEK)));
haspMap.put(markerPoints.get(markerPoints.size() - 1).getId(), cekEvent);
markerPoints.add(map.addMarker(new MarkerOptions()
.position(SPIRALA)));
haspMap.put(markerPoints.get(markerPoints.size() - 1).getId(), spiralaEvent);
markerPoints.add(map.addMarker(new MarkerOptions()
.position(SPIRALA2)));
haspMap.put(markerPoints.get(markerPoints.size() - 1).getId(), spirala2Event);
markerPoints.add(map.addMarker(new MarkerOptions()
.position(ZIEMOWIT_PIAST)));
haspMap.put(markerPoints.get(markerPoints.size() - 1).getId(), ziemowitEvent);
markerPoints.add(map.addMarker(new MarkerOptions()
.position(NOWA_HALA)));
haspMap.put(markerPoints.get(markerPoints.size() - 1).getId(), nowaHalaEvent);
markerPoints.add(map.addMarker(new MarkerOptions()
.position(STOLOWKA)));
haspMap.put(markerPoints.get(markerPoints.size() - 1).getId(), stolowkaEvent);
markerPoints.add(map.addMarker(new MarkerOptions()
.position(RYNEK)));
haspMap.put(markerPoints.get(markerPoints.size() - 1).getId(), rynekEvent);
markerPoints.add(map.addMarker(new MarkerOptions()
.position(LAKA_IGROWA)));
haspMap.put(markerPoints.get(markerPoints.size() - 1).getId(), lakaEvent);
}

private void setEventsData(){
cekEvent = new Event();
cekEvent.setTitle("Kabareton Igrowy w Centrum Edukacyjno - Kongresowe");
cekEvent.setDate("Poniedziałek, 11 maja, 18:00");
cekEvent.setPlace("CEK, ul. Konarskiego 18B");
spiralaEvent = new Event();
spiralaEvent.setTitle("Występ ATR Remont w CKS Mrowisko, a następnie Jam Session w KS Spirala");
spiralaEvent.setDate("Poniedziałek, 11 maja, 19:00");
spiralaEvent.setPlace("Spirala, ul. Pszczyńska 85");
spirala2Event = new Event();
spirala2Event.setTitle("Gra Miejska");
spirala2Event.setDate("Wtorek, 12 maja, 17:00");
spirala2Event.setPlace("Spirala, ul. Pszczyńska 85");
ziemowitEvent = new Event();
ziemowitEvent.setTitle("Pokaz filmowy między Piastem, a Ziemowitem");
ziemowitEvent.setDate("Wtorek, 12 maja, 19:00");
ziemowitEvent.setPlace("Między Ziemowitem a Piastem, ul. Łużycka 30-32");
nowaHalaEvent = new Event();
nowaHalaEvent.setTitle("Dzień Sportu");
nowaHalaEvent.setDate("Środa, 13 maja, 8:30");
nowaHalaEvent.setPlace("Nowa Hala, ul. Kaszubska 28");
stolowkaEvent = new Event();
stolowkaEvent.setTitle("Wieczór z grami planszowymi na Stołówce \"Na Łużyckiej\"");
stolowkaEvent.setDate("Środa, 13 maja, 17:30");
stolowkaEvent.setPlace("Stołówka na Łużyckiej, ul. Łużycka 24");
rynekEvent = new Event();
rynekEvent.setTitle("Przekazanie klucza na gliwickim rynku, a następnie korowód!");
rynekEvent.setDate("Czwartek, 14 maja, 16:00");
rynekEvent.setPlace("Rynek");
lakaEvent = new Event();
lakaEvent.setTitle("W czwartek wystąpią: Funk Da System, Koniec Świata, Farben Lehre, Acid Drinkers!\n" +
"A w piątek: Othalan, Prime, Małpa, Jamal, T.Love!\n");
lakaEvent.setDate("Czwrartek i piątek, 14-15 maja");
lakaEvent.setPlace("Łąka igrowa");
}

@Override
public boolean onMarkerClick(final Marker marker) {
for(Marker m : markerPoints){
if (marker.getId().equals(m.getId())){
showDialogInfo(m);
}
}
return false;
}

private void showDialogMore(Marker m){
LayoutInflater inflater = getLayoutInflater(getArguments());
View dialogLayout = inflater.inflate(R.layout.dialog_more_info, null);
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

TextView title = (TextView) dialogLayout.findViewById(R.id.dialogMoreTitle);
TextView text = (TextView) dialogLayout.findViewById(R.id.dialogMoreText);

Iterator iterator = haspMap.keySet().iterator();
while(iterator.hasNext()) {
String key=(String)iterator.next();
Event ev = (Event)haspMap.get(key);
if(m.getId().equals(key)) {
if (ev.getTitle().equals(cekEvent.getTitle())) {
title.setText(getString(R.string.event_monday_title));
text.setText(getString(R.string.event_monday_text));
} else if (ev.getTitle().equals(spiralaEvent.getTitle())) {
title.setText(getString(R.string.event_monday_title));
text.setText(getString(R.string.event_monday_text));
} else if (ev.getTitle().equals(spirala2Event.getTitle())) {
title.setText(getString(R.string.event_tuesday_title));
text.setText(getString(R.string.event_tuesday_text));
} else if (ev.getTitle().equals(ziemowitEvent.getTitle())) {
title.setText(getString(R.string.event_tuesday_title));
text.setText(getString(R.string.event_tuesday_text));
} else if (ev.getTitle().equals(nowaHalaEvent.getTitle())) {
title.setText(getString(R.string.event_wednesday_title));
text.setText(getString(R.string.event_wednesday_text));
} else if (ev.getTitle().equals(stolowkaEvent.getTitle())) {
title.setText(getString(R.string.event_wednesday_title));
text.setText(getString(R.string.event_wednesday_text));
} else if (ev.getTitle().equals(rynekEvent.getTitle())) {
title.setText(getString(R.string.event_thursday_title));
text.setText(getString(R.string.event_thursday_text));
} else if (ev.getTitle().equals(lakaEvent.getTitle())) {
title.setText(getString(R.string.event_thursday_title) + "\n" + getString(R.string.event_friday_title));
text.setText(getString(R.string.event_thursday_text) + "\n" + getString(R.string.event_friday_text));
}
}
}

builder.setView(dialogLayout);
builder.show();
}


private void showDialogInfo(final Marker m){
LayoutInflater inflater = getLayoutInflater(getArguments());
final View dialogLayout = inflater.inflate(R.layout.dialog_marker, null);
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
RelativeLayout layoutMore = (RelativeLayout) dialogLayout.findViewById(R.id.layoutMore);
RelativeLayout layoutTrip = (RelativeLayout) dialogLayout.findViewById(R.id.layoutTrip);
TextView textTitle = (TextView) dialogLayout.findViewById(R.id.textTitle);
TextView textDate = (TextView) dialogLayout.findViewById(R.id.textDate);
TextView textPlace = (TextView) dialogLayout.findViewById(R.id.textPlace);

builder.setView(dialogLayout);
final AlertDialog dialog = builder.create();

Iterator iterator = haspMap.keySet().iterator();
while(iterator.hasNext()) {
String key=(String)iterator.next();
Event ev = (Event)haspMap.get(key);
if(m.getId().equals(key)) {
textTitle.setText(ev.getTitle());
textDate.setText(ev.getDate());
textPlace.setText(ev.getPlace());
}
}

layoutMore.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showDialogMore(m);
}
});

layoutTrip.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (location != null) {
if(polyline != null)
polyline.remove();
mMarkerPoints.clear();
mMarkerPoints.add(currentPos);
mMarkerPoints.add(m.getPosition());
LatLng origin = mMarkerPoints.get(0);
LatLng dest = mMarkerPoints.get(1);
String url = getDirectionsUrl(origin, dest);
DownloadTask downloadTask = new DownloadTask();
downloadTask.execute(url);
dialog.dismiss();
} else {
drawRoute();
Toast.makeText(getActivity(), getString(R.string.toast_no_location), Toast.LENGTH_SHORT).show();
}
}
});


dialog.show();

}

private void zoomMapOnMarkers(){
LatLngBounds.Builder builder = new LatLngBounds.Builder();
for (Marker marker : markerPoints) {
builder.include(marker.getPosition());
}
final LatLngBounds bounds = builder.build();
map.setOnMapLoadedCallback(new GoogleMap.OnMapLoadedCallback() {
@Override
public void onMapLoaded() {
map.animateCamera(CameraUpdateFactory.newLatLngBounds(bounds, 45));
map.setMapType(GoogleMap.MAP_TYPE_HYBRID);
}
});
if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){
drawRoute();
}else{
showGPSDisabledAlertToUser();
}

}

private void showGPSDisabledAlertToUser(){
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getActivity());
alertDialogBuilder.setMessage(getString(R.string.dialog_GPS))
.setCancelable(false)
.setPositiveButton("OK",
new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int id){
Intent callGPSSettingIntent = new Intent(
android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(callGPSSettingIntent);
}
});
alertDialogBuilder.setNegativeButton("Cancel",
new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int id){
dialog.cancel();
}
});
AlertDialog alert = alertDialogBuilder.create();
alert.show();
}

private void drawRoute(){
map.setMyLocationEnabled(true);
Criteria criteria = new Criteria();
String provider = locationManager.getBestProvider(criteria, true);
location = locationManager.getLastKnownLocation(provider);

if(location!=null){
onLocationChanged(location);
}

locationManager.requestLocationUpdates(provider, 20000, 0, this);

}

@Override
public void onResume() {
super.onResume();
initializeMap();
}

private void drawMarker(LatLng point){
mMarkerPoints.add(point);

MarkerOptions options = new MarkerOptions();

options.position(point);

if(mMarkerPoints.size()==1){
options.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN));
}else if(mMarkerPoints.size()==2){
options.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED));
}

// Add new marker to the Google Map Android API V2
map.addMarker(options);
}

@Override
public void onLocationChanged(Location locatione) {
currentBestLocation = locatione;
Criteria criteria = new Criteria();
String provider = locationManager.getBestProvider(criteria, true);
location = locationManager.getLastKnownLocation(provider);
currentPos = new LatLng(currentBestLocation.getLatitude(), currentBestLocation.getLongitude());
mMarkerPoints.add(currentPos);
if(mMarkerPoints.size() < 2){

mLatitude = locatione.getLatitude();
mLongitude = locatione.getLongitude();
LatLng point = new LatLng(mLatitude, mLongitude);

map.moveCamera(CameraUpdateFactory.newLatLng(point));
map.animateCamera(CameraUpdateFactory.zoomTo(12));

drawMarker(point);
}
}

@Override
public void onStatusChanged(String provider, int status, Bundle extras) {

}

@Override
public void onProviderEnabled(String provider) {

}

@Override
public void onProviderDisabled(String provider) {

}

private String getDirectionsUrl(LatLng origin,LatLng dest){

String str_origin = "origin="+origin.latitude+","+origin.longitude;

String str_dest = "destination="+dest.latitude+","+dest.longitude;

String sensor = "sensor=false";

String parameters = str_origin+"&"+str_dest+"&"+sensor;

String output = "json";

String url = "https://maps.googleapis.com/maps/api/directions/"+output+"?"+parameters;

return url;
}

private String downloadUrl(String strUrl) throws IOException {
String data = "";
InputStream iStream = null;
HttpURLConnection urlConnection = null;
try{
URL url = new URL(strUrl);

urlConnection = (HttpURLConnection) url.openConnection();

//urlConnection.connect();
urlConnection.setReadTimeout(10000 /* milliseconds */);
urlConnection.setConnectTimeout(15000 /* milliseconds */);
urlConnection.setRequestMethod("GET");
urlConnection.setDoInput(true);
// Starts the query
urlConnection.connect();


iStream = urlConnection.getInputStream();

BufferedReader br = new BufferedReader(new InputStreamReader(iStream));

StringBuffer sb = new StringBuffer();

String line = "";
while( ( line = br.readLine()) != null){
sb.append(line);
}

data = sb.toString();

br.close();

}catch(Exception e){
e.printStackTrace();
}finally{
iStream.close();
urlConnection.disconnect();
}
return data;
}

/** A class to download data from Google Directions URL */
private class DownloadTask extends AsyncTask<String, Void, String> {

// Downloading data in non-ui thread
@Override
protected String doInBackground(String... url) {

// For storing data from web service
String data = "";

try{
// Fetching the data from web service
data = downloadUrl(url[0]);
}catch(Exception e){
Log.d("Background Task",e.toString());
}
return data;
}

// Executes in UI thread, after the execution of
// doInBackground()
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);

ParserTask parserTask = new ParserTask();

// Invokes the thread for parsing the JSON data
parserTask.execute(result);
}
}

/** A class to parse the Google Directions in JSON format */
private class ParserTask extends AsyncTask<String, Integer, List<List<HashMap<String,String>>> >{

// Parsing the data in non-ui thread
@Override
protected List<List<HashMap<String, String>>> doInBackground(String... jsonData) {

JSONObject jObject;
List<List<HashMap<String, String>>> routes = null;

try{
jObject = new JSONObject(jsonData[0]);
DirectionsJSONParser parser = new DirectionsJSONParser();

// Starts parsing data
routes = parser.parse(jObject);
}catch(Exception e){
e.printStackTrace();
}
return routes;
}

// Executes in UI thread, after the parsing process
@Override
protected void onPostExecute(List<List<HashMap<String, String>>> result) {
ArrayList<LatLng> points = null;
PolylineOptions lineOptions = null;

// Traversing through all the routes
for(int i=0;i<result.size();i++){
points = new ArrayList<LatLng>();
lineOptions = new PolylineOptions();

// Fetching i-th route
List<HashMap<String, String>> path = result.get(i);

// Fetching all the points in i-th route
for(int j=0;j<path.size();j++){
HashMap<String,String> point = path.get(j);

double lat = Double.parseDouble(point.get("lat"));
double lng = Double.parseDouble(point.get("lng"));
LatLng position = new LatLng(lat, lng);

points.add(position);
}

// Adding all the points in the route to LineOptions
lineOptions.addAll(points);
lineOptions.width(6);
lineOptions.color(Color.RED);
}

// Drawing polyline in the Google Map for the i-th route
//map.addPolyline(lineOptions);
polyline = map.addPolyline(lineOptions);
}
}

@Override
public void onDestroyView() {

super.onDestroyView();
Fragment fragment = (getFragmentManager().findFragmentById(R.id.map));
if (fragment != null){
getActivity().getSupportFragmentManager().beginTransaction()
.remove(fragment)
.commit();
}
}
}

我有来自标记的当前位置和位置,当单击以绘制折线时,我得到无法解析主机“maps.googleapis.com”:没有与主机名关联的地址。和应用程序崩溃。重新开始时一切正常,折线添加到 map 中。知道为什么吗?

最佳答案

我使用以下方法解决我的问题:

  urlConnection.setReadTimeout(15000 /* milliseconds */);
urlConnection.setConnectTimeout(15000 /* milliseconds */);
urlConnection.setDoInput(true);

关于android - Google map 和无法解析主机 maps.googleapis.com,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30018341/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com