Использование Livedata и проблемы с отображением результата MutableLiveData <Float> - PullRequest
0 голосов
/ 14 апреля 2019

Я просто тестирую ViewModel и LiveData компонентов Android Architechture. У меня есть это базовое действие с одним EditText для получения числа от пользователя, и при нажатии кнопки Convert текстовое представление должно дать результат, умноженный на 0,87. Например, когда я помещаю 100 в EditText и нажимаю кнопку «Преобразовать», это должно дать результат 87. Но когда я нажимаю кнопку «Преобразовать», Textview дает значение «android.arch.lifecycle.MutableLiveData@eb84a7b». И когда я поворачиваю экран, результат становится 87. Не могли бы вы взглянуть на мой код и сказать мне, где я должен пересмотреть код, чтобы результат дал число, когда я нажимаю кнопку Преобразовать?

ViewModelLiveDataActivity.java:

public class ViewModelLiveDataActivity extends AppCompatActivity {

private ViewModel2 mViewModel;

private EditText mEditText;
private TextView mTextView;
private Button mButton;

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

    mViewModel = ViewModelProviders.of(this).get(ViewModel2.class);

    mEditText = (EditText) findViewById(R.id.livedata_editText);
    mTextView = (TextView) findViewById(R.id.livedata_textView);
    mButton = (Button) findViewById(R.id.livedata_button);

    final Observer<Float> resultObserver = new Observer<Float>() {
        @Override
        public void onChanged(@Nullable final Float result) {
            mTextView.setText(result.toString());

        }
    };

    mViewModel.getResult().observe(this, resultObserver);

    mButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            //Doing the calculations using ViewModel class
            String dollarText = mEditText.getText().toString();
            mViewModel.setAmount(dollarText);
            mTextView.setText(mViewModel.getResult().toString());
        }
    });



}
}

ViewModel2.java:

public class ViewModel2 extends ViewModel {

private static final float EURO_DOLLAR_EXCHANGE_RATE = 0.87f;
private String dollarString = ""; //the value of UI EditText
private MutableLiveData<Float> result = new MutableLiveData<>();

public void setAmount(String value) {
    this.dollarString = value;
    result.setValue(Float.valueOf(dollarString) * EURO_DOLLAR_EXCHANGE_RATE);
}

public MutableLiveData<Float> getResult() {
    return result;
}
}

1 Ответ

0 голосов
/ 14 апреля 2019

Используйте getValue () вместо toString ()

mTextView.setText(mViewModel.getResult().getValue());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...