Я новичок, поэтому прошу прощения за этот любительский вопрос.
Я пытаюсь нарисовать многоугольник на карте (и приведенный ниже код удален из Интернета). Я получаю следующую ошибку:
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);
}
}