Ссылка на пустой объект в com.google. android .gms.maps.GoogleMap.getProjection () ' - PullRequest
0 голосов
/ 12 февраля 2020

Я новичок, поэтому прошу прощения за этот любительский вопрос.

Я пытаюсь нарисовать многоугольник на карте (и приведенный ниже код удален из Интернета). Я получаю следующую ошибку:

2020-02-12 21:11:40.026 26490-26490/com.example.jdapp E/MessageQueue-JNI: java.lang.NullPointerException: Attempt to invoke virtual method 'com.google.android.gms.maps.Projection com.google.android.gms.maps.GoogleMap.getProjection()' on a null object reference

Мой код приведен ниже, я думаю, что неправильно объявляю объект mMap. Кажется, в этой строке появляется ошибка?

projection = mMap.getProjection();

, а в этой строке

LatLng latLng = mMap.getProjection().fromScreenLocation(x_y_points);

Код ...

public class Root_Map extends AppCompatActivity {

    private FrameLayout frmMap;
    private Button btnDrawState;
    private Boolean bolIsMapMoveable;
    private GoogleMap mMap;
    Projection projection;
    public double latitude;
    public double longitude;
    public Polygon polygon;
    List<LatLng> arrCoords = new ArrayList<LatLng>();


    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_root__map);

        frmMap = findViewById(R.id.fram_map);
        btnDrawState = findViewById(R.id.btn_draw_State);


        btnDrawState.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                bolIsMapMoveable = !bolIsMapMoveable;
            }
        });


        frmMap.setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {

                float x = event.getX();
                float y = event.getY();

                int x_co = Math.round(x);
                int y_co = Math.round(y);


                projection = mMap.getProjection();
                Point x_y_points = new Point(x_co, y_co);

                LatLng latLng = mMap.getProjection().fromScreenLocation(x_y_points);
                latitude = latLng.latitude;

                longitude = latLng.longitude;

                int eventaction = event.getAction();
                switch (eventaction) {
                    case MotionEvent.ACTION_DOWN:
                        // finger touches the screen
                        arrCoords.add(new LatLng(latitude, longitude));

                    case MotionEvent.ACTION_MOVE:
                        // finger moves on the screen
                        arrCoords.add(new LatLng(latitude, longitude));

                    case MotionEvent.ACTION_UP:
                        // finger leaves the screen
                        Draw_Map();
                        break;
                }

                return bolIsMapMoveable;

            }
        });


    }

    public void Draw_Map() {
        PolygonOptions rectOptions = new PolygonOptions();
        rectOptions.addAll(arrCoords);
        rectOptions.strokeColor(Color.BLUE);
        rectOptions.strokeWidth(7);
        rectOptions.fillColor(Color.CYAN);
        polygon = mMap.addPolygon(rectOptions);
    }

}
...