2015-03-11 5 views
0

Я пытаюсь реализовать простое приложение и использовать фрагменты, которые я пытаюсь отметить пятнами на карте.маркеры карты Android не отображаются

Мой фрагмент имеет следующий код:

package pt.com.hugo_dias.hstapplication.customer.fragments; 

import android.os.Bundle; 
import android.support.annotation.Nullable; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.Toast; 

import com.google.android.gms.maps.CameraUpdateFactory; 
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.SupportMapFragment; 
import com.google.android.gms.maps.model.BitmapDescriptorFactory; 
import com.google.android.gms.maps.model.LatLng; 
import com.google.android.gms.maps.model.MarkerOptions; 

import java.util.List; 

import pt.com.hugo_dias.HSTApplication; 
import pt.com.hugo_dias.hstapplication.R; 
import pt.com.hugo_dias.hstapplication.customer.database.Customer; 
import pt.com.hugo_dias.hstapplication.customer.database.CustomerDatabaseHelper; 
import pt.com.hugo_dias.hstapplication.customer.exceptions.CustomerException; 

public class GoogleMapFragment extends SupportMapFragment implements OnMapReadyCallback{ 

    /** 
    * The fragment argument representing the item ID that this fragment 
    * represents. 
    */ 
    private CustomerDatabaseHelper customerHelper; 
    private GoogleMap mMap; 


    public GoogleMapFragment() { 
    } 

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

    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     super.onCreateView(inflater, container, savedInstanceState); 
     getActivity().invalidateOptionsMenu(); 
     View rootView = null; 
     long id = getActivity().getIntent().getLongExtra("ID", 0); 
     rootView = inflater.inflate(R.layout.fragment_map, container, false); 
     getMapAsync(this); 
     return rootView; 
    } 

    public CustomerDatabaseHelper getCustomerHelper() { 
     if (customerHelper == null) { 
      customerHelper = new CustomerDatabaseHelper(getActivity()); 
     } 
     return customerHelper; 
    } 

    public void setCustomerHelper(CustomerDatabaseHelper customerHelper) { 
     this.customerHelper = customerHelper; 
    } 

    @Override 
    public void onDestroyView() { 
     super.onDestroyView(); 
     mMap = null; 
    } 

    @Override 
    public void onMapReady(GoogleMap googleMap) { 
     mMap = googleMap; 
     long id = getActivity().getIntent().getLongExtra("ID", 0); 
     if (id == 0) { 
      Log.i(HSTApplication.TAG, "Customer id cannot be 0 "); 
      Toast.makeText(getActivity(), R.string.customerdoesntexists, 
        Toast.LENGTH_LONG).show(); 
      return; 
     } 

     Customer customer; 
     try { 
      customer = getCustomerHelper().getCustomer(id); 
     } catch (CustomerException e) { 
      Log.i(HSTApplication.TAG, "Customer does not exists - " + id); 
      Toast.makeText(getActivity(), R.string.customerdoesntexists, 
        Toast.LENGTH_LONG).show(); 
      return; 
     } 

     double latitude = customer.getLatitude(); 
     double longitude = customer.getLongitude(); 

     LatLng position = new LatLng(latitude, longitude); 

     googleMap.setMyLocationEnabled(true); 
     googleMap.addMarker(new MarkerOptions().position(
       position).title(customer.getName()).icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED))); 
     googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(position, 10)); 
     googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL); 

     try { 
      List<Customer> dependencies = getCustomerHelper().getDependencies(id); 
      for(Customer dependency : dependencies){ 
       position = new LatLng(dependency.getLatitude(), dependency.getLongitude()); 
       googleMap.addMarker(new MarkerOptions().position(
         position).title(dependency.getName()).icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE))); 
      } 
     } catch (CustomerException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

Я не понимаю, почему маркеры не показаны, но я вижу, что метод будет называться во время отладки.

+0

Сначала убедитесь, что вызывается код «addMarker». Кроме того, убедитесь, что у вас есть правильные длинные и лат значения – Snake

+0

Они правильные, как видно в отладке. –

+0

Итак, вы добавили lat/lng в google map (в браузере) и убедились, что можете их увидеть, правильно? Потому что однажды я думал, что использую правильные ценности, и они были вне моего региона. Другое предложение - переместить код с помощью «addMarker» после «setMapType» – Snake

ответ

0

В вашем коде создается впечатление, что вы извлекаете маркеры из базы данных при создании объекта CustomerDatabaseHelper. Но в конечном итоге код для этого файла отсутствует. Если вы просто хотите, чтобы отобразить маркер с длинным нажатием на вашем фрагменте Карты без сохранения их в базу данных и извлечения их делают простые вещи, просто скопируйте и вставьте этот код в MainActivity.java:

import com.google.android.gms.common.ConnectionResult; 
import com.google.android.gms.common.GooglePlayServicesUtil; 
import com.google.android.gms.maps.CameraUpdateFactory; 
import com.google.android.gms.maps.GoogleMap; 
import com.google.android.gms.maps.GoogleMap.OnMapLongClickListener; 
import com.google.android.gms.maps.MapFragment; 
//import com.google.android.gms.maps.SupportMapFragment; 
import com.google.android.gms.maps.GoogleMap.OnMapClickListener; 
import com.google.android.gms.maps.model.LatLng; 
import com.google.android.gms.maps.model.MarkerOptions; 

import android.app.Activity; 
import android.app.AlertDialog; 
import android.app.FragmentManager; 
import android.location.Location; 
import android.os.Bundle; 
//import android.support.v4.app.FragmentActivity; 
//import android.support.v4.app.FragmentManager; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.widget.TextView; 
import android.widget.Toast; 

public class MainActivity extends Activity 
implements OnMapClickListener, OnMapLongClickListener{ 

final int RQS_GooglePlayServices = 1; 
private GoogleMap myMap; 

Location myLocation; 
TextView tvLocInfo; 

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

    tvLocInfo = (TextView)findViewById(R.id.locinfo); 

    FragmentManager myFragmentManager = getFragmentManager(); 

MapFragment myMapFragment 
    = (MapFragment)myFragmentManager.findFragmentById(R.id.map); 
    myMap = myMapFragment.getMap(); 

    myMap.setMyLocationEnabled(true); 

    myMap.setMapType(GoogleMap.MAP_TYPE_HYBRID); 
    //myMap.setMapType(GoogleMap.MAP_TYPE_NORMAL); 
    //myMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE); 
    //myMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN); 

    myMap.setOnMapClickListener(this); 
    myMap.setOnMapLongClickListener(this); 

} 

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

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    case R.id.menu_legalnotices: 
     String LicenseInfo = GooglePlayServicesUtil.getOpenSourceSoftwareLicenseInfo(
     getApplicationContext()); 
     AlertDialog.Builder LicenseDialog = new AlertDialog.Builder(MainActivity.this); 
     LicenseDialog.setTitle("Legal Notices"); 
     LicenseDialog.setMessage(LicenseInfo); 
     LicenseDialog.show(); 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 

@Override 
protected void onResume() { 
    // TODO Auto-generated method stub 
    super.onResume(); 

    int resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(getApplicationContext()); 

    if (resultCode == ConnectionResult.SUCCESS){ 
    Toast.makeText(getApplicationContext(), 
    "isGooglePlayServicesAvailable SUCCESS", 
    Toast.LENGTH_LONG).show(); 
}else{ 
    GooglePlayServicesUtil.getErrorDialog(resultCode, this, RQS_GooglePlayServices); 
    } 

} 

@Override 
public void onMapClick(LatLng point) { 
    tvLocInfo.setText(point.toString()); 
    myMap.animateCamera(CameraUpdateFactory.newLatLng(point)); 
} 

@Override 
public void onMapLongClick(LatLng point) { 
    tvLocInfo.setText("New marker [email protected]" + point.toString()); 
    myMap.addMarker(new MarkerOptions().position(point).title(point.toString())); 
} 

} 

Надежда, что помогает !!

Смежные вопросы