【发布时间】:2022-01-18 09:45:21
【问题描述】:
我在项目中创建类时遇到问题。 该应用程序最初由三个类组成:LoginActivity、Firebase、MapsActivity(主)。
然而,必须将 MapsActivity 简化为几个类,以便更好地管理任何功能,例如,我试图创建从外部类调用方法以将其插入到主类中。有问题的类从数据库中调用一些值、一些字符串,然后必须根据我将定义的标准来建立这些值。问题是即使只是调用空的类和方法,应用程序也没有绕过登录,没有打开MapsActivity,也没有创建游戏地图。 谢谢
地图活动
private GoogleMap mMap;
LocationManager locationManager;
LocationListener locationListener;
Location lastKnownLocation;
LatLng userLocation;
private Sensor stepSensor;
private double MagnitudePrevious = 0;
private SensorManager sensorManager;
private static final String LOG_TAG = "STATS";
private FirebaseAuth mAuth;
public DatabaseReference mDatabase;
public int passi;
private Goals goals;
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == 1) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
}
}
}
}
@RequiresApi(api = Build.VERSION_CODES.Q)
@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);
mDatabase = FirebaseDatabase.getInstance("https://gamemaps-a3336-default-rtdb.firebaseio.com/").getReference("Distanza");
sensorManager = (SensorManager) this.getSystemService(SENSOR_SERVICE);
stepSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
if(ContextCompat.checkSelfPermission(this, Manifest.permission.ACTIVITY_RECOGNITION) == PackageManager.PERMISSION_DENIED){
requestPermissions(new String[]{Manifest.permission.ACTIVITY_RECOGNITION}, 0);
}
}
@SuppressLint("MissingPermission")
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
try {
boolean success = googleMap.setMapStyle(
MapStyleOptions.loadRawResourceStyle(
this, R.raw.maps));
if (!success) {
Log.e("MapsActivity","Style parsing failed.");
}
} catch (Resources.NotFoundException e) {
Log.e("MapsActivity", "Can't find style. Error: ", e);
}
locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
locationListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
mMap.clear();
LatLng userLocation = new LatLng(location.getLatitude(), location.getLongitude());
mMap.addMarker(new MarkerOptions().position(userLocation).title("Player").snippet(String.valueOf(passi)).icon(BitmapDescriptorFactory.fromResource(R.drawable.kp)));
mMap.moveCamera(CameraUpdateFactory.newLatLng(userLocation));
mMap.animateCamera(CameraUpdateFactory.zoomTo(18.0f),1000,null);
}
@Override
public void onStatusChanged(String s, int i, Bundle bundle) {
}
@Override
public void onProviderEnabled(String s) {
}
@Override
public void onProviderDisabled(String s) {
}
};
if (Build.VERSION.SDK_INT < 23) {
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
} else {
if (ContextCompat.checkSelfPermission(this,Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION},1);
} else {
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2000, 0, locationListener);
lastKnownLocation = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
mMap.clear();
userLocation = new LatLng(lastKnownLocation.getLatitude(), lastKnownLocation.getLongitude());
mMap.addMarker(new MarkerOptions().position(userLocation).title("Player").snippet(String.valueOf(passi)).icon(BitmapDescriptorFactory.fromResource(R.drawable.kp)));
mMap.moveCamera(CameraUpdateFactory.newLatLng(userLocation));
mMap.getUiSettings().setZoomControlsEnabled(true);
mMap.setMinZoomPreference(15);
}
}
}
@Override
public void onResume() {
super.onResume();
if(stepSensor != null) {
sensorManager.registerListener(this, stepSensor, SensorManager.SENSOR_DELAY_UI);
}
else {
Toast.makeText(this, "Sensor not available!", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onPause() {
super.onPause();
sensorManager.unregisterListener(this);
}
@Override
public void onSensorChanged(SensorEvent sensorEvent) {
if (sensorEvent != null) {
float x_acceleration = sensorEvent.values[0];
float y_acceleration = sensorEvent.values[1];
float z_acceleration = sensorEvent.values[2];
double Magnitude = Math.sqrt(x_acceleration*x_acceleration + y_acceleration*y_acceleration + z_acceleration*z_acceleration);
double MagnitudeDelta = Magnitude - MagnitudePrevious;
MagnitudePrevious = Magnitude;
if (MagnitudeDelta > 2){
passi++;
Log.i("PASSI","PASSI" + passi);
mDatabase.child("passi").setValue(passi);
mDatabase.child("metri").setValue(passi*0.7);
}
}
goals.SetGoals(mDatabase);
}
@Override
public void onAccuracyChanged(Sensor sensor, int i) {
}
}
目标
private String TEXT_GOALS;
public void SetGoals(DatabaseReference mDatabase){
mDatabase.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
TEXT_GOALS = dataSnapshot.child("Goals").child("G1").getValue(String.class);
Log.i("SS", "Passi: " + TEXT_GOALS);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
}```
【问题讨论】:
-
我真的很难理解你的问题,也许这只是我,但你能具体解释一下你在努力解决什么问题吗?
must be reduced into several classes in order to better manage any functionality这并不总是可能的,您不能只是将 firebase 侦听器移到另一个班级,除非他们像这样工作,我不认为将SetGoals作为您的一部分留下的危害活动 -
我也很难理解这个问题。您对实际代码有什么顾虑?
-
@AlexMamo 我无法调用我创建的类,例如目标类。当我启动应用程序时,它要求登录,打开带有地图和标记的地图活动。如果我介绍我创建的任何类,它不会绕过登录。
-
您是否尝试过使用auth listener?
标签: java android firebase-realtime-database firebase-authentication