我的Firebase eventListeners有问题。我正尝试从Firebase数据库获取一些数据,但我无法获得结果。问题是,我的听众没有运行或返回结果。我试着用2个不同的监听器获取结果(onGetDataListener,ValueEventListener)。在调试过程中,整个侦听器被跳过,调试器向前移动。我已经在所有侦听器阶段添加了Log.d,但没有任何访问。未输入EventListeners
public class Suggestionsfragment extends Fragment implements AdapterView.OnItemClickListener {
private GooglePlaceList nearby;
LinearLayout linearLayout;
Double latitude;
Double longitude;
List<String> urlList;
private List<String> interestList;
private List<Double> latlong;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.suggestions, container, false);
linearLayout = (LinearLayout) v.findViewById(R.id.main_layout);
String placesKey = this.getResources().getString(R.string.places_key);
interestList = new ArrayList<>();
latlong = new ArrayList<>();
nearby = null;
FirebaseAuth firebaseAuth = FirebaseAuth.getInstance();
FirebaseUser user = firebaseAuth.getCurrentUser();
DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference();
if (user != null) {
DatabaseReference ref1 = databaseReference.child(user.getUid()).child("interest");
readData(ref1, new OnGetDataListener() {
@Override
public void onSuccess(DataSnapshot dataSnapshot) {
Log.d("ONSUCCESS", "Success");
for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
String interests = postSnapshot.getValue(String.class);
interestList.add(interests);
}
}
@Override
public void onStart() {
//whatever you need to do onStart
Log.d("ONSTART", "Started");
}
@Override
public void onFailure() {
Log.d("ONFAILURE", "Failure");
}
});
databaseReference.child(user.getUid());
databaseReference.child("location");
databaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Log.d("ONDATACHANGED", "listener2 entered");
try {
if (dataSnapshot.getValue() != null) {
for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
Double loc = postSnapshot.getValue(Double.class);
latlong.add(loc);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
latitude = latlong.get(0);
longitude = latlong.get(1);
int radius = 500;
urlList = generateUrlList(interestList, longitude, latitude, radius, placesKey);
if (placesKey.equals("PUT YOUR KEY HERE"))
Toast.makeText(getActivity(), "You haven't entered your Google Places Key into the strings file. Dont forget to set a referer too.", Toast.LENGTH_LONG).show();
else {
PlacesReadFeed process = new PlacesReadFeed();
process.execute(urlList);
}
return v;
}
...
}
我曾经有过datareference为你指示没有结果:databaseReference.child(user.getUid())。child(“location”) .addListenerForSingleValueEvent(...); 我已经找到了onGetDataListener从这个帖子: http://stackoverflow.com/questions/42621911/firebase-ondatachange-not-entered 这似乎与我的问题,但它并没有黯然帮助。 –
你说得对,异步监听器回调可能是问题。我已经注释了可能导致空指针的变量,并且onDataChanged在执行后运行3秒。我想我需要找出一种在代码执行之前检索Firebase数据的方法。 –