2016-07-12 3 views
2

Ich habe ein Problem mit diesem Code, kann Methode getMap() nicht lösen. Ich nicht finden, wo das Problem ist, bitte Hilfe mit Code, ich benutze Android Studio und Marker zu nehmen Standorte von mySQL mit Json.Android, Methode kann nicht aufgelöst werden getMap()

googleMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.googleMap)).getMap();` 

Und hier ist voll Code

public class MainActivity extends FragmentActivity { 

    private GoogleMap googleMap; 
    private Double Latitude = 0.00; 
    private Double Longitude = 0.00; 
    private GoogleApiClient client2; 

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

     if (Build.VERSION.SDK_INT > 9) { 
      StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
      StrictMode.setThreadPolicy(policy); 
     } 

     ArrayList<HashMap<String, String>> location = null; 
     String url = "http://www.evil.cl/getLatLon.php"; 
     try { 

      JSONArray data = new JSONArray(getHttpGet(url)); 

      location = new ArrayList<HashMap<String, String>>(); 
      HashMap<String, String> map; 

      for (int i = 0; i < data.length(); i++) { 
       JSONObject c = data.getJSONObject(i); 

       map = new HashMap<String, String>(); 
       map.put("LocationID", c.getString("LocationID")); 
       map.put("Latitude", c.getString("Latitude")); 
       map.put("Longitude", c.getString("Longitude")); 
       map.put("LocationName", c.getString("LocationName")); 
       location.add(map); 

      } 

     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 

     googleMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.googleMap)).getMap(); 

     Latitude = Double.parseDouble(location.get(0).get("Latitude").toString()); 
     Longitude = Double.parseDouble(location.get(0).get("Longitude").toString()); 
     LatLng coordinate = new LatLng(Latitude, Longitude); 
     googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID); 
     googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(coordinate, 17)); 

     for (int i = 0; i < location.size(); i++) { 
      Latitude = Double.parseDouble(location.get(i).get("Latitude").toString()); 
      Longitude = Double.parseDouble(location.get(i).get("Longitude").toString()); 
      String name = location.get(i).get("LocationName").toString(); 
      MarkerOptions marker = new MarkerOptions().position(new LatLng(Latitude, Longitude)).title(name); 
      googleMap.addMarker(marker); 
     } 

     client2 = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build(); 
    } 

    public static String getHttpGet(String url) { 
     StringBuilder str = new StringBuilder(); 
     HttpClient client = new DefaultHttpClient(); 
     HttpGet httpGet = new HttpGet(url); 
     try { 
      HttpResponse response = client.execute(httpGet); 
      StatusLine statusLine = response.getStatusLine(); 
      int statusCode = statusLine.getStatusCode(); 
      if (statusCode == 200) { 
       HttpEntity entity = response.getEntity(); 
       InputStream content = entity.getContent(); 
       BufferedReader reader = new BufferedReader(new InputStreamReader(content)); 
       String line; 
       while ((line = reader.readLine()) != null) { 
        str.append(line); 
       } 
      } else { 
       Log.e("Log", "Failed to download result.."); 
      } 
     } catch (ClientProtocolException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return str.toString(); 
    } 

    @Override 
    public void onStart() { 
     super.onStart(); 
     client2.connect(); 
     Action viewAction = Action.newAction(
       Action.TYPE_VIEW, 
       "Main Page", 


       Uri.parse("http://host/path"), 

       Uri.parse("android-app://com.example.hector.prueba1/http/host/path") 
     ); 
     AppIndex.AppIndexApi.start(client2, viewAction); 
    } 

    @Override 
    public void onStop() { 
     super.onStop(); 
     Action viewAction = Action.newAction(
       Action.TYPE_VIEW, 
       "Main Page", 
       Uri.parse("http://host/path"), 
       Uri.parse("android-app://com.example.hector.prueba1/http/host/path") 
     ); 
     AppIndex.AppIndexApi.end(client2, viewAction); 
     client2.disconnect(); 
    } 
} 
+1

Mögliche Duplikate von [Kann Methode nicht beheben getMap()] (http://stackoverflow.com/questions/38232747/cannot-resolve-method-getmap) –

Antwort

6

getMapgetMapAsync unten Art und Weise Gebrauch ist veraltet ..

so diese googleMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.googleMap)).getMapAsync();

UpDate auf diesen zu googleMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.googleMap)).getMap(); ändern:

Verwenden dieser Weise

package your.app.name; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 

import com.google.android.gms.maps.GoogleMap; 
import com.google.android.gms.maps.MapFragment; 
import com.google.android.gms.maps.OnMapReadyCallback; 
import com.google.android.gms.maps.model.LatLng; 
import com.google.android.gms.maps.model.MarkerOptions; 

public class MainActivity extends Activity implements OnMapReadyCallback { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     MapFragment mapFragment = (MapFragment) getFragmentManager() 
       .findFragmentById(R.id.map); 
     mapFragment.getMapAsync(this); 
    } 

    @Override 
    public void onMapReady(GoogleMap map) { 
     map.addMarker(new MarkerOptions() 
       .position(new LatLng(0, 0)) 
       .title("Marker")); 
    } 

    //onCreateOptionsMenu: no changes  
    //onOptionsItemSelected: no changes 
} 
+0

und wie kann ich diesen Fehler beheben? getmapasync (onmapreadycallback) in supportmapfragment kann nicht auf –

+0

@ HectorAndresPiñonesGonzalez meine Update-Antwort finden. – Ironman

+0

Meiner Meinung nach sollten Sie das inkorrekte map = ... asynchrone Teil komplett löschen und einfach den "update" Teil lassen, da dies der richtige Teil ist. –

1

ich ein Problem mit Last Json habe jetzt "getMap" es ist veraltet und Google sagte mir muss getMap() verwenden. Wie kann ich ein Problem beheben?

das Sie haben Code

 try { 
     JSONArray innerJsonArray = json_array.getJSONArray(0); 
     JSONObject json = innerJsonArray.getJSONObject(0); 
     MapFragment mapFrag = (MapFragment) getFragmentManager().findFragmentById(R.id.map); 
     GeoJsonLayer layer = new GeoJsonLayer(mapFrag.getMap() , json); 
     layer.addLayerToMap(); 

    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 

vollständige Code:

public class MainActivity extends AppCompatActivity 
     implements NavigationView.OnNavigationItemSelectedListener, OnMapReadyCallback { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
       this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); 
     drawer.setDrawerListener(toggle); 
     toggle.syncState(); 

     NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
     navigationView.setNavigationItemSelectedListener(this); 

     SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() 
       .findFragmentById(R.id.map); 
     mapFragment.getMapAsync(this); 
    } 

    @Override 
    public void onBackPressed() { 
     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     if (drawer.isDrawerOpen(GravityCompat.START)) { 
      drawer.closeDrawer(GravityCompat.START); 
     } else { 
      super.onBackPressed(); 
     } 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 

    @SuppressWarnings("StatementWithEmptyBody") 
    @Override 
    public boolean onNavigationItemSelected(MenuItem item) { 
     // Handle navigation view item clicks here. 
     int id = item.getItemId(); 

     if (id == R.id.nav_camera) { 
      // Handle the camera action 
     } else if (id == R.id.nav_gallery) { 

     } else if (id == R.id.nav_slideshow) { 

     } else if (id == R.id.nav_manage) { 

     } else if (id == R.id.nav_share) { 

     } else if (id == R.id.nav_send) { 

     } 

     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     drawer.closeDrawer(GravityCompat.START); 
     return true; 
    } 


    @Override 
    public void onMapReady(GoogleMap googleMap) { 
     googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL); 
     //JSONArray json = new JSONObject(); 
     StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
     StrictMode.setThreadPolicy(policy); 

     String url = "https://www.oxidocs.com/ind/modelo/test.php"; 

     JSONArray user = null; 

     // Creating new JSON Parser 
     JSONParser jParser = new JSONParser(); 

     // Getting JSON from URL 
     JSONArray json_array = jParser.getJSONFromUrl(url); 


     try { 
      JSONArray innerJsonArray = json_array.getJSONArray(0); 
      JSONObject json = innerJsonArray.getJSONObject(0); 
      MapFragment mapFrag = (MapFragment) getFragmentManager().findFragmentById(R.id.map); 
      GeoJsonLayer layer = new GeoJsonLayer(mapFrag.getMap() , json); 
      layer.addLayerToMap(); 

     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    } 

} 
13

getMap() Methode abgeschrieben wurde, aber jetzt nach dem Play-Dienste 9.2 Update wurde es entfernt worden ist, so besser nutzen getMapAsync(). Sie können getMap() immer noch verwenden, wenn Sie nicht bereit sind, die Play-Services für Ihre App auf 9.2 zu aktualisieren.

verwenden getMapAsync(), die OnMapReadyCallback Schnittstelle auf Ihrer Aktivität oder ein Fragment implementieren:

public class Fragment_Map extends android.support.v4.app.Fragment 
     implements OnMapReadyCallback { } 

Dann, während die Karte zu initialisieren, verwendet getMapAsync() anstelle von getMap():

private void initializeMap() { 
    if (mMap == null) { 
    SupportMapFragment mapFrag = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.fragment_map); 
    mapFrag.getMapAsync(this); 
    } 
} 

@Override 
public void onMapReady(GoogleMap googleMap) { 
    mMap = googleMap; 
    setUpMap(); 
} 
0
public class MapPane extends FragmentActivity implements OnMapReadyCallback { 

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

    SupportMapFragment mapFragment = ((SupportMapFragment) getChildFragmentManager() 
      .findFragmentById(R.id.safety_map)); 
    mapFragment.getMapAsync(this); 
} 

@Override 
public void onMapReady(GoogleMap map) { 
//DO WHATEVER YOU WANT WITH GOOGLEMAP 
map.setMapType(GoogleMap.MAP_TYPE_HYBRID); 
     map.setMyLocationEnabled(true); 
     map.setTrafficEnabled(true); 
     map.setIndoorEnabled(true); 
     map.setBuildingsEnabled(true); 
     map.getUiSettings().setZoomControlsEnabled(true); 
    } 
} 

wird es perfekt funktionieren. Vielen Dank.