Google Maps на Android Studio ошибка - PullRequest
0 голосов
/ 25 июня 2018

Эй, ребята, я пытаюсь создать карту на Android Studio, но я продолжаю получать сообщение об ошибке

это исходный код

private static final String TAG = "MapActivity";
private GoogleMap mMap;
private EditText searchMap;
private static final String FINE_LOCATION = android.Manifest.permission.ACCESS_FINE_LOCATION;
private static final String COURSE_LOCATION = android.Manifest.permission.ACCESS_COARSE_LOCATION;
private static final int LOCATION_PERMISSION_REQUEST_CODE = 1234;
private static final float DEFAULT_ZOOM = 15f;
private Boolean mLocationPermissionsGranted = false;
FusedLocationProviderClient mFusedLocationProviderClient;


@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);

    searchMap = findViewById(R.id.search_local);

    getLocationPermission();


}

@Override
public void onMapReady(GoogleMap googleMap) {

    Toast.makeText(this, "Map is Ready", Toast.LENGTH_SHORT).show();
    Log.d(TAG, "onMapReady: map is ready");

    mMap = googleMap;

    if (mLocationPermissionsGranted) {
            getDeviceLocation();

        if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION)
                != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this,
                android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            return;
        }
        mMap.setMyLocationEnabled(true);
        mMap.getUiSettings().setMyLocationButtonEnabled(false);

        init();

        mMap = googleMap;

        // Add a marker in Sydney and move the camera
        if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            return;
        }
        mMap.setMyLocationEnabled(true);
        mMap.getUiSettings().setCompassEnabled(true);
        mMap.getUiSettings().setAllGesturesEnabled(true);

    }

}


private void init(){
    Log.d(TAG, "init: initializing");

    searchMap.setOnEditorActionListener(new TextView.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView textView, int actionId, KeyEvent keyEvent) {
            if(actionId == EditorInfo.IME_ACTION_SEARCH
                    || actionId == EditorInfo.IME_ACTION_DONE
                    || keyEvent.getAction() == KeyEvent.ACTION_DOWN
                    || keyEvent.getAction() == KeyEvent.KEYCODE_ENTER){

                //execute our method for searching
                geoLocate();
            }

            return false;
        }
    });
}



private void getLocationPermission () {
    Log.d(TAG, "getLocationPermission: getting location permissions");
    String[] permissions = {android.Manifest.permission.ACCESS_FINE_LOCATION,
            android.Manifest.permission.ACCESS_COARSE_LOCATION};

    if (ContextCompat.checkSelfPermission(this.getApplicationContext(),
            FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
        if (ContextCompat.checkSelfPermission(this.getApplicationContext(),
                COURSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
            mLocationPermissionsGranted = true;
            initMap();
        } else {
            ActivityCompat.requestPermissions(this,
                    permissions,
                    LOCATION_PERMISSION_REQUEST_CODE);
        }
    } else {
        ActivityCompat.requestPermissions(this,
                permissions,
                LOCATION_PERMISSION_REQUEST_CODE);
    }
}

private void geoLocate(){
    Log.d(TAG, "geoLocate: geolocating");

    String searchString = searchMap.getText().toString();

    Geocoder geocoder = new Geocoder(MapsActivity.this);
    List<Address> list = new ArrayList<>();
    try{
        list = geocoder.getFromLocationName(searchString, 1);
    }catch (IOException e){
        Log.e(TAG, "geoLocate: IOException: " + e.getMessage() );
    }

    if(list.size() > 0){
        Address address = list.get(0);

        Log.d(TAG, "geoLocate: found a location: " + address.toString());
        //Toast.makeText(this, address.toString(), Toast.LENGTH_SHORT).show();

        moveCamera(new LatLng(address.getLatitude(), address.getLongitude()), DEFAULT_ZOOM,
                address.getAddressLine(0));

    }
}

private void getDeviceLocation(){
    Log.d(TAG, "getDeviceLocation: getting the devices current location");


    mFusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this);

    try{
        if(mLocationPermissionsGranted){

            final Task location = mFusedLocationProviderClient.getLastLocation();
            location.addOnCompleteListener(new OnCompleteListener() {
                @Override
                public void onComplete(@NonNull Task task) {
                    if(task.isSuccessful()){
                        Log.d(TAG, "onComplete: found location!");
                        Location currentLocation = (Location) task.getResult();

                        moveCamera(new LatLng(currentLocation.getLatitude(), currentLocation.getLongitude()),
                                DEFAULT_ZOOM,
                                "My Location");

                    }else{
                        Log.d(TAG, "onComplete: current location is null");
                        Toast.makeText(MapsActivity.this, "unable to get current location", Toast.LENGTH_SHORT).show();
                    }
                }
            });
        }
    }catch (SecurityException e){
        Log.e(TAG, "getDeviceLocation: SecurityException: " + e.getMessage() );
    }
}

private void moveCamera(LatLng latLng, float zoom,String title){
    Log.d(TAG, "moveCamera: moving the camera to: lat: " + latLng.latitude + ", lng: " + latLng.longitude );
    mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, zoom));

    if(!title.equals("My Location")){
        MarkerOptions options = new MarkerOptions()
                .position(latLng)
                .title(title);
        mMap.addMarker(options);
    }

    hideSoftKeyboard();
}

private void initMap(){
    Log.d(TAG, "initMap: initializing map");
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);

    mapFragment.getMapAsync(MapsActivity.this);
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    Log.d(TAG, "onRequestPermissionsResult: called.");
    mLocationPermissionsGranted = false;

    switch(requestCode){
        case LOCATION_PERMISSION_REQUEST_CODE:{
            if(grantResults.length > 0){
                for(int i = 0; i < grantResults.length; i++){
                    if(grantResults[i] != PackageManager.PERMISSION_GRANTED){
                        mLocationPermissionsGranted = false;
                        Log.d(TAG, "onRequestPermissionsResult: permission failed");
                        return;
                    }
                }
                Log.d(TAG, "onRequestPermissionsResult: permission granted");
                mLocationPermissionsGranted = true;
                //initialize our map
                initMap();
            }
        }
    }
}

private void hideSoftKeyboard(){
    this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
}

это ошибка, которую я получаю, пожалуйстапомогите мне проверить

E/UncaughtException: java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/android/gms/common/api/Api$zzf;
                     at com.google.android.gms.location.LocationServices.<clinit>(Unknown Source)
                     at app.ayodkay.com.ajudeme.MapsActivity.getDeviceLocation(MapsActivity.java:177)
                     at app.ayodkay.com.ajudeme.MapsActivity.onMapReady(MapsActivity.java:76)
                     at com.google.android.gms.maps.zzak.zza(Unknown Source)
                     at com.google.android.gms.maps.internal.zzaq.dispatchTransaction(Unknown Source)
                     at com.google.android.gms.internal.maps.zzb.onTransact(Unknown Source)
                     at android.os.Binder.transact(Binder.java:380)
                     at fr.b(:com.google.android.gms.dynamite_dynamitemodulesb@12685007@12.6.85 (020304-197041431):20)
                     at com.google.android.gms.maps.internal.bg.a(:com.google.android.gms.dynamite_dynamitemodulesb@12685007@12.6.85 (020304-197041431):5)
                     at com.google.maps.api.android.lib6.impl.be.run(:com.google.android.gms.dynamite_dynamitemodulesb@12685007@12.6.85 (020304-197041431):5)
                     at android.os.Handler.handleCallback(Handler.java:739)
                     at android.os.Handler.dispatchMessage(Handler.java:95)
                     at android.os.Looper.loop(Looper.java:135)
                     at android.app.ActivityThread.main(ActivityThread.java:5753)
                     at java.lang.reflect.Method.invoke(Native Method)
                     at java.lang.reflect.Method.invoke(Method.java:372)
                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1405)
                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200)
                  Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.android.gms.common.api.Api$zzf" on path: DexPathList[[zip file "/data/app/app.ayodkay.com.ajudeme-1/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
                     at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
                     at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
                     at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
                     at com.google.android.gms.location.LocationServices.<clinit>(Unknown Source) 
                     at app.ayodkay.com.ajudeme.MapsActivity.getDeviceLocation(MapsActivity.java:177) 
                     at app.ayodkay.com.ajudeme.MapsActivity.onMapReady(MapsActivity.java:76) 
                     at com.google.android.gms.maps.zzak.zza(Unknown Source) 
                     at com.google.android.gms.maps.internal.zzaq.dispatchTransaction(Unknown Source) 
                     at com.google.android.gms.internal.maps.zzb.onTransact(Unknown Source) 
                     at android.os.Binder.transact(Binder.java:380) 
                     at fr.b(:com.google.android.gms.dynamite_dynamitemodulesb@12685007@12.6.85 (020304-197041431):20) 
                     at com.google.android.gms.maps.internal.bg.a(:com.google.android.gms.dynamite_dynamitemodulesb@12685007@12.6.85 (020304-197041431):5) 
                     at com.google.maps.api.android.lib6.impl.be.run(:com.google.android.gms.dynamite_dynamitemodulesb@12685007@12.6.85 (020304-197041431):5) 
                     at android.os.Handler.handleCallback(Handler.java:739) 
                     at android.os.Handler.dispatchMessage(Handler.java:95) 
                     at android.os.Looper.loop(Looper.java:135) 
                     at android.app.ActivityThread.main(ActivityThread.java:5753) 
                     at java.lang.reflect.Method.invoke(Native Method) 
                     at java.lang.reflect.Method.invoke(Method.java:372) 
                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1405) 
                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200) 
                    Suppressed: java.lang.ClassNotFoundException: com.google.android.gms.common.api.Api$zzf
                     at java.lang.Class.classForName(Native Method)
                     at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
                     at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
                     at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
                            ... 19 more
                  Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available

модуль сборки gradle

apply plugin: 'com.android.application'


android {
    compileSdkVersion 27
    defaultConfig {
        applicationId "app.ayodkay.com.ajudeme"
        minSdkVersion 19
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"
        multiDexEnabled true
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    //noinspection GradleCompatible
    implementation 'com.android.support:appcompat-v7:27.1.1'
    implementation 'com.android.support:cardview-v7:27.1.1'
    implementation 'com.android.support:design:27.1.1'
    implementation 'com.android.support:support-v4:27.1.1'
    implementation 'com.android.support.constraint:constraint-layout:1.1.2'
    // Volley library
    implementation 'com.android.volley:volley:1.0.0'
    // Recyclerview Library
    implementation 'com.android.support:recyclerview-v7:27.1.1'

// Firebase
implementation 'com.firebaseui:firebase-ui-database:1.2.0'
implementation 'com.firebase:firebase-client-android:2.5.2'
implementation 'com.google.firebase:firebase-auth:16.0.2'
implementation 'com.google.firebase:firebase-storage:16.0.1'
implementation 'com.google.firebase:firebase-database:16.0.1'
implementation 'com.google.firebase:firebase-firestore:17.0.4'
implementation 'com.google.firebase:firebase-crash:16.0.1'
implementation 'com.google.firebase:firebase-messaging:17.1.0'
implementation 'com.google.firebase:firebase-core:16.0.1'
implementation 'com.google.android.gms:play-services-auth:15.0.1'
//facebook
implementation 'com.facebook.android:facebook-android-sdk:4.30.0'
implementation 'com.facebook.android:facebook-share:4.30.0'
implementation 'com.facebook.android:facebook-android-sdk:4.30.0'
//res
implementation 'com.squareup.picasso:picasso:2.5.2'
implementation 'de.hdodenhof:circleimageview:2.1.0'
implementation 'com.android.support:multidex:1.0.3'

implementation 'com.google.android.gms:play-services:12.0.1'

implementation 'com.google.android.gms:play-services-maps:15.0.1'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'}

} apply plugin: 'com.google.gms.google-services'

А также я пытаюсь найти местоположение пользователя для нового действия, пожалуйста, если у вас есть идея, как это сделатьчто, пожалуйста, также прокомментируйте ниже спасибо ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...