【问题标题】:Firebase : NumberFormatException on reference.child("key").toString();Firebase : NumberFormatException on reference.child("key").toString();
【发布时间】:2017-05-28 17:58:32
【问题描述】:

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

UserMapActivity

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)

【问题讨论】:

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


【解决方案1】:

你只是在路径上应用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();

【讨论】:

  • 成功了,非常感谢您为我解释!
  • 很高兴能帮上忙,编码愉快
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-10
  • 2018-01-17
  • 2017-06-16
  • 2011-05-16
相关资源
最近更新 更多