Проблема с получение данных Firebase
Хочу получать инфу о юзерах из бд. Для этого, перебираю их загружаю профиль в карточки. Все работало отлично, но иногда, все просто вылетает.
public class MainWindowActivity extends Fragment {
private User mainUser;
private UsersDatabase usersDatabase;
private FindingArea findingArea;
private SwipeFlingAdapterView flingContainer;
private Card cardsData[];
private CardArrayAdapter arrayAdapter;
private ListView listView;
private List<Card> rowItems;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.main_container, container, false);
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
usersDatabase = Room.databaseBuilder(getActivity().getApplicationContext(), UsersDatabase.class, "UsersRoomDB").allowMainThreadQueries().build();
mainUser = usersDatabase.getUserDAO().getAllUsers().get(usersDatabase.getUserDAO().getAllUsers().size() - 1);
flingContainer = getActivity().findViewById(R.id.frame);
DatabaseReference myRef = FirebaseDatabase.getInstance().getReference().child("Users");
if (!(mainUser.getLatitude().equals("0")) && !(mainUser.getLongitude().equals("0")) &&
!(mainUser.getLatitude().equals("-1")) && !(mainUser.getLongitude().equals("-1"))) {
findingArea = new FindingArea(Double.parseDouble(mainUser.getLatitude()), Double.parseDouble(mainUser.getLongitude()), 1);
getNextUser();
rowItems = new ArrayList<Card>();
arrayAdapter = new CardArrayAdapter(MainWindowActivity.this.getContext(), R.layout.item_card, rowItems);
flingContainer.setAdapter(arrayAdapter);
flingContainer.setFlingListener(new SwipeFlingAdapterView.onFlingListener() {
@Override
public void removeFirstObjectInAdapter() {
Log.d("LIST", "removed object!");
rowItems.remove(0);
arrayAdapter.notifyDataSetChanged();
}
@Override
public void onLeftCardExit(Object dataObject) {
Toast.makeText(MainWindowActivity.this.getContext(), "Left!", Toast.LENGTH_SHORT).show();
Card obj = (Card) dataObject;
String id = obj.getUserID();
myRef.child(id).child("wasVisitedBy").child(mainUser.getID()).setValue(true);
}
@Override
public void onRightCardExit(Object dataObject) {
Toast.makeText(MainWindowActivity.this.getContext(), "Right!", Toast.LENGTH_SHORT).show();
Card obj = (Card) dataObject;
String id = obj.getUserID();
myRef.child(id).child("wasVisitedBy").child(mainUser.getID()).setValue(true);
myRef.child(mainUser.getID()).child("visitedRight").push().setValue(id);
}
@Override
public void onAdapterAboutToEmpty(int itemsInAdapter) {
}
@Override
public void onScroll(float scrollProgressPercent) {
}
});
}
else
Toast.makeText(this.getContext(), "Включите геоданные и перезагрузите приложение", Toast.LENGTH_LONG).show();
}
private void getNextUser() {
DatabaseReference myRef = FirebaseDatabase.getInstance().getReference().child("Users");
myRef.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
double dataLatitude = Double.parseDouble(dataSnapshot.child("latitude").getValue().toString());
double dataLongitude = Double.parseDouble(dataSnapshot.child("longitude").getValue().toString());
if (dataSnapshot.exists() && !(dataSnapshot.child("wasVisitedBy").hasChild(mainUser.getID()))
&& !(dataSnapshot.child("mail").getValue().toString().equals(mainUser.getMail())) &&
dataLatitude >= findingArea.getLeftMaxLatitude() &&
dataLatitude <= findingArea.getRightMaxLatitude() &&
dataLongitude >= findingArea.getBottomMaxLongitude() &&
dataLongitude <= findingArea.getUpperMaxLongitude()) {
Card item = new Card(dataSnapshot.child("id").getValue().toString(), dataSnapshot.child("name").getValue().toString(),
dataSnapshot.child("mainPhoto").getValue().toString());
rowItems.add(item);
arrayAdapter.notifyDataSetChanged();
}
}
@Override
public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
}
Вот лог ошибок:
2020-05-03 19:47:08.082 6129-6129/? E/Zygote: v2
2020-05-03 19:47:08.083 6129-6129/? E/Zygote: accessInfo : 0
2020-05-03 19:47:08.606 6129-6129/com.android.badoonfirebase E/ViewRootImpl@58d3211[MainActivity]: ViewRootImpl #2 Surface is not valid.
2020-05-03 19:47:10.064 6129-6129/com.android.badoonfirebase E/FirebaseInstanceId: Failed to resolve target intent service, skipping classname enforcement
2020-05-03 19:47:10.073 6129-6129/com.android.badoonfirebase E/FirebaseInstanceId: Error while delivering the message: ServiceIntent not found.
2020-05-03 19:47:21.326 6129-6129/com.android.badoonfirebase E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.android.badoonfirebase, PID: 6129
java.lang.NumberFormatException: empty String
at java.lang.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1071)
at java.lang.Double.parseDouble(Double.java:547)
at com.android.badoonfirebase.AppWindows.MainWindowActivity$2.onChildAdded(MainWindowActivity.java:105)
at com.google.firebase.database.core.ChildEventRegistration.fireEvent(com.google.firebase:firebase-database@@19.2.1:79)
at com.google.firebase.database.core.view.DataEvent.fire(com.google.firebase:firebase-database@@19.2.1:63)
at com.google.firebase.database.core.view.EventRaiser$1.run(com.google.firebase:firebase-database@@19.2.1:55)
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:6780)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1500)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1390)