Android Firebase GeoFire使用FirebaseRecylerAdapter
如何使用在Firebase上执行地理查询后获得的键值填充FirebaseRecyclerAdapterAndroid Firebase GeoFire使用FirebaseRecylerAdapter,android,firebase-realtime-database,android-recyclerview,firebaseui,geofire,Android,Firebase Realtime Database,Android Recyclerview,Firebaseui,Geofire,如何使用在Firebase上执行地理查询后获得的键值填充FirebaseRecyclerAdapter public class MainActivity extends AppCompatActivity implements { private RecyclerView myLocationAds; private FirebaseRecyclerAdapter<MyAds, MyLocAdsViewHolder> myLocAdsAdapter; private Databa
public class MainActivity extends AppCompatActivity implements {
private RecyclerView myLocationAds;
private FirebaseRecyclerAdapter<MyAds, MyLocAdsViewHolder> myLocAdsAdapter;
private DatabaseReference myLocRefernce;
GoogleApiClient mGoogleApiClient;
private double mLatitudeText;
private double mLongitudeText;
LocationRequest mLocationRequest;
private Location location;
private GeoFire geoFire;
private GeoQuery geoQuery;
GeoLocation center;
初始化我的回收视图
private void intializeScreen() {
myLocationAds = (RecyclerView) findViewById(R.id.myLocationAds);
myLocationAds.setHasFixedSize(true);
myLocationAds.setLayoutManager(new LinearLayoutManager(MainActivity.this));
myLocRefernce = FirebaseDatabase.getInstance().getReference(Constants.Adverts);
myLocRefernce.keepSynced(true);
setUpAdapter();
myLocationAds.setAdapter(myLocAdsAdapter);
}
这是我的FirebaseRecyclerAdapter
private void setUpAdapter() {
myLocAdsAdapter = new FirebaseRecyclerAdapter<MyAds, MyLocAdsViewHolder>(
MyAds.class,
R.layout.adverts_row,
MyLocAdsViewHolder.class,
myLocRefernce
) {
@Override
protected void populateViewHolder(MyLocAdsViewHolder myLocAdsViewHolder, MyAds myAds, int position) {
final String post_key = getRef(position).getKey();
myLocAdsViewHolder.setAdImageV(getApplicationContext(),myAds.getImageUrl());
myLocAdsViewHolder.setAdheadln(myAds.getAdheader());
myLocAdsViewHolder.setAdDescp(myAds.getAdDesciption());
myLocAdsViewHolder.setViewN(myAds.getViews());
myLocAdsViewHolder.setComment(myAds.getNumComments());
myLocAdsViewHolder.mView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent adDisplay = new Intent(MainActivity.this,AdvertDisplay.class);
adDisplay.putExtra("Ad_data", post_key);
startActivity(adDisplay);
如何仅使用我位置范围内的那些键填充FirebaseRecyclerAdapter
private void setUpAdapter() {
myLocAdsAdapter = new FirebaseRecyclerAdapter<MyAds, MyLocAdsViewHolder>(
MyAds.class,
R.layout.adverts_row,
MyLocAdsViewHolder.class,
myLocRefernce
) {
@Override
protected void populateViewHolder(MyLocAdsViewHolder myLocAdsViewHolder, MyAds myAds, int position) {
final String post_key = getRef(position).getKey();
myLocAdsViewHolder.setAdImageV(getApplicationContext(),myAds.getImageUrl());
myLocAdsViewHolder.setAdheadln(myAds.getAdheader());
myLocAdsViewHolder.setAdDescp(myAds.getAdDesciption());
myLocAdsViewHolder.setViewN(myAds.getViews());
myLocAdsViewHolder.setComment(myAds.getNumComments());
myLocAdsViewHolder.mView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent adDisplay = new Intent(MainActivity.this,AdvertDisplay.class);
adDisplay.putExtra("Ad_data", post_key);
startActivity(adDisplay);
private void startGeoQuery() {
double radius = 0.5;
geoQuery = geoFire.queryAtLocation(center, radius);
geoQuery.addGeoQueryEventListener(new GeoQueryEventListener() {
@Override
public void onKeyEntered(String s, GeoLocation geoLocation) {
Log.d(TAG, "Key " + s + " entered the search area at [" + geoLocation.latitude + "," + geoLocation.longitude + "]");
//Toast.makeText(MainActivity.this,geoLocation.latitude+" "+geoLocation.longitude+" ",Toast.LENGTH_LONG).show();
DatabaseReference mDatabasePost = FirebaseDatabase.getInstance().getReference().child(Constants.Adverts);
mDatabasePost.keepSynced(true);
mDatabasePost.child(s).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// I add the deal only if it doesn't exist already in the adapter
String key = dataSnapshot.getKey();
Toast.makeText(MainActivity.this, key,Toast.LENGTH_LONG).show(); }
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
@Override
public void onKeyExited(String s) {
}
@Override
public void onKeyMoved(String s, GeoLocation geoLocation) {
}
@Override
public void onGeoQueryReady() {
}
@Override
public void onGeoQueryError(DatabaseError databaseError) {
}
});}}