레코드를 추가하고 room 및 mvvm을 사용하여 활동을 알리는 적절한 방법

리디

나는 안드로이드 mvvm 구조를 배우고 있으며 그것을 구현하는 동안 의심이 있습니다. room을 사용하여 데이터베이스에 사용자 개체를 삽입했습니다. 그러나 삽입이 성공적으로 완료된 후 활동을 알리는 방법을 모르겠습니다.

나는 그것을 구현하려고 노력했다. 그러나 작동하지 않았습니다. 내 코드를 보여 드리겠습니다.

RegisterActivity

       public class RegisterActivity extends AppCompatActivity {

    ActivityRegisterBinding activityRegisterBinding;
    RegisterViewModel registerViewModel;
    private final CompositeDisposable mDisposable = new CompositeDisposable();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        initDataBinding();
        onUserRegistered();

    }

    private void initDataBinding() {
        activityRegisterBinding = DataBindingUtil.setContentView(this, R.layout.activity_register);

        RegisterViewModelFactory registerViewModelFactory = Injection.provideRegisterViewModelFactory(this);
        registerViewModel = ViewModelProviders.of(this,registerViewModelFactory).get(RegisterViewModel.class);
        activityRegisterBinding.setRegisterViewModel(registerViewModel);
    }

    private void onUserRegistered() {

        findViewById(R.id.register_button).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mDisposable.add(registerViewModel.onClickedSignUp()
                        .subscribeOn(Schedulers.io())
                        .observeOn(AndroidSchedulers.mainThread())
                        .subscribe(new Action() {
                            @Override
                            public void run() throws Exception {
                                Log.e("Success!!!","added a record");
                                Toast.makeText(RegisterActivity.this,"success",
                                        Toast.LENGTH_SHORT).show();
                                onBackPressed();
                            }
                        }, new Consumer<Throwable>() {
                            @Override
                            public void accept(Throwable throwable) throws Exception {
                                Log.e("Unable to add a record", throwable.toString());
                                throwable.printStackTrace();
                            }
                        }));
            }
        });
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mDisposable.dispose();
    }
}

RegisterViewModel

public class RegisterViewModel extends ViewModel {

    public ObservableField<String> name;
    public ObservableField<String> password;
    private UserDataSource userDataSource;

    RegisterViewModel(UserDataSource userDataSource){
        name=new ObservableField<>("");
        password=new ObservableField<>("");
        this.userDataSource=userDataSource;
   }

    public TextWatcher nameWatcher=new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

       }

        @Override
        public void afterTextChanged(Editable s) {
            if(!name.get().equals(s.toString())){
                name.set(s.toString());
           }
       }
   };

    public TextWatcher passwordWatcher=new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

        }

        @Override
        public void afterTextChanged(Editable s) {
            if(!password.get().equals(s.toString())){
            password.set(s.toString());
            }
        }
    };

    public Completable onClickedSignUp() {

        isLoading.setValue(true);

        if (name != null)
            Log.e("name", name.get());

       if (password != null)
           Log.e("pass", String.valueOf(password.get()));


       return Completable.fromAction(new Action() {
            @Override
            public void run() throws Exception {
                Log.e("final name",name.get());
                User user=new User(0,name.get(),0,0);
                userDataSource.insertOrUpdateUser(user);
           }
       });
    }
}

뷰 모델에서 출력 된 로그에서 이름과 비밀번호의 적절한 값을 얻고 있지만 버튼 클릭 이벤트에 레코드가 추가되지 않고 성공 또는 실패에 대한 활동을 알리지 않습니다. 이 경우 어떻게해야합니까?

mvvm을 처음 접하고 배우기 때문에 나를 안내하십시오.

Aditya

데이터 액세스 개체 인터페이스에서 삽입 메서드의 반환은 무효입니다. 데이터가 삽입 될 때 콜백을받지 않습니다. insert 메소드를 호출 한 직후 수행 할 작업을 수행 할 수 있습니다.

또한 onDestroy활동 방법 에서 mDisposable에 추가 한 일회용품을 폐기하는 것이 좋습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Android Room을 사용하여 데이터 레코드를 저장하는 방법

IN 절을 사용하여 레코드를 삭제하는 방법

rxjava 및 room을 사용하여 쿼리를 연결하는 방법

group by 절을 사용하여 레코드 수를 얻는 방법

Kotling 코 루틴을 사용하여 차단 코드를 처리하는 적절한 방법

데코레이터 또는 Mixin을 사용하여 'readonly_fields'및 'fields'Djnago 관리자에 필드를 추가하는 일반적인 방법

Javafx 및 Scene Builder를 사용하여 적절한 MVC 패턴을 만드는 방법

Room을 사용하여 ID별로 레코드가 있는지 여부를 확인하는 간단한 방법입니까?

새 열을 추가하고 dplyr 및 shift를 사용하여 재귀 적 정액을 계산하는 방법

입력 필드를 사용하여 여러 <tr>을 동적으로 추가 및 제거하는 방법

reactjs를 사용하여 work_status 및 text1 열에 대한 json 레코드 값을 얻는 방법

Room 및 Android Rx를 사용하여 동일한 쿼리에 대해 다른 종류의 반환을 구현하는 방법은 무엇입니까?

PHP를 사용하여 적절한 배열 형식을 만드는 방법

Powershell을 사용하여 적절한 do-while 루프를 만드는 방법

SQL을 사용하여 하나의 고유한 레코드를 가져오도록 필터링하는 방법

android, kotlin과 함께 Room 사용, 필드에 고유 제한을 추가하는 방법

TypeScript : Object.entries를 사용하여이 함수에 적절한 타이핑을 추가하는 방법

LayoutInflater를 사용하여 editText 및 버튼을 동적으로 추가하고 고유 ID를 설정하는 방법은 무엇입니까?

LIMIT 및 OFFSET을 사용하여 고유 한 레코드 시퀀스를 가져 오는 쿼리

group by 절을 사용하여 한 테이블의 레코드를 다른 테이블에 삽입하는 방법

jquery 및 ajax를 사용하여 동일한 레코드가 삽입 될 때 테이블을 업데이트하는 방법

PHP json을 사용하여 적절한 차원 배열을 만드는 방법

식을 사용하여 Where 및 OR로 동적 쿼리를 작성하는 방법

동일한 키를 사용하여 여러 사전의 값을 다른 사전에 추가하는 적절한 방법

ActiveRecord 및 Sidekiq을 사용하여 Postgres에서 동시에 레코드를 생성하는 방법

최적화 알고리즘을 사용하여 가능한 최상의 매개 변수를 찾는 방법

최적화 알고리즘을 사용하여 가능한 최상의 매개 변수를 찾는 방법

동적 SQL을 사용하여 중복 레코드를 삭제하는 절차

Li 항목에 클래스를 동적으로 추가하고 JavaScript 및 CSS를 사용하여 배경색을 변경하는 방법

TOP 리스트

  1. 1

    Ionic 2 로더가 적시에 표시되지 않음

  2. 2

    JSoup javax.net.ssl.SSLHandshakeException : <url>과 일치하는 주체 대체 DNS 이름이 없습니다.

  3. 3

    std :: regex의 일관성없는 동작

  4. 4

    Xcode10 유효성 검사 : 이미지에 투명성이 없지만 여전히 수락되지 않습니까?

  5. 5

    java.lang.UnsatisfiedLinkError : 지정된 모듈을 찾을 수 없습니다

  6. 6

    rclone으로 원격 디렉토리의 모든 파일을 삭제하는 방법은 무엇입니까?

  7. 7

    상황에 맞는 메뉴 색상

  8. 8

    SMTPException : 전송 연결에서 데이터를 읽을 수 없음 : net_io_connectionclosed

  9. 9

    정점 셰이더에서 카메라에서 개체까지의 XY 거리

  10. 10

    Windows cmd를 통해 Anaconda 환경에서 Python 스크립트 실행

  11. 11

    다음 컨트롤이 추가되었지만 사용할 수 없습니다.

  12. 12

    C #에서 'System.DBNull'형식의 개체를 'System.String'형식으로 캐스팅 할 수 없습니다.

  13. 13

    JNDI를 사용하여 Spring Boot에서 다중 데이터 소스 구성

  14. 14

    Cassandra에서 버전이 지정된 계층의 효율적인 모델링

  15. 15

    복사 / 붙여 넣기 비활성화

  16. 16

    Android Kotlin은 다른 활동에서 함수를 호출합니다.

  17. 17

    Google Play Console에서 '예기치 않은 오류가 발생했습니다. 나중에 다시 시도해주세요. (7100000)'오류를 수정하는 방법은 무엇입니까?

  18. 18

    SQL Server-현명한 데이터 문제 받기

  19. 19

    Seaborn에서 축 제목 숨기기

  20. 20

    ArrayBufferLike의 typescript 정의의 깊은 의미

  21. 21

    Kubernetes Horizontal Pod Autoscaler (HPA) 테스트

뜨겁다태그

보관