【问题标题】:Android firebase integration with Google MapsAndroid Firebase 与 Google 地图的集成
【发布时间】:2016-03-31 00:21:13
【问题描述】:

我正在尝试将我的 firebase 数据库与 Google 地图集成,但我遇到了问题。这是我的代码:

package com.test.googlemap;

import android.Manifest;
import android.content.pm.PackageManager;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationManager;
import android.support.v4.app.FragmentActivity;
import android.os.Bundle;

import com.firebase.client.DataSnapshot;
import com.firebase.client.Firebase;
import com.firebase.client.FirebaseError;
import com.firebase.client.ValueEventListener;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.location.LocationServices;
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.UiSettings;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;



public class MapsActivity extends FragmentActivity implements    OnMapReadyCallback {

private static GoogleMap mMap;
private GoogleApiClient mGoogleApiClient;



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Firebase.setAndroidContext(this);
    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);

    /*if (mGoogleApiClient == null) {
        mGoogleApiClient = new GoogleApiClient.Builder(this)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
                .addApi(LocationServices.API)
                .build();
    }*/
}


/**
 * Manipulates the map once available.
 * This callback is triggered when the map is ready to be used.
 * This is where we can add markers or lines, add listeners or move the camera. In this case,
 * we just add a marker near Sydney, Australia.
 * If Google Play services is not installed on the device, the user will be prompted to install
 * it inside the SupportMapFragment. This method will only be triggered once the user has
 * installed Google Play services and returned to the app.
 */
@Override
public void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;
    UiSettings UiSettings = googleMap.getUiSettings();
    UiSettings.setZoomControlsEnabled(true);

    LocationManager service = (LocationManager) getSystemService(LOCATION_SERVICE);
    Criteria criteria = new Criteria();
    String provider = service.getBestProvider(criteria, true);
    //Location myLocation = service.getLastKnownLocation(provider);

    mMap.setMyLocationEnabled(true);




    //double latitude = myLocation.getLatitude();
    //double longitude = myLocation.getLongitude();
    //LatLng startingPosition = new LatLng(latitude, longitude);

    LatLng sydney = new LatLng(-34, 151);
    createMarker();
    //mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
}

private void createMarker() {
    Firebase ref = new Firebase("https://shining-fire-3472.firebaseio.com/locations");
    //Query queryRef = ref.orderByChild("latitude");
    ref.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for (DataSnapshot userSnapshot : dataSnapshot.getChildren()) {
                markerLocation marker = userSnapshot.getValue(markerLocation.class);
                Double lat = Double.parseDouble(marker.getLatitude());
                Double log = Double.parseDouble(marker.getLongtitude());
                LatLng latLng = new LatLng(lat, log);
                mMap.addMarker(new MarkerOptions().position(latLng));
            }
        }

        @Override
        public void onCancelled(FirebaseError firebaseError) {

        }
    });
}
}

这里是appbuild gradle:

apply plugin: 'com.android.application'

android {
compileSdkVersion 23
buildToolsVersion "23.0.2"

defaultConfig {
    applicationId "com.test.googlemap"
    minSdkVersion 17
    targetSdkVersion 23
    versionCode 1
    versionName "1.0"
    multiDexEnabled true
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
packagingOptions {
    exclude 'META-INF/LICENSE'
    exclude 'META-INF/LICENSE-FIREBASE.txt'
    exclude 'META-INF/NOTICE'
    exclude 'META-INF/services/com.fasterxml.jackson.core.ObjectCodec'
}
dexOptions {
    preDexLibraries = false
    incremental = true;
    javaMaxHeapSize "4g"
}
}

dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.2.0'
compile 'com.google.android.gms:play-services:8.4.0'

compile files('libs/firebase-client-android-2.5.2.jar')

}

我正在尝试检索标记位置对象以创建将显示地图的自定义标记。该项目将同步,但每当我尝试构建 APK 时,我都会收到此错误:

错误:任务 ':app:dexDebug' 执行失败。> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'C:\Program Files (x86 )\Java\jdk1.8.0_60\bin\java.exe'' 以非零退出值 1 结束

我已经尝试了其他类似问题的所有修复,但没有一个对我有用。

【问题讨论】:

  • 尝试使用 gradlew 在命令行上构建并传递标志 --debug 和 --stacktrace 以获取更多详细信息。

标签: java android google-maps firebase


【解决方案1】:
  • 由于堆大小而发生这种情况
  • 我遇到了同样的问题,但问题已解决。
  • 请检查下面的 build.gradle/app 文件并对其进行一些更改。
  • Firebase 版本和地图版本应该是 .
  • 请检查代码
  • 在你的 gradle 中添加这两件事

  • multiDexEnabled true

  • **dexOptions { javaMaxHeapSize "4g" }*

*


apply plugin: 'com.android.application'

机器人{ compileSdkVersion 25 buildToolsVersion "25.0.2"

defaultConfig {
    applicationId "com.jmtechnologies.askuscash"
    minSdkVersion 14
    targetSdkVersion 25
    versionCode 1
    versionName "1.0"
    multiDexEnabled true
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
dexOptions {
    javaMaxHeapSize "4g"
}

}

依赖{ 编译 fileTree(dir: 'libs', include: ['*.jar']) 测试编译'junit:junit:4.12' // 编译'com.android.support:multidex:1.0.0'

compile 'com.android.support:appcompat-v7:25.1.0'
compile 'com.android.support:design:25.1.0'
compile 'com.android.support:recyclerview-v7:25.1.0'
compile 'com.google.android.gms:play-services:10.0.1'
compile 'com.google.android.gms:play-services:10.0.1'

compile 'com.google.maps.android:android-maps-utils:0.3+'
compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'

// Spinner
compile 'com.jaredrummler:material-spinner:1.1.0'

//Firebase
compile 'com.google.firebase:firebase-messaging:10.0.1'

} 应用插件:'com.google.gms.google-services'

【讨论】:

    【解决方案2】:

    基于page,他们通过以下步骤解决了此类问题。

    1. 下载并解压 SDK。这应该创建一个名为 Parse-1.xx.x 的文件夹(在我的例子中是 Parse-1.11.0)
    2. 将整个文件夹移动到 /apps/libs(确保删除了之前的 Parse-*.jar 文件)
    3. 构建 > 重建项目

    如果您对螺栓文件有疑问,可以按照以下步骤解决。

    1. 转至:https://github.com/ParsePlatform/Parse-SDK-Android
    2. 下载jar文件
    3. 将下载的jar文件存放在src/main/libs文件夹中
    4. 然后在 build.gradle(module:app) 文件中添加依赖项“compile 'com.parse:parse-android:1.11.0'” -> 或任何 jar 文件的版本号。
    5. 同步 gradle 文件。

    也尝试检查这个SO question.的解决方案

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-18
      • 1970-01-01
      • 1970-01-01
      • 2011-03-08
      • 2015-09-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多