Как передать значения переменной stati c из файла Users. java в файл UsersFragment. java с помощью адаптера? - PullRequest
1 голос
/ 09 марта 2020

Я хочу передать переменные stati c от Users. java в UsersFragment. java, но возникнет указанная ниже ошибка ... Я пытаюсь устранить эту ошибку за последние 2 дня.

E/RecyclerView: No adapter attached; skipping layout
V/FA: Inactivity, disconnecting from the service
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.login, PID: 9070
    com.google.firebase.database.DatabaseException: No properties to serialize found on class com.example.login.Users
        at com.google.firebase.database.core.utilities.encoding.CustomClassMapper$BeanMapper.<init>(com.google.firebase:firebase-database@@19.2.0:547)
        at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.loadOrCreateBeanMapperForClass(com.google.firebase:firebase-database@@19.2.0:329)
        at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.convertBean(com.google.firebase:firebase-database@@19.2.0:430)
        at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.deserializeToClass(com.google.firebase:firebase-database@@19.2.0:231)
        at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.convertToCustomClass(com.google.firebase:firebase-database@@19.2.0:79)
        at com.google.firebase.database.DataSnapshot.getValue(com.google.firebase:firebase-database@@19.2.0:203)
        at com.example.login.ui.login.UsersFragment$1.onDataChange(UsersFragment.java:59)
        at com.google.firebase.database.core.ValueEventRegistration.fireEvent(com.google.firebase:firebase-database@@19.2.0:75)
        at com.google.firebase.database.core.view.DataEvent.fire(com.google.firebase:firebase-database@@19.2.0:63)
        at com.google.firebase.database.core.view.EventRaiser$1.run(com.google.firebase:firebase-database@@19.2.0:55)
        at android.os.Handler.handleCallback(Handler.java:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:201)
        at android.app.ActivityThread.main(ActivityThread.java:6806)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)

Я верхняя ошибка, моя ошибка

at com.example.login.ui.login.UsersFragment$1.onDataChange(UsersFragment.java:59)

и полезные файлы 2 java приведены ниже

Пользователи. java

package com.example.login;

public class Users {
    private static String UserName;
    private static String UserPhone;
    private static String UserDesc;
    private static String UserEmail;
    private static String UserID;

    public Users(String userName,String userPhone,String userDesc,String userEmail, String userID) {
       this.UserName = userName;
       this.UserPhone = userPhone;
       this.UserDesc = userDesc;
       this.UserEmail = userEmail;
       this.UserID = userID;
    }

    public Users() {
    }

    public static String getUserName() {
        return UserName;
    }

    public static void setUserName(String userName) {
        UserName = userName;
    }

    public static String getUserPhone() {
        return UserPhone;
    }

    public static void setUserPhone(String userPhone) {
        UserPhone = userPhone;
    }

    public static String getUserDesc() {
        return UserDesc;
    }

    public static void setUserDesc(String userDesc) {
        UserDesc = userDesc;
    }

    public static String getUserEmail() {
        return UserEmail;
    }

    public static void setUserEmail(String userEmail) {
        UserEmail = userEmail;
    }

    public static String getUserID() {
        return UserID;
    }

    public static void setUserID(String userID) {
        UserID = userID;
    }
}

UsersFragment. java

package com.example.login.ui.login;

import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import com.example.login.R;
import com.example.login.UserAdapter;
import com.example.login.Users;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;

import java.util.ArrayList;
import java.util.List;

public class UsersFragment extends Fragment {
    private RecyclerView recyclerView;
    private UserAdapter userAdapter;
    private List<Users> users;

    @Override
    public View onCreateView(LayoutInflater inflater,ViewGroup container, Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.fragment_users,container,false);

        recyclerView = view.findViewById(R.id.user_recycler);
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));

        users = new ArrayList<>();

        readUsers();

        return view;
    }

    private void readUsers() {

        final FirebaseUser firebaseUser = FirebaseAuth.getInstance().getCurrentUser();
        DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Users");

        reference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                users.clear();
                for(DataSnapshot snapshot : dataSnapshot.getChildren()){
                    Users user = snapshot.getValue(Users.class);

                    assert firebaseUser != null;
                    if(!Users.getUserID().equals(firebaseUser.getUid())){
                        users.add(user);
                        Log.d("hhh",String.valueOf(users));
                    }
                }

                userAdapter = new UserAdapter(getContext(), users);
                recyclerView.setAdapter(userAdapter);
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });
    }
}

Пожалуйста, решите мою ошибку, я очень смущен ...

Ответы [ 3 ]

2 голосов
/ 09 марта 2020

Вы не должны использовать переменные stati c специально в этом классе. Как и другие люди говорили, что вы должны реализовать Serializable или даже лучше Parcelable (сериализуемый интерфейс для android)

0 голосов
/ 09 марта 2020

Чтобы решить эту проблему, ваш класс должен реализовать интерфейс Serializable:

class User implements Serializable {}

Также непонятно, почему вы используете stati c, stati c используется, когда переменная одна для всех объекты, но я думаю, что у вас есть разные пользователи

0 голосов
/ 09 марта 2020

Вам просто нужно реализовать свой объектный класс Users в Serializable следующим образом:

package com.example.login;

public class Users implements Serializable {
private static String UserName;
private static String UserPhone;
private static String UserDesc;
private static String UserEmail;
private static String UserID;

public Users(String userName,String userPhone,String userDesc,String userEmail, String userID) {
   this.UserName = userName;
   this.UserPhone = userPhone;
   this.UserDesc = userDesc;
   this.UserEmail = userEmail;
   this.UserID = userID;
}

public Users() {
}

public static String getUserName() {
    return UserName;
}

public static void setUserName(String userName) {
    UserName = userName;
}

public static String getUserPhone() {
    return UserPhone;
}

public static void setUserPhone(String userPhone) {
    UserPhone = userPhone;
}

public static String getUserDesc() {
    return UserDesc;
}

public static void setUserDesc(String userDesc) {
    UserDesc = userDesc;
}

public static String getUserEmail() {
    return UserEmail;
}

public static void setUserEmail(String userEmail) {
    UserEmail = userEmail;
}

public static String getUserID() {
    return UserID;
}

public static void setUserID(String userID) {
    UserID = userID;
}

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...