Как реализовать ViewModel и Live данных? - PullRequest
0 голосов
/ 28 апреля 2018

Я пытаюсь реализовать Viewmodel и Live-архитектуру данных. но я не могу этого сделать. Может кто-нибудь, пожалуйста, помогите мне в этом. ниже приведен код, с которым я пытался я не понимаю, как добавить данные JSON в список и показать адаптер и просмотрщик recyclerview.

модель класса:

public class User {

    private String id;
    private String name;
    private String address;
    private String createdAt;
    private String updatedAt;

    public User() {
    }

    public User(String name, String address) {
        this.name = name;
        this.address = address;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getCreatedAt() {
        return createdAt;
    }

    public void setCreatedAt(String createdAt) {
        this.createdAt = createdAt;
    }

    public String getUpdatedAt() {
        return updatedAt;
    }

    public void setUpdatedAt(String updatedAt) {
        this.updatedAt = updatedAt;
    }
}

UsersViewModel:

public class UsersViewModel extends ViewModel {

    AsyncTaskTest asyncTask;
    Context context;
    private LiveData<ArrayList<User>> list1 = null;

    UsersViewModel(Context context){
        list1=loadUsers();
    }

    private LiveData<ArrayList<User>> list;

    public LiveData<ArrayList<User>> user(){

        if (list==null){
            list=loadUsers();
        }

        return list;
    }

    private LiveData<ArrayList<User>> loadUsers(){

        String query;

        try {
            query= URLEncoder.encode("getChatRooms","UTF-8")+"="+URLEncoder.encode("getChatRooms","UTF-8");

            asyncTask=new AsyncTaskTest(/*context, */new AsyncTaskResult() {

                @Override
                public void AsyncTaskResult(String result) throws JSONException {

//                    list1=new ArrayList<>();
                    Log.v("DFJGHK",result);

                    JSONObject jsonObject=new JSONObject(result);
                    JSONArray jsonArray=jsonObject.getJSONArray("result");

                    for (int i=0;i<jsonArray.length();i++){
                        JSONObject object=jsonArray.optJSONObject(i);



                    }

                }
            });
            asyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,"POST","mobileApi/chatRooms",query);

        } catch(UnsupportedEncodingException e){
            e.printStackTrace();
        }
        return list1;
    }
}

активность:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list_show);

        recyclerView=(RecyclerView)findViewById(R.id.recyclerViewId);
        viewModel= ViewModelProviders.of(this).get(UsersViewModel.class);
        viewModel.user();

    }

Я искал в Интернете, но не нашел хорошего ресурса или, может быть, не очень хорошо понял. Мне нужна помощь, пожалуйста.

1 Ответ

0 голосов
/ 28 апреля 2018

Вот как это делается

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_list_show);

    recyclerView=(RecyclerView)findViewById(R.id.recyclerViewId);
    viewModel= ViewModelProviders.of(this).get(UsersViewModel.class)
    viewModel.user().observe(this, new Observer<List<User>>() {
        @Override
        public void onChanged(@Nullable List<User> users) {
            //You now have users
        }
    });

}

И модель вашего вида должна выглядеть так

public class UsersViewModel extends AndroidViewModel {

    public UsersViewModel(@NonNull Application application) {
        super(application);
    }

    public LiveData<ArrayList<User>> user() {
        ....
        return list;
    }
}
...