LocationListener导致应用停止运行

问题描述 投票:0回答:1

我正在尝试实现以下代码,以定期获取用户的位置并在屏幕上显示有关其位置的一些信息。当我使用getLastKnownLocation()时,它可以按预期工作,但仅在启动应用程序时更新了值。我现在用getLastKnownLocation及其函数替换了调用LocationListener的单行代码。构建时没有错误,但该应用程序停止运行并在启动时崩溃。

package com.example.locate;

import androidx.appcompat.app.AppCompatActivity;
import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;
import android.location.Address;
import android.location.Criteria;
import android.location.Geocoder;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.widget.TextView;
import java.io.IOException;
import java.util.List;
import java.util.Locale;

public abstract class MainActivity extends AppCompatActivity implements LocationListener {
    TextView latitudeTV;
    TextView longitudeTV;
    double latitude = 0.0;
    double longitude = 0.0;

    LocationManager locationManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        latitudeTV = (TextView)findViewById(R.id.latitude);
        longitudeTV = (TextView)findViewById(R.id.longitude);

        locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);

        if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            return;
        }

        locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 2000, 0, locationListener);

        //Location location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);

        if (location != null) {
            onLocationChanged(location);
        }
        else {
            longitudeTV.setText("Longitude:\nPermission Denied");
            latitudeTV.setText("Latitude:\nPermission Denied");
        }
    }

    LocationListener locationListener = new LocationListener() {
        @Override
        public void onLocationChanged(Location location) {
            longitude = location.getLongitude();
            latitude = location.getLatitude();

            longitudeTV.setText("Longitude: \n" + longitude);
            latitudeTV.setText("Latitude: \n" + latitude);
        }

        @Override
        public void onStatusChanged(String s, int i, Bundle bundle) {

        }

        @Override
        public void onProviderEnabled(String s) {

        }

        @Override
        public void onProviderDisabled(String s) {

        }
    };
}
java android location locationlistener
1个回答
0
投票

您应该添加日志猫。根据您的代码,您还必须删除或注释以下代码。

`if (location != null) {
        onLocationChanged(location);
    }
    else {
        longitudeTV.setText("Longitude:\nPermission Denied");
        latitudeTV.setText("Latitude:\nPermission Denied");
    }`
© www.soinside.com 2019 - 2024. All rights reserved.