Как получить последние данные из базы данных и показать сверху, используя RxJava2 - PullRequest
0 голосов
/ 23 сентября 2019

Я создаю приложение с использованием шаблона MVVM и с использованием retrofit2 и rxjava2. Я получаю данные с сервера и показываю их в представлении переработчика. Так что далеко данные были успешно извлечены в представлении переработчика, но недавно добавленные данные отображаются на последней позиции в представлении переработчика.Я хочу показать недавно добавленные данные сверху в представлении переработчика:

Это мой код для отображения данных в представлении переработчика:

Contacts.java

public class Contacts extends Fragment {

private RecyclerView recyclerView;
private List<Contact> contactList = new ArrayList<>();
private ContactsAdapter adapter;
private ProgressBar progressBar1;
private ContactViewModel viewModel;


public Contacts() {
    // Required empty public constructor
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_contacts, container, false);

    recyclerView=  view.findViewById(R.id.recyclerView);
    progressBar1 = view.findViewById(R.id.progressBar1);

    viewModel = ViewModelProviders.of(this).get(ContactViewModel.class);

    recyclerView.setHasFixedSize(true);
    recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));

    adapter = new ContactsAdapter(getActivity(),contactList);

    recyclerView.setAdapter(adapter);

    viewModel.getAllContacts().observe(this, new Observer<List<Contact>>() {
        @Override
        public void onChanged(List<Contact> contacts) {

            progressBar1.setVisibility(View.INVISIBLE);
            adapter.setContactList(contacts);
        }
    });

    return view;
  }

}

ContactViewModel.java

public class ContactViewModel extends AndroidViewModel {

ContactRepository repo;
MutableLiveData<List<Contact>> mutableLiveData;

public ContactViewModel(@NonNull Application application) {
    super(application);

    repo  = new ContactRepository(application);
    mutableLiveData = new MutableLiveData<>();
  }

public MutableLiveData<List<Contact>> getAllContacts() {
    return repo.getMutableLiveData();
  }
}

ContactRepository.java

public class ContactRepository {

Context context;
MutableLiveData<List<Contact>> contactmutableLiveData = new MutableLiveData<>();

public ContactRepository(Context context){

    this.context = context;
}

public MutableLiveData<List<Contact>> getMutableLiveData() {

    Retrofit retrofit = RetrofitClient.getInstance();
    ApiService apiService = retrofit.create(ApiService.class);

    apiService.getContacts().subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Observer<List<Contact>>() {
                @Override
                public void onSubscribe(Disposable d) {

                }

                @Override
                public void onNext(List<Contact> contacts) {

                    contactmutableLiveData.setValue(contacts);

                }

                @Override
                public void onError(Throwable e) {

                    TastyToast.makeText(context,e.getMessage(),TastyToast.LENGTH_LONG,TastyToast.ERROR).show();
                }

                @Override
                public void onComplete() {

                }
            });

    return contactmutableLiveData;
  }

}

ContactsAdapter.java

public class ContactsAdapter extends RecyclerView.Adapter<ContactsAdapter.ViewHolder> {

Context context;
List<Contact> contactList = new ArrayList<>();

public ContactsAdapter(Context context, List<Contact> contactList) {
    this.context = context;
    this.contactList = contactList;
}

@NonNull
@Override
public ContactsAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.contact_row,parent,false);

    ViewHolder viewHolder = new ViewHolder(v);

    return viewHolder;
}

@Override
public void onBindViewHolder(@NonNull ContactsAdapter.ViewHolder holder, int position) {

    final Contact contact = contactList.get(position);

    final String str1 = contact.getFirstname();
    final String str2 = contact.getLastname();

    holder.userName.setText(str1 + " " +str2);

}

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

public void setContactList(List<Contact> contactList) {
    this.contactList = contactList;
    notifyDataSetChanged();
}

public class ViewHolder extends RecyclerView.ViewHolder{

    TextView userName;

    public ViewHolder(@NonNull View itemView) {
        super(itemView);

        userName = itemView.findViewById(R.id.userName);
      }
   }

}

Contact.java

public class Contact {

String firstname,lastname;

public Contact(){

}

public Contact(String firstname,String lastname){

    this.firstname = firstname;
    this.lastname = lastname;

}

public String getFirstname() {
    return firstname;
}

public void setFirstname(String firstname) {
    this.firstname = firstname;
}

public String getLastname() {
    return lastname;
}

public void setLastname(String lastname) {
    this.lastname = lastname;
}
}

Кто-то, пожалуйста, дайте мне знать, как я могу получить желаемый результат.Любая помощь будет оценена.

СПАСИБО

...