Как сделать публикацию метода запроса вызова модифицированного API с помощью LiveData и ViewModel

Я новичок в android с java. У меня проблемы со входом в систему с использованием архитектуры mvvm и дооснащение на языке JAVA в студии Android. Мой код выглядит так:

Мой код выглядит так:

Интерфейс API:

@FormUrlEncoded
@POST("/login")
Call<SignInResponse> getResponse(@Field("email") String email,
                                 @Field("password") String password);

Класс дооснащения:

private static final String BASE_URL = "meu dominio";
private static Retrofit retrofit = null;

public static Retrofit getClient() {
    // change your base URL
    if (retrofit == null) {
        OkHttpClient client = new OkHttpClient.Builder().readTimeout(20, TimeUnit.SECONDS)
                .writeTimeout(20, TimeUnit.SECONDS)
                .connectTimeout(20, TimeUnit.SECONDS).build();
        retrofit = new Retrofit.Builder()
                .baseUrl(BASE_URL)
                .client(client)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
    }
    return retrofit;
}

ВойтиОтвет:

@SerializedName("id")
@Expose
public Integer id;


@SerializedName("name")
@Expose
public String name;


@SerializedName("email")
@Expose
public String email;

public Integer getId(){
    return id;
}
public void setId(Integer id){
    this.id = id;
}

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

public String getEmail(){ return email;}
public void setEmail(String email){this.email = email;}

Вход в Репозиторий:

private Application application;

public SignInRepository(Application application) {
    this.application = application;
}

public MutableLiveData<SignInResponse> getMutableData(String email, String password) {
    final MutableLiveData<SignInResponse> mutableLiveData = new MutableLiveData<>();

    ApiInterface apiInterface = RetroClass.getClient().create(ApiInterface.class);
    Call<SignInResponse> call = apiInterface.getResponse(email, password);
    call.enqueue(new Callback<SignInResponse>() {
        @Override
        public void onResponse(Call<SignInResponse> call, Response<SignInResponse> response) {
            if (response.isSuccessful()) {
                mutableLiveData.setValue(response.body());
            } else {
                SignInResponse signInResponse = new SignInResponse();
                Integer id = signInResponse.getId();
                mutableLiveData.setValue(signInResponse);
            }
        }

        @Override
        public void onFailure(Call<SignInResponse> call, Throwable t) {
            SignInResponse signInResponse = new SignInResponse();
            signInResponse.setId(signInResponse.id);
            mutableLiveData.setValue(signInResponse);
        }
    });
    return mutableLiveData;
}

мне viewModel:

public class SignInViewModel extends AndroidViewModel {


private Context context;

private SignInRepository signInRepository;
public SignInViewModel(@NonNull Application application) {
    super(application);
    signInRepository = new SignInRepository(application);
}

public LiveData<SignInResponse> getResponse(String email, String password) {

    return signInRepository.getMutableData(email, password);
}   

}

Основная деятельность :

public class MainActivity extends AppCompatActivity {

EditText email_et, password_et;
SignInViewModel signInViewModel;


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

    email_et = findViewById(R.id.etEmail);
    password_et = findViewById(R.id.etPassword);

    signInViewModel = new ViewModelProvider(this).get(SignInViewModel.class);


    findViewById(R.id.SignIn_btn).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (!TextUtils.isEmpty(email_et.getText().toString())&& !TextUtils.isEmpty(password_et.getText().toString())){
                SignInApiCall(email_et.getText().toString(),password_et.getText().toString());
            }
            else
                Toast.makeText(MainActivity.this, "Please enter all the fields", Toast.LENGTH_SHORT).show();
        }
    });
}

private void SignInApiCall(String email, String password) {
    signInViewModel.getResponse(email, password).observe(this, new Observer<SignInResponse>() {
        @Override
        public void onChanged(SignInResponse signInResponse) {

        }

    });
}

}

Я уверен, что где-то делаю ошибки, но не знаю где, когда я вхожу в режим отладки, возникает следующая ошибка: E / NativeCrypto: Неизвестная ошибка 1 во время рукопожатия

Этот код выполняется для входа в API,

build.gradle:

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.0'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
    implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
    implementation "androidx.lifecycle:lifecycle-viewmodel:2.2.0"
    implementation "com.squareup.picasso:picasso:2.5.2"
    implementation 'com.squareup.retrofit2:retrofit:2.8.1'
    implementation 'com.squareup.retrofit2:converter-gson:2.8.1'
    //noinspection GradleCompatible
    implementation "com.android.support:recyclerview-v7:28.0.0"
    implementation 'com.squareup.okhttp3:logging-interceptor:4.5.0'
    implementation 'com.google.android.material:material:1.1.0'
    implementation 'com.android.support:design:28.0.0'
    implementation 'de.hdodenhof:circleimageview:3.1.0'

}

если вы обнаружите какую-либо ошибку в коде, дайте мне знать. Спасибо


person Pedro Novais    schedule 15.05.2020    source источник