【问题标题】:How to retrieve the address from latitude and longitude in firebase database?如何从firebase数据库中的纬度和经度中检索地址?
【发布时间】:2020-07-23 12:59:35
【问题描述】:

这是我的代码。在 firebase 中,我保存了我的纬度和经度。现在我想从 firebase 中检索该纬度和经度并显示在 addreestv 文本框中。但我的代码不起作用。应用程序正在崩溃。什么我应该改变吗?

private void loadAddress() {
    String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
    DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
    DatabaseReference uidRef = rootRef.child("Users").child(uid);
    ValueEventListener valueEventListener = new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            String name=""+dataSnapshot.child("mylocation").child("name2").getValue();

            lattitude= Double.parseDouble(""+dataSnapshot.child("mylocation").child("latitude").getValue());
            longitude= Double.parseDouble(""+dataSnapshot.child("mylocation").child("longitude").getValue());

            Geocoder geocoder;
            List<Address> addresses;
            geocoder=new Geocoder(MainUserActivity.this, Locale.getDefault());

            try{
                addresses=geocoder.getFromLocation(lattitude,longitude,1);
                String address=addresses.get(0).getAddressLine(0);
                String city=addresses.get(0).getLocality();
                String state=addresses.get(0).getAdminArea();
                String country=addresses.get(0).getCountryName();

                addresstv.setText(address);
            } catch (IOException e) {
                Toast.makeText(MainUserActivity.this, ""+e.getMessage(), Toast.LENGTH_SHORT).show();
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
            Log.d("TAG", databaseError.getMessage()); //Don't ignore errors!
        }
    };
    uidRef.addListenerForSingleValueEvent(valueEventListener);
}

这是我的日志:

2020-07-23 18:38:43.237 25598-25598/? E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.myproject.marutiApp, PID: 25598
    java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
        at java.util.ArrayList.get(ArrayList.java:437)
        at com.myproject.marutiApp.MainUserActivity$1.onDataChange(MainUserActivity.java:83)
        at com.google.firebase.database.Query$1.onDataChange(Query.java:179)
        at com.google.firebase.database.core.ValueEventRegistration.fireEvent(ValueEventRegistration.java:75)
        at com.google.firebase.database.core.view.DataEvent.fire(DataEvent.java:63)
        at com.google.firebase.database.core.view.EventRaiser$1.run(EventRaiser.java:55)
        at android.os.Handler.handleCallback(Handler.java:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:201)
        at android.app.ActivityThread.main(ActivityThread.java:6810)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)

2020-07-23 18:38:43.298 25598-25598/? I/Process:发送信号。 PID:25598 SIG:9

【问题讨论】:

  • logcat的错误是什么?
  • IndexOutOfBoundsException: Index: 0, Size: 0 你尝试从一个空列表(大小为 0)中获取第一个元素(索引为 0)。
  • 它说try and catch部分有错误。如果我评论了整个部分。应用程序没有崩溃。但是完整的地址也没有显示。
  • 谁能给我正确的代码?

标签: android firebase firebase-realtime-database


【解决方案1】:

getFromLocation 似乎返回了一个空列表。为防止出现错误,您需要检测到没有结果,在这种情况下不要将其设置为 addresstv

比如:

addresses=geocoder.getFromLocation(lattitude,longitude,1);
if (addresses != null && addresses.size() > 0) {
    String address=addresses.get(0).getAddressLine(0);
    String city=addresses.get(0).getLocality();
    String state=addresses.get(0).getAdminArea();
    String country=addresses.get(0).getCountryName();

    addresstv.setText(address);
}

【讨论】:

  • addresses.length 用红色突出显示。如何解决? .length 部分突出显示。对不起,我是初学者。
  • 在检查了GeoCoder.getFromLocation 的API 文档后,似乎返回了List。在这种情况下,使用size() 来确定列表的大小。我更新了答案中的代码,但也强烈建议学习浏览 API 文档,因为当像我这样的答案不适用于您的情况时,它会帮助您摆脱困境。
猜你喜欢
  • 2018-01-12
  • 2011-04-04
  • 1970-01-01
  • 1970-01-01
  • 2012-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多