Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用SwipRefresh库刷新recyclerview时onDatachange给出错误_Java_Android_Android Studio - Fatal编程技术网

Java 使用SwipRefresh库刷新recyclerview时onDatachange给出错误

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

我正在使用SwipRefresh布局刷新我的recyclerview,但在添加recyclerview方法时 在SwipRefresh的onRefresh中,我得到了null对象引用上的Datachange错误,但是没有使用swipreferesh,它工作正常。这是我的代码。我尝试了所有可能的方法,但我无法解决我的问题。请提供任何建议。谢谢

  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
    }