java - GoogleMap.addMarker 抛出空异常
问题描述
我试图为我的自定义谷歌地图应用程序创建一个搜索栏,但每次我尝试搜索位置时应用程序强制关闭。看起来我做的一切都是正确的,按顺序说话。事情是,当我试图搜索一个位置时,它只是强制关闭应用程序,回到主菜单。
XML 文件:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<fragment
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/google_map"
android:name="com.google.android.gms.maps.SupportMapFragment"/>
<SearchView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id = "@+id/sv_loc"
android:queryHint="Search for a place or location..."
android:iconifiedByDefault="false"
android:layout_margin="10dp"
android:elevation="5dp"
android:background="@drawable/bg_round" />
</RelativeLayout>
Java 文件:
package my.maptestapplication;
import android.location.Address;
import android.location.Geocoder;
import android.provider.Telephony;
import android.support.v4.app.FragmentActivity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.SearchView;
import com.google.android.gms.maps.CameraUpdate;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
import java.io.IOException;
import java.util.List;
public class MainActivity extends FragmentActivity implements OnMapReadyCallback {
GoogleMap GMap;
SupportMapFragment SMapFrag;
SearchView searchView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
searchView = findViewById(R.id.sv_loc);
SMapFrag = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.google_map);
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
String Loc = searchView.getQuery().toString();
List<Address> addressList = null;
if (Loc != null || !Loc.equals("")){
Geocoder geocoder = new Geocoder(MainActivity.this);
try {
addressList = geocoder.getFromLocationName(Loc, 1);
} catch (IOException e) {
e.printStackTrace();
}
Address address = addressList.get(0);
LatLng Lat_Lng = new LatLng(address.getLatitude(), address.getLongitude());
GMap.addMarker(new MarkerOptions().position(Lat_Lng).title(Loc));
GMap.animateCamera(CameraUpdateFactory.newLatLngZoom(Lat_Lng, 10));
}
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
return false;
}
});
SMapFrag.getMapAsync(this);
}
@Override
public void onMapReady(GoogleMap googleMap) {
}
}
日志猫:
https://drive.google.com/file/d/1uIzbJvkyefEby9Yo2vqiOQwByXl_G1uq/view?usp=sharing
我假设如果成功,会出现一个地图标记,它会突出显示我在搜索栏上输入的位置。会有人帮我解决这个问题吗?
解决方案
在您尝试将标记设置GMap
为空时。
这就是为什么您必须使用onMapReady
事件并设置GMap
变量的原因。
@Override
public void onMapReady(GoogleMap googleMap) {
GMap = googleMap;
}
您可以在此处阅读有关onMapReady
活动的信息
推荐阅读
- java - JDK中的`com.sun.org.slf4j.internal.Logger`和错误用法
- react-native - 反应本机文本输入键盘如何显示点而不是逗号?
- ios - 快速对电影数据库进行分页
- azure - Connect-AzAccount 没有提示
- r - Roxygen2 : S3 方法在泛型名称中带有点
- javascript - 如何使数据保存 ASP.Net
- python-3.x - 为什么 token.pos_ 不工作而其他 token.lemma_ 等工作?
- python - 将 CNN 分类器模型更改为 CNN 回归模型
- amazon-s3 - 将 AWS 粘合表列映射到目标 RDS 实例表列
- bash - 匹配来自两个不同 txt 文件的列号