Java 使用SwipRefresh库刷新recyclerview时onDatachange给出错误
我正在使用SwipRefresh布局刷新我的recyclerview,但在添加recyclerview方法时 在SwipRefresh的onRefresh中,我得到了null对象引用上的Datachange错误,但是没有使用swipreferesh,它工作正常。这是我的代码。我尝试了所有可能的方法,但我无法解决我的问题。请提供任何建议。谢谢Java 使用SwipRefresh库刷新recyclerview时onDatachange给出错误,java,android,android-studio,Java,Android,Android Studio,我正在使用SwipRefresh布局刷新我的recyclerview,但在添加recyclerview方法时 在SwipRefresh的onRefresh中,我得到了null对象引用上的Datachange错误,但是没有使用swipreferesh,它工作正常。这是我的代码。我尝试了所有可能的方法,但我无法解决我的问题。请提供任何建议。谢谢 private void Geofireinit() { started = true; GeoQuery geoQuery = fir
private void Geofireinit() {
started = true;
GeoQuery geoQuery = fire.queryAtLocation(new GeoLocation(20.887715, 77.757623), 50);
geoQuery.addGeoQueryEventListener(new GeoQueryEventListener() {
@Override
public void onKeyEntered(String key, GeoLocation location) {
Log.e("id", key);
Location to = new Location("to");
to.setLatitude(location.latitude);
to.setLongitude(location.longitude);
if (!fetchedUserIds) {
userIdsToLocations.put(key, to);
} else {
userIdsToLocations.put(key, to);
addUserListener(key);
}
}
@Override
public void onKeyExited(String key) {
Log.d("TAG", "onKeyExited: ");
if (userIdsWithListeners.contains(key)) {
int position = getUserPosition(key);
if (position!=-1) {
arrayList.remove(position);
adapter.notifyItemRemoved(position);
}
}
}
@Override
public void onKeyMoved(String key, GeoLocation location) {
}
@Override
public void onGeoQueryReady() {
initialListSize = userIdsToLocations.size();
if (initialListSize == 0) {
fetchedUserIds = true;
}
iterationCount = 0;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
userIdsToLocations.keySet().forEach(this::addUserListener);
}
}
private void addUserListener(String key) {
myref = FirebaseDatabase.getInstance().getReference().child("buses").child(key);
myref.addListenerForSingleValueEvent(userValueListener);
userIdsWithListeners.add(key); // myreference
}
@Override
public void onGeoQueryError(DatabaseError error) {
}
});
geoQueries.add(geoQuery);
}
private void setuplist() {
recyclerView.setLayoutManager(new LinearLayoutManager(this));
adapter = new Adapter(this, arrayList);
recyclerView.setAdapter(adapter);
}
@Override
public void onRefresh() {
getrecyclerview(); // getting error when adding this method inside onRefresh
}
private void getrecyclerview() {
swipeRefreshLayout.setRefreshing(true);
userValueListener = new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
swipeRefreshLayout.setRefreshing(false);
Mylist mylist = dataSnapshot.getValue(Mylist.class);
mylist.setText(dataSnapshot.child("text").getValue().toString());
if (arrayList.contains(mylist)) {
update(mylist);
} else {
newdata(mylist);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
};
}
Logcat错误
java.lang.NullPointerException: Attempt to invoke interface method 'void com.google.firebase.database.ValueEventListener.onDataChange(com.google.firebase.database.DataSnapshot)' on a null object reference
我建议不要使用库,而是使用本机布局。大概是这样的: XML: 您的getrecyclerview函数不应具有此行swiperFreshLayout.setRefreshingtrue
让我知道它是否有效 先生,我正在使用相同的尝试更改swipeRefreshLayout.setRefreshingtrue;要切换到swipeRefreshLayout.setRefreshingfalse;它的值不应为trueSir请查看此视频此错误显示刚刚看到视频,请尝试删除@Override public void onRefresh{},并在您的on refreshlistener中调用getrecyclerview;此外,您的swipeToRefresh应该已经使用findviewbyid进行了验证。也检查一下
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:id="@+id/swipeRefresh"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rvMyRecyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
swipeRefresh.setOnRefreshListener {
getrecyclerview()
swipeRefresh.isRefreshing = false
}