2017-11-28 7 views
0

Ich möchte den Eingabeort vom Benutzer (z. B. "Krankenhaus") an MapsActivity übergeben, damit einige Krankenhäuser in der Nähe auf der Karte angezeigt werden können. Ich habe versucht, es wie unten gezeigt, aber nicht bestanden. Denn wenn ich eine Protokollnachricht für die Zeichenfolge "search" anzeigen lasse, kann die Protokollnachricht nicht in logcat angezeigt werden. Es kann eine andere Protokollmeldung angezeigt werden, aber nur die Protokollnachricht für "Suche" kann nicht angezeigt werden. Also, wie kann ich es weitergeben? Hoffe, etwas Hilfe zu bekommen. Danke Unten ist mein Code.Daten können nicht an MapsActivity übergeben werden

MainActivity

btnSearch.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Intent intent = new Intent(MainActivity.this, MapsActivity.class); 
      intent.putExtra("search", searchWord); 
      startActivity(intent); 
     } 
    }); 

* MapsActivity

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


    //Log.e("halo:", search); 

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) 
    { 
     checkLocationPermission(); 

    } 
    // Obtain the SupportMapFragment and get notified when the map is ready to be used. 
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() 
      .findFragmentById(R.id.map); 
    search = getIntent().getExtras().getString("search"); 
    mapFragment.getMapAsync(this); 

    //setLocation(); 
} 


@Override 
public void onMapReady(GoogleMap googleMap) { 
    mMap = googleMap; 

    if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) { 
     bulidGoogleApiClient(); 
     mMap.setMyLocationEnabled(true); 
     Log.e("check permission", ""+PackageManager.PERMISSION_GRANTED); 
     Log.v("halo:", search); 
    } 

    setLocation(); 
}  

public void setLocation() { 
    Object dataTransfer[] = new Object[2]; 
    GetNearbyPlacesData getNearbyPlacesData = new GetNearbyPlacesData(); 
    Log.e("set location", ""+dataTransfer); 


    Log.e("halo:", search); 

    if (search.equalsIgnoreCase("hospital")) { 
     mMap.clear(); 
     String hospital = "hospital"; 
     String url = getUrl(latitude, longitude, hospital); 
     dataTransfer[0] = mMap; 
     dataTransfer[1] = url; 

     getNearbyPlacesData.execute(dataTransfer); 
     Toast.makeText(MapsActivity.this, "Showing Nearby Hospitals", Toast.LENGTH_SHORT).show(); 
    } else if (search.equalsIgnoreCase("clinic")) { 
     mMap.clear(); 
     String url = getUrl(latitude, longitude, search); 
     dataTransfer[0] = mMap; 
     dataTransfer[1] = url; 

     getNearbyPlacesData.execute(dataTransfer); 
     Toast.makeText(MapsActivity.this, "Showing Nearby Clinics", Toast.LENGTH_SHORT).show(); 
    } else if (search.equalsIgnoreCase("pharmacy")) { 
     mMap.clear(); 
     String url = getUrl(latitude, longitude, "pharmacy"); 
     dataTransfer[0] = mMap; 
     dataTransfer[1] = url; 

     getNearbyPlacesData.execute(dataTransfer); 
     Toast.makeText(MapsActivity.this, "Showing Nearby Pharmacy", Toast.LENGTH_SHORT).show(); 
    } else if(search.equalsIgnoreCase("")) { 
     Toast.makeText(this, "No location", Toast.LENGTH_SHORT).show(); 

    } 
} 


private String getUrl(double latitude , double longitude , String nearbyPlace) 
{ 

    StringBuilder googlePlaceUrl = new StringBuilder("https://maps.googleapis.com/maps/api/place/nearbysearch/json?"); 
    googlePlaceUrl.append("location="+latitude+","+longitude); 
    googlePlaceUrl.append("&radius="+PROXIMITY_RADIUS); 
    googlePlaceUrl.append("&type="+nearbyPlace); 
    googlePlaceUrl.append("&sensor=true"); 
    googlePlaceUrl.append("&key="+"AIzaSyBLEPBRfw7sMb73Mr88L91Jqh3tuE4mKsE"); 

    Log.d("MapsActivity", "url = "+googlePlaceUrl.toString()); 

    return googlePlaceUrl.toString(); 
} 

@Override 
public void onConnected(@Nullable Bundle bundle) { 

    locationRequest = new LocationRequest(); 
    locationRequest.setInterval(100); 
    locationRequest.setFastestInterval(1000); 
    locationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY); 


    if(ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) 
    { 
     LocationServices.FusedLocationApi.requestLocationUpdates(client, locationRequest, this); 
    } 
} 

Antwort

0

In Ihrem MapsActivity haben Sie diese Zeile versucht zu bewegen:

search = getIntent().getExtras().getString("search"); 

über dem onCreate Methode, kurz nach:

public class StationsMapsActivity extends FragmentActivity implements OnMapReadyCallback { 

Ich denke, dies würde für alle anderen Methoden in der Klasse zugänglich machen, anstatt nur die onCreate-Methode, wo Sie es platziert haben.

Verwandte Themen