当前位置: 首页 > 知识库问答 >
问题:

添加Firebase后Android定位应用崩溃

邰德业
2023-03-14

我尝试使用Android studio在谷歌地图上创建位置标记,并从Firebase实时数据库中获取位置。当我将Firebase实时数据库添加到我的应用程序中后,它就一直崩溃。请帮帮忙。下面是MapsActivity.java代码

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {


String latitude,longitude,value;
int n,n1;
float x,y;
FirebaseDatabase firebaseDatabase;
DatabaseReference databaseReference;

private GoogleMap mMap;

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

    firebaseDatabase = FirebaseDatabase.getInstance();
    databaseReference = firebaseDatabase.getReference("device");

    databaseReference.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
            value = dataSnapshot.getValue().toString();

            n = value.indexOf("attitude=0");

            latitude = value.substring(n+10,n+17);
            longitude  =  value.substring(n+28,n1+34);

            x = Float.parseFloat(latitude);
            y = Float.parseFloat(longitude);


        }

        @Override
        public void onChildChanged(DataSnapshot dataSnapshot, String s) {

        }

        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) {

       }

        @Override
        public void onChildMoved(DataSnapshot dataSnapshot, String s) {

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

    // 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);
};

/**
 * 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;
   // x = (float) 13.9365;
   // y = (float) 100.4991;

    x = Float.parseFloat(latitude);
     y = Float.parseFloat(longitude);

    // Add a marker in Sydney and move the camera
    LatLng sydney = new LatLng(x, y);
    mMap.addMarker(new MarkerOptions().position(sydney).title("Device1"));
    mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));



}}

这似乎是个问题

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.smart, PID: 13831
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.String.trim()' on a null object reference
    at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1838)
    at sun.misc.FloatingDecimal.parseFloat(FloatingDecimal.java:122)
    at java.lang.Float.parseFloat(Float.java:451)
    at com.example.smartbin.MapsActivity.onMapReady(MapsActivity.java:98)
    at com.google.android.gms.maps.zzak.zza(Unknown Source:2)
    at com.google.android.gms.maps.internal.zzaq.dispatchTransaction(Unknown Source:12)
    at com.google.android.gms.internal.maps.zzb.onTransact(Unknown Source:12)
    at android.os.Binder.transact(Binder.java:667)
    at cx.b(:com.google.android.gms.dynamite_mapsdynamite@201817068@20.18.17 (100700-0):2)
    at com.google.maps.api.android.lib6.impl.be.run(:com.google.android.gms.dynamite_mapsdynamite@201817068@20.18.17 (100700-0):2)
    at android.os.Handler.handleCallback(Handler.java:873)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:193)
    at android.app.ActivityThread.main(ActivityThread.java:6669)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

Path是一个唯一的关键字,我不知道如何创建Path,所以我尝试了substring并将其转换为float。谢谢你

共有1个答案

毋宪
2023-03-14

x=float.parsefloat(latitude)似乎会崩溃,因为latitude为空。您在这一行初始化latitude的值latitude=value.substring(n+10,n+17);,这将只在有子项添加到FirebaseDatabase时运行,因此当调用OnMapReady时,没有子项要添加到数据库,因此latitude为空。

 类似资料:
  • 我正在创建一个呼叫阻止应用程序,当我添加复选框或单选按钮到我的布局,应用程序开始崩溃。 活动代码。 } 广播接收机代码 公共void onReceive(上下文、意图){ XML文件如下所示 错误日志如下

  • 我已经将 firebase-core 添加到我的项目中进行分析,但从那时起我的应用程序就没有响应了。 这是我正在使用的gms的类路径: 这是我用于Firebase的依赖项: 此外,我还添加了到我的构建gradle文件的底部。 在我的应用程序类中,我只是初始化FirebaseAnalytics: 这是我从日志中得到的错误: 错误指向我的应用程序类的第84行,即Firebase Analytics初始

  • 它给出: 下面是我使用的代码: 方法verifyUserExistance是; 我就是这样处理注销的;

  • 当我尝试在Android Studio3中添加图像时,应用程序就会崩溃。请帮帮忙。 logcat: activity_main.xml 主要活动.java 当我删除ImageView时,应用程序就可以正常工作了。我已经尝试了一切,调整图像大小,重新安装android Studio。 有人能把问题弄清楚吗?

  • 问题内容: 好的,所以我正在构建一个将在Play商店中使用的应用程序,它具有将数据添加到Firebase的功能(它无法读取)。 第二个应用程序将保留在我这里(它不会在Play商店中出售),它用于读取数据。 现在我要做的是,第一个应用程序具有包名称:第二个应用程序具有包名称。 因此,我去了Firebase,创建了一个项目,使用包名称添加了一个应用程序,并设置了我的第一个应用程序。完美运行,我可以将数

  • 这在LOGCAT中显示;怎么修? 这是我的密码- } 分级- ChatMessage.java-