как я могу отобразить последний список без Интернета (firebase Android)

#android #performance #android-layout

#Android #Производительность #android-макет

Вопрос:

как я могу отобразить последний список пользователей без Интернета.

когда я использую Интернет, данные отображаются успешно

когда я не использую Интернет, данных нет

мне нужны последние данные для отображения в списке без Интернета

Активность

 Toolbar tb;
DatabaseReference onlineref;
RecyclerView recyclerview;
RecyclerView.LayoutManager layoutManager;
ArrayList<User>list;
AntherUS antherUS;
UserCOntroller adapter;
User p;
TextView title_Txt; 
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_list_);

    antherUS=new AntherUS(list_Activity.this);
    title_Txt=(TextView)findViewById(R.id.title_text);


  //  DatabaseReference reference =FirebaseDatabase.getInstance().getReference("Users");
    //reference.addValueEventListener(new V)

    //toolbar
    tb=(Toolbar) findViewById(R.id.tb);
    setSupportActionBar(tb);
    title_Txt.setText("  " antherUS.reading_code() " ~List");
    getSupportActionBar().setTitle(antherUS.reading_code());
    int redColorValue = Color.WHITE;


    String smartcode=antherUS.reading_code();

    onlineref= FirebaseDatabase.getInstance().getReference("Users").child(smartcode " ~List");
    recyclerview =(RecyclerView)findViewById(R.id.recy);
    layoutManager=new LinearLayoutManager(this);
    recyclerview.setLayoutManager(layoutManager);
    onlineref.keepSynced(true);

    list=new ArrayList<User>();
    adapter=new UserCOntroller(list_Activity.this,list);


        onlineref.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                for (final DataSnapshot dataSnapshot1:dataSnapshot.getChildren()){

                    if (!dataSnapshot1.getKey().equals(antherUS.reading_code() "pw_Group")) {
                         p = dataSnapshot1.getValue(User.class);
                        String[] Email_part = antherUS.reading_email().split("@");
                        String part1 = Email_part[0];
                        String aa = dataSnapshot1.getKey();
                        FirebaseUser userse = FirebaseAuth.getInstance().getCurrentUser();
                        String as = antherUS.reading_name();
                        if (!aa.equals("chat") amp;amp; (aa != null) amp;amp; (!aa.equals(antherUS.reading_holename())) amp;amp; (!aa.equals(antherUS.reading_name())) amp;amp; (!aa.equals(userse.getUid()))
                                amp;amp; (!aa.equals(part1))) {

                            list.add(p);
                            antherUS.writing_numberlist(list.size());
                        adapter.notifyDataSetChanged();
                        }}
                }

                recyclerview.setAdapter(adapter);


            }

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

            }
        });



    recyclerview.getRecycledViewPool().setMaxRecycledViews(0,list.size());
    recyclerview.setItemViewCacheSize(list.size());

}

@Override
protected void onResume() {
    super.onResume();
    User user=new User();
    user.setPw_group(antherUS.reading_pwgroup());
    user.setCode(antherUS.reading_code());
    user.setEmail(antherUS.reading_email());
    user.setName(antherUS.reading_name());
    user.setHole(antherUS.reading_holename());

}

@Override
protected void onPause() {
    super.onPause();

}

@Override
public void onStart() {
    super.onStart();

}
private boolean isNetworkAvailable() {
    ConnectivityManager connectivityManager
            = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
    return activeNetworkInfo != null;
}

}
  

Адаптер RecyclerView

 public class UserCOntroller extends RecyclerView.Adapter<UserCOntroller.myViewHolder>{

Context context;
ArrayList<User>profiles;
String massemail;

public  UserCOntroller(Context c,ArrayList<User>p){
    context=c;
    profiles=p;
}
@NonNull
@Override
public myViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
    return new myViewHolder(LayoutInflater.from(context).inflate(R.layout.user_layout,viewGroup,false));
}

@Override
public void onBindViewHolder(@NonNull final myViewHolder myViewHolder, final int position) {
    AntherUS antherUS=new AntherUS(context);

    // set names in list
    myViewHolder.user.setText(profiles.get(position).getName());
    final User user=profiles.get(position);


    /// get url
    massemail=user.getEmail();
    Glide.with(context)
            .load(user.getImageUrl())
            .into(myViewHolder.imageView);

myViewHolder.itemView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent intent=new Intent(context,CHatActivity.class);
       // User user=profiles.get(position);
        //send name and the main name
        intent.putExtra("userid",user.getName());
        intent.putExtra("holeid",user.getHole());
        FirebaseUser user1s=FirebaseAuth.getInstance().getCurrentUser();
        context.startActivity(intent);

    }
});

}

@Override
public int getItemCount() {
    return profiles.size();
}

class myViewHolder extends RecyclerView.ViewHolder{

    TextView user;
    CircleImageView imageView;
    CardView card;
    public myViewHolder(@NonNull View itemView) {
        super(itemView);

        user=(TextView)itemView.findViewById(R.id.username);
        imageView=(CircleImageView) itemView.findViewById(R.id.imageView);
        card=(CardView) itemView.findViewById(R.id.card);
        card.getBackground().setAlpha(0);

    }
}
}
  

Ответ №1:

Вы должны хранить данные списка в локальной базе данных, а когда Интернет недоступен, вы должны извлекать данные из локальной базы данных и отображать пользователю.

Ответ №2:

Firebase предоставляет возможность кэшировать данные локально, чтобы мы могли использовать их в автономном режиме. Для получения дополнительной информации ознакомьтесь с документом, включающим автономные возможности

Чтобы сохранить данные локально, вы должны установить setPersistenceEnabled в true

 FirebaseDatabase.getInstance().setPersistenceEnabled(true);