Я хочу сохранить с общими настройками, но приложение вылетает - PullRequest
0 голосов
/ 23 марта 2020

Я хочу создать приложение, в котором пользователь вводит несколько строк внутри

 <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:orientation="horizontal">

    <com.google.android.material.textfield.TextInputLayout

        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="2"
        android:textColorHint="#ffffff"
        app:errorEnabled="true">

        <com.google.android.material.textfield.TextInputEditText
            android:id="@+id/texto"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:backgroundTint="#4249ff"
            android:hint="@string/BtnO"
            android:textColor="#ffffff" />
    </com.google.android.material.textfield.TextInputLayout>

    <Button
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:onClick="confirmInput"
        android:text="@string/Btns" />

</LinearLayout>

. Поэтому, когда пользователь нажимает кнопку подтверждения, я хочу, чтобы оно было сохранено, но вместо этого происходит сбой приложения в первый раз. Я использую общие настройки и не совсем понимаю их. Я не сохраняю значение для пользователя. Также я знаю, что использовал подсказку, но с моими общими настройками она заменяет подсказку на текст, а не остается такой. , Вот мой java код:

public class MainActivity extends AppCompatActivity {
    private EditText nameInput;
    private EditText homeInput;
    private SharedPreferences prefs;

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

        SharedPreferences prefs= getSharedPreferences("my_data",MODE_PRIVATE);
        String name = prefs.getString("MY_NAME","name");
        String home = prefs.getString("MY_HOME","home");

        ((EditText)findViewById(R.id.texto)).setText(name);
        ((EditText)findViewById(R.id.textd)).setText(home);

        nameInput =(EditText)findViewById(R.id.texto);
        nameInput =(EditText)findViewById(R.id.textd);

    }

    public void copy(View view) {
    }

    public void confirmInput(View view) {
        String name=nameInput.getText().toString();
        SharedPreferences.Editor editor = prefs.edit();
        editor.putString("MY_NAME",name);
        editor.apply();
    }
    public void confirmInput2(View view) {
        String home=homeInput.getText().toString();
        SharedPreferences.Editor editor=prefs.edit();
        editor.putString("MY_HOME",home);
        editor.apply();
    }

}

Ответы [ 2 ]

0 голосов
/ 24 марта 2020

Просто внесите это незначительное изменение:

    prefs= 
         getSharedPreferences("my_data",MODE_PRIVATE);
         String name=prefs.getString("MY_NAME","name");

Вместо

      SharedPreferences prefs= 
       getSharedPreferences("my_data",MODE_PRIVATE);
       String name = prefs.getString("MY_NAME","name");

Вы уже определили объект sharedpref глобально. Вам не нужно снова создавать его.

0 голосов
/ 23 марта 2020

Я думаю, что ошибка в том, что есть два объявления SharedPreferences prefs, одно на уровне метода onCreate и другое в начале класса

Ошибка будет исправлена, просто удалив объявление prefs onCreate и просто используйте переменную, определенную в начале класса, как показано ниже

   @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //Take a look here!
    this.prefs= getSharedPreferences("my_data",MODE_PRIVATE);
    String name = prefs.getString("MY_NAME","name");
    String home = prefs.getString("MY_HOME","home");

    ((EditText)findViewById(R.id.texto)).setText(name);
    ((EditText)findViewById(R.id.textd)).setText(home);

    nameInput =(EditText)findViewById(R.id.texto);
    nameInput =(EditText)findViewById(R.id.textd);

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...