java - Firebase : NumberFormatException on reference. 子 ("key").toString();

标签 java android google-maps firebase-realtime-database

我是 android studio 新手,在向谷歌地图添加经度纬度值时遇到问题。我收到如下 UncaughtException: java.lang.NumberFormatException 错误:

用户 map Activity

package uk.co.jaunt_app.jaunt;

import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.widget.EditText;

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.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;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;

public class UserMapActivity extends FragmentActivity implements OnMapReadyCallback {

    private GoogleMap mMap;
    EditText MapIDText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_user_map);
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);

        MapIDText = (EditText) findViewById(R.id.getMapIDText);

        Intent intent = getIntent();
        String str = intent.getStringExtra("mapid");
        MapIDText.setText(str);

    }

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

        Firebase.setAndroidContext(this);

        final Firebase ref = new Firebase(Config.FIREBASE_URL);
        final Firebase usersRef = ref.child("Users");
        FirebaseUser currentFirebaseUser = FirebaseAuth.getInstance().getCurrentUser();
        final String uid = currentFirebaseUser.getUid();
        final String mapidend = MapIDText.getText().toString().trim();
        final Firebase userMap = usersRef.child(uid);

        userMap.child(mapidend).addListenerForSingleValueEvent(new ValueEventListener() {

            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                if (dataSnapshot.exists()) {

                    Firebase userMap = usersRef.child(uid).child(mapidend);
                    String mapstartlat = userMap.child("startLat").toString();
                    String mapstartlong = userMap.child("startLong").toString();
                    double startlat = Double.valueOf(mapstartlat);
                    double startlong = Double.valueOf(mapstartlong);

                    LatLng StartEnd = new LatLng(startlat, startlong);
                    mMap.addMarker(new MarkerOptions().position(StartEnd));
                    mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(StartEnd,18));
                } else {

                }

            }
            @Override
            public void onCancelled(FirebaseError firebaseError) {
                throw firebaseError.toException();
            }
        });
    }
}

错误代码

075-13075/? E/UncaughtException: java.lang.NumberFormatException: For input string: "https://jaunt-ddc86.firebaseio.com/Users/NUqyLWTYFSg4a2vHqLla73OjLeP2/55657f79-6f40-4f3e-a889-cea935b0fec7/startLat"
        at java.lang.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1306)
        at java.lang.Double.valueOf(Double.java:511)
        at uk.co.jaunt_app.jaunt.UserMapActivity$1.onDataChange(UserMapActivity.java:65)
        at com.firebase.client.Query$1.onDataChange(Query.java:158)
        at com.firebase.client.core.ValueEventRegistration.fireEvent(ValueEventRegistration.java:45)
        at com.firebase.client.core.view.DataEvent.fire(DataEvent.java:45)
        at com.firebase.client.core.view.EventRaiser$1.run(EventRaiser.java:38)
        at android.os.Handler.handleCallback(Handler.java:751)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6776)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)

最佳答案

你只是在路径上应用toString,这样你就得到了一个字符串路径

NumberFormatException: For input string: 
"https://jaunt-ddc86.firebaseio.com/Users/NUqyLWTYFSg4a2v.../startLat"

解决方案:使用getValue()函数检索数据并使用 dataSnapshot 引用

String mapstartlat  = dataSnapshot.child("startLat").getValue().toString();
String mapstartlong = dataSnapshot.child("startLong").getValue().toString();

关于java - Firebase : NumberFormatException on reference. 子 ("key").toString();,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44230370/

相关文章:

java - InputFilter 内的 IndexOutOfBoundsException

javascript - 如何使谷歌地图API中的特定区域仅可见?

java - 阿拉伯语的 Android Google map 标记标题显示空白

java - Java ConcurrentHashMap computeIfAbsent() 方法是否支持基于键的 "locking"?

java - Spring Data JPA 之间 findBy/findAllBy 的区别

android - 如何从 Admob 中删除或删除 Android 应用程序?

javascript - 基于路线的中心 map

java - 使用 Xerces 2 防止 XXE(外部 XML 实体)注入(inject)

java - Set 的奇怪 JSON 映射问题 - 缺少元素

android - 音效安卓