【问题标题】:Problem in connecting classes to the main activity将课程连接到主要活动的问题
【发布时间】: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


【解决方案1】:

setGoal 必须是static。 请多学习Java/OOP

【讨论】:

  • 非常感谢您对问题的建议和纠正。我已经在项目中回顾了这一部分,我能够更好地连接类、方法并使代码更具可读性
猜你喜欢
  • 1970-01-01
  • 2019-07-15
  • 1970-01-01
  • 1970-01-01
  • 2018-01-05
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
  • 2012-11-12
相关资源
最近更新 更多