这是我的代码。在firebase中我已经保存了我的经纬度。现在我想从firebase中检索那个经纬度并显示在addreesstv文本框中。但是我的代码不工作。应用程序崩溃了。我应该更改什么?
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 255 98-25598/? I/进程:发送信号。 PID:25598符号:9
看起来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);
}