java - 当我在 Android Studio 的菜单中说添加地点时,它有时会打开 map ,有时应用程序会在不打开的情况下关闭

标签 java android-studio exception bluestacks

当我在 Android Studio 的菜单中说“添加地点”时,它有时会打开 map ,有时应用程序会在未打开的情况下关闭。当我说添加地点时,当应用程序在没有打开 map 的情况下关闭时,我得到了致命异常:主要错误。

Logcat 错误:

22020-10-04 09:50:34.691 12343-12343/com.nuresrasoylu.myfavoriteplaces E/AndroidRuntime: in writeCrashedAppName, pkgName :com.nuresrasoylu.myfavoriteplaces
2020-10-04 09:50:34.693 12343-12343/com.nuresrasoylu.myfavoriteplaces E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.nuresrasoylu.myfavoriteplaces, PID: 12343
    java.lang.AbstractMethodError: abstract method "void android.location.LocationListener.onStatusChanged(java.lang.String, int, android.os.Bundle)"
        at android.location.LocationManager$ListenerTransport._handleMessage(LocationManager.java:304)
        at android.location.LocationManager$ListenerTransport.-wrap0(LocationManager.java)
        at android.location.LocationManager$ListenerTransport$1.handleMessage(LocationManager.java:242)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6138)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:893)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:783)

ManActivity.java

package com.nuresrasoylu.myfavoriteplaces;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;

public class MainActivity extends AppCompatActivity {


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        MenuInflater menuInflater = getMenuInflater();
        menuInflater.inflate(R.menu.add_place,menu);

        return super.onCreateOptionsMenu(menu);

    }

    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {

        if (item.getItemId() == R.id.add_place) {
            Intent intent = new Intent(MainActivity.this,MapsActivity.class);
            intent.putExtra("info","new");
            startActivity(intent);
        }

        return super.onOptionsItemSelected(item);
    }

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


}

MapsActivity.java

package com.nuresrasoylu.myfavoriteplaces;

import androidx.annotation.NonNull;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.FragmentActivity;

import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;

import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {

    private GoogleMap mMap;
    LocationManager locationManager;
    LocationListener locationListener;

    @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);
        mapFragment.getMapAsync(this);
    }


    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;

        locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
        locationListener = new LocationListener() {
            @Override
            public void onLocationChanged(@NonNull Location location) {
                LatLng userLocation = new LatLng(location.getLatitude(),location.getLongitude());
                mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(userLocation,15));
            }
        };

        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,0,0,locationListener);

            Location lastLocation = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
            if (lastLocation != null) {
                LatLng lastUserLocation = new LatLng(lastLocation.getLatitude(),lastLocation.getLongitude());
                mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(lastUserLocation,15));
            }
        }

    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);

        if (grantResults.length > 0 ) {
            if (requestCode == 1) {
                if (ContextCompat.checkSelfPermission(this,Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED ) {
                    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,0,0,locationListener);
                }
            }
        }

    }
}

add_place.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/add_place" android:title="Add Place"></item>
</menu>

最佳答案

包括以下代码:

public void onLocationChanged(@NonNull Location location){} :
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}

关于java - 当我在 Android Studio 的菜单中说添加地点时,它有时会打开 map ,有时应用程序会在不打开的情况下关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64191944/

相关文章:

c# - System.Web.Services.Protocols.SoapException : Server did not recognize the value of HTTP Header SOAPAction:

c++ - 非构造函数上的函数 try block 有什么缺点吗?

java - 如何在 Spring 中将 JdbcTemplate 转换为 Flux?

Android Studio 将多个项目导入到一个项目中

android - 安装Android SDK平台工具23 rc3自动卸载Android SDK平台工具22

android - 无法从既没有启动选项 "Default"也没有 "Specific" Activity 的 Android Studio 启动应用程序

exception - 我应该返回 null 还是抛出异常?

java - 类路径问题,head first servlets book

java - 在 Clojure 中制作缩略图

java - 是否可以从 Base64 字符串创建 pdf 文件?