- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试构建一个应用程序,它可以使用 Firebase 从实时数据库中检索经度和纬度。检索数据库中保存的位置后,我想添加一个显示空气质量指数(AQI)的标记。我尝试实现这个,但是 map 上没有标记,代码中也没有错误。 (它显示没有标记的 map )
这是我的数据库中的数据的样子:
my real time database using firebase
这是我的java代码:
public class MapsActivity extends FragmentActivity implements OnMapReadyCallback, LocationListener,GoogleMap.OnMarkerClickListener {
private final String TAG = "TAG";
private static final int REQUEST_ACCESS_FINE_LOCATION = 13112;
private static final int REQUEST_CHECK_SETTINGS = 13119;
private boolean mLocationPermissionGranted;
private SupportMapFragment mSupportMapFragment;
private GoogleMap mGoogleMap;
private FusedLocationProviderClient mFusedLocationProviderClient;
private LocationRequest mLocationRequest;
private LocationCallback mLocationCallback;
private boolean mFirstRender = true;
private GoogleMap mMap;
private Marker mMarker;
private ChildEventListener mChildEventListener;
private DatabaseReference mUsers;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
// Obtain the SupportMapFragment and get notified when the map is ready to be used.
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
if (mapFragment != null) {
mapFragment.getMapAsync(this);
} else {
Toast.makeText(getApplicationContext(), "mapFragment != null", Toast.LENGTH_LONG).show();
}
ChildEventListener mChildEventListener;
mUsers= FirebaseDatabase.getInstance().getReference("airvisual-e9c40");
mUsers.push().setValue(mMarker);
Window window = getWindow();
window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
mFusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this);
mSupportMapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mLocationCallback = new LocationCallback() {
@Override
public void onLocationResult(LocationResult locationResult) {
if (locationResult == null) {
return;
}
if (mMarker != null) {
mMarker.remove();
}
for (final Location location : locationResult.getLocations()) {
final LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());
mMarker = mGoogleMap.addMarker(new MarkerOptions().position(latLng)
.title("Lahore"));
// mMarker.setIcon(BitmapDescriptorFactory.fromBitmap(mMarkerBitmap));
CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngZoom(latLng, 17.0f);
if (mFirstRender) {
mGoogleMap.animateCamera(cameraUpdate);
mFirstRender = false;
}
}
}
@Override
public void onLocationAvailability(LocationAvailability locationAvailability) {
super.onLocationAvailability(locationAvailability);
}
};
getPermissions();
}
/**
* Manipulates the map once available.
* This callback is triggered when the map is ready to be used.
* This is where we can add markers or lines, add listeners or move the camera. In this case,
* we just add a marker near Sydney, Australia.
* If Google Play services is not installed on the device, the user will be prompted to install
* it inside the SupportMapFragment. This method will only be triggered once the user has
* installed Google Play services and returned to the app.
*/
@SuppressLint("MissingPermission")
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
final LocationSettingsStates states = LocationSettingsStates.fromIntent(data);
switch (requestCode) {
case REQUEST_CHECK_SETTINGS:
switch (resultCode) {
case Activity.RESULT_OK:
// All required changes were successfully made
if (mLocationPermissionGranted) {
mFusedLocationProviderClient.requestLocationUpdates(mLocationRequest,
mLocationCallback, null);
}
break;
case Activity.RESULT_CANCELED:
// The user was asked to change settings, but chose not to
new AlertDialog.Builder(MapsActivity.this)
.setTitle("Need Location")
.setMessage("Hi there! We can't show your current location without the" +
" location service, could you please enable it?")
.setPositiveButton("Yep", new DialogInterface.OnClickListener() {
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
public void onClick(DialogInterface dialogInterface, int i) {
checkLocationAvailability();
}
})
.setNegativeButton("No thanks", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(getApplicationContext(), ":(", Toast.LENGTH_LONG).show();
finish();
}
}).show();
break;
default:
break;
}
break;
}
}
@Override
public void onRequestPermissionsResult(
int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case REQUEST_ACCESS_FINE_LOCATION: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// permission was granted, yay! Do what you want . . .
mLocationPermissionGranted = true;
mSupportMapFragment.getMapAsync(this);
} else {
// permission denied, boo! :(
// Show an explanation to the user why this permission is required
displayDialog();
}
return;
}
}
}
@SuppressLint("MissingPermission")
@Override
public void onMapReady(GoogleMap googleMap) {
mGoogleMap = googleMap;
googleMap.setOnMarkerClickListener(this);
googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
messLocation();
}
private void messLocation() {
DatabaseReference currentDBcordinates = FirebaseDatabase.getInstance().getReference().child("airvisual-e9c40");
currentDBcordinates.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
//Create an array of markers
int size = (int) dataSnapshot.getChildrenCount();
Marker[] allMarkers = new Marker[size];
mMap.clear(); //Assuming you're using mMap
for(DataSnapshot s : dataSnapshot.getChildren()) {
//Specify your model class here
AQIModel cordinatesModel = new AQIModel();
//lets create a loop
for(int i=0;i<=size;i++) {
try {
Toast.makeText(getApplicationContext(), i, Toast.LENGTH_LONG).show();
//assuming you've set your getters and setters in the Model class
cordinatesModel.setLatitude(s.getValue(AQIModel.class).getLatitude());
cordinatesModel.setLongitude(s.getValue(AQIModel.class).getLongitude());
cordinatesModel.setAqi(s.getValue(AQIModel.class).getAqi());
//lets retrieve the coordinates and other information
Double latitude1 = cordinatesModel.getLatitude();
Double longitude1 = cordinatesModel.getLongitude();
String brandName=String.valueOf(cordinatesModel.getAqi());
//convert the coordinates to LatLng
LatLng latLng = new LatLng(latitude1, longitude1);
mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
//Now lets add updated markers
//lets add updated marker
allMarkers[i] = mMap.addMarker(new MarkerOptions()
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)).position(latLng).title(brandName));
}catch (Exception ex){}
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
private void checkLocationAvailability() {
LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder();
builder.addLocationRequest(mLocationRequest);
SettingsClient settingsClient = LocationServices.getSettingsClient(this);
Task<LocationSettingsResponse> task = settingsClient.checkLocationSettings(builder.build());
task.addOnCompleteListener(new OnCompleteListener<LocationSettingsResponse>() {
@SuppressLint("MissingPermission")
@Override
public void onComplete(@NonNull Task<LocationSettingsResponse> task) {
try {
LocationSettingsResponse response = task.getResult(ApiException.class);
// All location settings are satisfied.
if (mLocationPermissionGranted) {
mFusedLocationProviderClient.requestLocationUpdates(mLocationRequest,
mLocationCallback, null);
}
} catch (ApiException exception) {
switch (exception.getStatusCode()) {
case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
// Location settings are not satisfied. But could be fixed by showing the
// user a dialog.
try {
// Cast to a resolvable exception.
ResolvableApiException resolvable = (ResolvableApiException) exception;
// Show the dialog by calling startResolutionForResult(),
// and check the result in onActivityResult().
resolvable.startResolutionForResult(
MapsActivity.this,
REQUEST_CHECK_SETTINGS);
} catch (IntentSender.SendIntentException e) {
// Ignore the error.
} catch (ClassCastException e) {
// Ignore, should be an impossible error.
}
break;
case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
// Location settings are not satisfied. However, we have no way to fix the
// settings so we won't show the dialog.
break;
}
}
}
});
}
private void getPermissions() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (ContextCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_FINE_LOCATION)
!= PackageManager.PERMISSION_GRANTED) {
// Permission is not granted
if (ActivityCompat.shouldShowRequestPermissionRationale(this,
Manifest.permission.ACCESS_FINE_LOCATION)) {
// Show an explanation to the user why this permission is required
displayDialog();
} else {
// No explanation needed; request the permission
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
REQUEST_ACCESS_FINE_LOCATION);
}
} else {
// Permission has already been granted
mLocationPermissionGranted = true;
mSupportMapFragment.getMapAsync(this);
}
} else {
// Android SDK Version is below Marshmallow.
// You don't need runtime permission, Do what you want . . .
mLocationPermissionGranted = true;
mSupportMapFragment.getMapAsync(this);
}
}
private void displayDialog() {
new AlertDialog.Builder(MapsActivity.this)
.setTitle("Location Permission")
.setMessage("Hi there! We can't show your current location without the" +
" location permission, could you please grant it?")
.setPositiveButton("Yep", new DialogInterface.OnClickListener() {
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
public void onClick(DialogInterface dialogInterface, int i) {
requestPermissions(new String[]{
Manifest.permission.ACCESS_FINE_LOCATION},
REQUEST_ACCESS_FINE_LOCATION);
}
})
.setNegativeButton("No thanks", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(getApplicationContext(), ":(", Toast.LENGTH_LONG).show();
finish();
}
}).show();
}
@Override
public void onLocationChanged(Location location) {
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onProviderDisabled(String provider) {
}
@Override
public boolean onMarkerClick(Marker marker) {
return false;
}
}
我正在寻找这样的东西:
最佳答案
将以下代码放入 OnMapReady
方法中。
ChildEventListener mChildEventListener;
mUsers= FirebaseDatabase.getInstance().getReference("airvisual-e9c40");
mUsers.push().setValue(mMarker);
Window window = getWindow();
window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
mFusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this);
mSupportMapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mLocationCallback = new LocationCallback() {
@Override
public void onLocationResult(LocationResult locationResult) {
if (locationResult == null) {
return;
}
if (mMarker != null) {
mMarker.remove();
}
for (final Location location : locationResult.getLocations()) {
final LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());
mMarker = mGoogleMap.addMarker(new MarkerOptions().position(latLng)
.title("Lahore"));
// mMarker.setIcon(BitmapDescriptorFactory.fromBitmap(mMarkerBitmap));
CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngZoom(latLng, 17.0f);
if (mFirstRender) {
mGoogleMap.animateCamera(cameraUpdate);
mFirstRender = false;
}
}
}
@Override
public void onLocationAvailability(LocationAvailability locationAvailability) {
super.onLocationAvailability(locationAvailability);
}
};
getPermissions();
将所有逻辑写入onMapReady方法中。
关于java - 添加标记到 Google map - Android (JAVA),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55884990/
我正在编写一个具有以下签名的 Java 方法。 void Logger(Method method, Object[] args); 如果一个方法(例如 ABC() )调用此方法 Logger,它应该
我是 Java 新手。 我的问题是我的 Java 程序找不到我试图用作的图像文件一个 JButton。 (目前这段代码什么也没做,因为我只是得到了想要的外观第一的)。这是我的主课 代码: packag
好的,今天我在接受采访,我已经编写 Java 代码多年了。采访中说“Java 垃圾收集是一个棘手的问题,我有几个 friend 一直在努力弄清楚。你在这方面做得怎么样?”。她是想骗我吗?还是我的一生都
我的 friend 给了我一个谜语让我解开。它是这样的: There are 100 people. Each one of them, in his turn, does the following
如果我将使用 Java 5 代码的应用程序编译成字节码,生成的 .class 文件是否能够在 Java 1.4 下运行? 如果后者可以工作并且我正在尝试在我的 Java 1.4 应用程序中使用 Jav
有关于why Java doesn't support unsigned types的问题以及一些关于处理无符号类型的问题。我做了一些搜索,似乎 Scala 也不支持无符号数据类型。限制是Java和S
我只是想知道在一个 java 版本中生成的字节码是否可以在其他 java 版本上运行 最佳答案 通常,字节码无需修改即可在 较新 版本的 Java 上运行。它不会在旧版本上运行,除非您使用特殊参数 (
我有一个关于在命令提示符下执行 java 程序的基本问题。 在某些机器上我们需要指定 -cp 。 (类路径)同时执行java程序 (test为java文件名与.class文件存在于同一目录下) jav
我已经阅读 StackOverflow 有一段时间了,现在我才鼓起勇气提出问题。我今年 20 岁,目前在我的家乡(罗马尼亚克卢日-纳波卡)就读 IT 大学。足以介绍:D。 基本上,我有一家提供簿记应用
我有 public JSONObject parseXML(String xml) { JSONObject jsonObject = XML.toJSONObject(xml); r
我已经在 Java 中实现了带有动态类型的简单解释语言。不幸的是我遇到了以下问题。测试时如下代码: def main() { def ks = Map[[1, 2]].keySet()
一直提示输入 1 到 10 的数字 - 结果应将 st、rd、th 和 nd 添加到数字中。编写一个程序,提示用户输入 1 到 10 之间的任意整数,然后以序数形式显示该整数并附加后缀。 public
我有这个 DownloadFile.java 并按预期下载该文件: import java.io.*; import java.net.URL; public class DownloadFile {
我想在 GUI 上添加延迟。我放置了 2 个 for 循环,然后重新绘制了一个标签,但这 2 个 for 循环一个接一个地执行,并且标签被重新绘制到最后一个。 我能做什么? for(int i=0;
我正在对对象 Student 的列表项进行一些测试,但是我更喜欢在 java 类对象中创建硬编码列表,然后从那里提取数据,而不是连接到数据库并在结果集中选择记录。然而,自从我这样做以来已经很长时间了,
我知道对象创建分为三个部分: 声明 实例化 初始化 classA{} classB extends classA{} classA obj = new classB(1,1); 实例化 它必须使用
我有兴趣使用 GPRS 构建车辆跟踪系统。但是,我有一些问题要问以前做过此操作的人: GPRS 是最好的技术吗?人们意识到任何问题吗? 我计划使用 Java/Java EE - 有更好的技术吗? 如果
我可以通过递归方法反转数组,例如:数组={1,2,3,4,5} 数组结果={5,4,3,2,1}但我的结果是相同的数组,我不知道为什么,请帮助我。 public class Recursion { p
有这样的标准方式吗? 包括 Java源代码-测试代码- Ant 或 Maven联合单元持续集成(可能是巡航控制)ClearCase 版本控制工具部署到应用服务器 最后我希望有一个自动构建和集成环境。
我什至不知道这是否可能,我非常怀疑它是否可能,但如果可以,您能告诉我怎么做吗?我只是想知道如何从打印机打印一些文本。 有什么想法吗? 最佳答案 这里有更简单的事情。 import javax.swin
我是一名优秀的程序员,十分优秀!