我有一个asyncTask CommunicationThread
,它创建了一些纬度和经度。我也有一个地图活动,我想在其中获取CommunicationThread
的结果,并根据这些结果更新标记。这是我的地图活动代码。
public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {
private GoogleMap mMap;
private Thread2ThreadInfo connectionInfo;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
connectionInfo = SubscriberActivity.getConnInfo();
}
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
Handler handler = new Handler(Looper.getMainLooper());
handler.post(new Runnable() {
Value currentPosition;
@Override
public void run() {
while(true) {
Log.e("start", "new thread");
CommunicationThread communicationThread = new CommunicationThread();
try {
currentPosition = communicationThread.execute(connectionInfo).get();
Log.e("start", currentPosition.toString());
LatLng templt = null;
double lat = currentPosition.getLatitude();
double lon = currentPosition.getLongtitude();
LatLng lt = new LatLng(lat, lon);
templt = lt;
MarkerOptions a = new MarkerOptions().position(lt).title(currentPosition.getBus().getBusLineId());
Marker m = mMap.addMarker(a);
mMap.moveCamera(CameraUpdateFactory.newLatLng(lt));
mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(templt, 13.0f));
} catch (ExecutionException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
});
}
}
CommunicationThread
正常工作,并且数据(位置)被发送到地图活动。我使用无限循环执行CommunicationThread
任务,并在有新职位时,将其提取。我还使用处理程序以避免主线程内的无限循环问题。当我运行它时,数据发送成功(根据循环内生成的日志),但是映射如下所示:
当我没有无限循环地运行它(仅针对一个位置)时,它会正常运行。 还有其他想法吗?
答案 0 :(得分:0)
您是否获得了Google Maps API的密钥? 如果不是,则必须获取密钥才能在应用程序中使用google地图
请点击此链接 Get an API Key
答案 1 :(得分:0)
1。缺少或不正确或已禁用的API密钥
似乎是最常见的。我建议遵循official documentation。如果完成所有步骤,问题仍然存在,并且您仍然不确定是否可能是原因,请克隆官方的android示例,找到MapWithMarker示例(android-samples / tutorials / MapWithMarker)并对其进行测试。如果您运行示例并正确显示了地图,请尝试将默认API KEY交换为您拥有的API KEY。
在这种情况下,请确保已在Google API控制台中启用了它。
2。缺少Android GMS版本元数据标记
您的AndroidManifest.xml
需要定义以下元数据属性:
<meta-data android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
有关更多详细信息和官方文档,请参见此处的答案。
3。缺少用户权限
在旧版Android SDK中,您必须明确设置某些用户权限才能正确使用Google Maps API,例如:
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
情况不再如此,但我建议您访问官方文档,以确保您符合这些版本要求。
4。 OpenGL ES版本2的要求
过去,似乎需要在AndroidManifest.xml
<uses-feature
android:glEsVersion="0x00020000"
android:required="true"/>