在从我的数据库中检索位置后,如何在地图上绘制标记?

时间:2016-12-22 09:57:33

标签: android google-maps firebase firebase-realtime-database

我正在使用谷歌地图api根据我从Firebase数据库检索的位置在地图上绘制一些标记。当我从另一个活动中的数据库中检索数据并按意图传递它时,这种方法很好,但是当我在此活动中检索数据时,它会绘制一个空白地图。 我的数据库:

report
 -KZPjqQOP086w1t6dOUY
 -KZZnf5c4QdNnLHMgfrG
 -KZ_90sfB2QTLtmcSvHW
 -KZ_9SnWuu_wDBStHAD6
 -KZ_9VGt5UKw9W7Hzdhp
      currentstatus: "still_there"
      description: "new"
      img: "iVBORw0KGgoAAAANSUhEUgAAAMMAAAEECAIAAAAahxdFAAA..."
      latitude: "37.3400953"
      longitude: "-121.8955277"
      severity: "Minor"
      size: "Extra Large"
      street: "300-364 Coleman Avenue"
      timeNdate: "Wed Dec 21 22:13:28 PST 2016"

我尝试调试它,看起来它在检索数据之前绘制地图。我怎样才能纠正这个错误?

public class MapsActivity extends AppCompatActivity implements OnMapReadyCallback {

    SharedPreferences sharedPreferences;
    public String latReport;
    public String longiReport;
    public String streetReport;
    public String repClicked;

    private GoogleMap Mmap;

    String SLat;
    String SLong;
    String gmail;
    String who;
    String Data;
    HashMap<Marker, String> Imagemap = new HashMap<>();
    // ArrayList<Report> reportArrayList;
    ArrayList<String> Lat;
    ArrayList<String> Lng;
    ArrayList<String> Street = new ArrayList<>();
    ArrayList<String> emailid = new ArrayList<>();
    ArrayList<String> description = new ArrayList<>();
    ArrayList<String> size = new ArrayList<>();
    ArrayList<String> severity = new ArrayList<>();
    ArrayList<String> img = new ArrayList<>();
    //ArrayList<String> Street = new ArrayList<>();
    Query queryRef;
    int i;
    DatabaseReference mRef;
    DatabaseReference dRef;

    ArrayList<Report> reportArrayList;

    ArrayAdapter<Report> arrayAdapter;

    Report value;

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

        MapFragment mapFragment = (MapFragment) getFragmentManager()
                .findFragmentById(map);
        mapFragment.getMapAsync(this);
    }

    @Override
    public void onMapReady(GoogleMap map) {

        Intent intent = getIntent();
        who = intent.getStringExtra("Off");
        String markerimage;
        Lat = new ArrayList<>();
        dRef = FirebaseDatabase.getInstance().getReference();
        reportArrayList = new ArrayList<>();

        mRef = dRef.child("report");
        Query qRef;
        qRef = mRef.orderByChild("emailId");


        qRef.addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String s) {


                value = dataSnapshot.getValue(Report.class);

                Log.i(TAG, "onChildAdded: "+value.getEmailId());
                Log.i(TAG, "Locaton: "+value.getLatitude());
                Log.i(TAG, "Locaton: "+value.getLongitude());
                reportArrayList.add(value);
                Lat.add(value.getLatitude());
                Lng.add(value.getLatitude());
              }

            @Override
            public void onChildChanged(DataSnapshot dataSnapshot, String s) {

            }

            @Override
            public void onChildRemoved(DataSnapshot dataSnapshot) {

            }

            @Override
            public void onChildMoved(DataSnapshot dataSnapshot, String s) {

            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

        for (i = 0; i < Lat.size(); i++) {
            Log.i(TAG, "onChildAdded: "+Lat.get(i));
            latReport = reportArrayList.get(i).getLatitude();
            longiReport = reportArrayList.get(i).getLongitude();
            streetReport = reportArrayList.get(i).getStreet();



            double number = Double.parseDouble(latReport);
            double number2 = Double.parseDouble(longiReport);

            Marker marker = map.addMarker(new MarkerOptions()
                    .position(new LatLng(number, number2))
                    .title(streetReport));
            map.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(number, number2), 15));
            Mmap = map;
            String cimage = img.get(i);
            Imagemap.put(marker,cimage);
        }
        map.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
            @Override
            public boolean onMarkerClick(Marker marker) {
                String markerimage = Imagemap.get(marker);
                Intent intentnew = new Intent(getApplicationContext(), OfficialDetail.class);
                for (int iter = 0; iter < Lat.size(); iter++) {
                   if (markerimage.equals(img.get(iter)))
                    {
                        Data = Street.get(iter);
                        intentnew.putExtra("street_of", Data);
                        Data = Lat.get(iter);
                        intentnew.putExtra("lat_of", Data);
                        Data = Lng.get(iter);
                        intentnew.putExtra("long_of", Data);
                        Data = description.get(iter);
                        intentnew.putExtra("lat_of", Data);
                        Data = size.get(iter);
                        intentnew.putExtra("size_of", Data);
                        Data = severity.get(iter);
                        intentnew.putExtra("severity_of", Data);
                        Data = img.get(iter);
                        intentnew.putExtra("img_of", Data);
                        if(who=="User")
                        intentnew.putExtra("Off","User");
                        else
                        intentnew.putExtra("Off","Off");
                        break;
                    }
                }
                startActivity(intentnew);
                return false;
            }
        });
    }
}

编辑:我发布了代码,我只是检查代码是否被检索。这是最新的代码。我从数据库中检索后填充了Lat Array列表 我将不胜感激任何帮助。

0 个答案:

没有答案