Android Studio SharedPreferences и внутреннее хранилище не работают

1

Я создаю приложение Android с обратной связью, и мне нужно сохранить входные данные, но общие настройки вызывают сбой, а внутреннее хранилище не работает

  // Shared Preferences Code // Crashes
     final String radioValues =
                    ((RadioButton)findViewById(rGrop.getCheckedRadioButtonId()))
                            .getText().toString();
           final String nameValue = Ename.getText().toString();
           final String cityValue = Ecity.getText().toString();
           final String phoneNum = Ephone.getText().toString();
           final String comments = ans.getText().toString();
           final float rbarValue = rBar.getNumStars();
            final float rbarValue2 = rBar2.getNumStars();
            final float rbarValue3 = rBar3.getNumStars();

            SharedPreferences settings = getApplicationContext().getSharedPreferences("Visitors Data",MODE_PRIVATE );
            SharedPreferences.Editor editor = settings.edit();

            editor.putString("Visitor Name: ",nameValue);
            editor.putString("Visitor City: ",cityValue);
            editor.putString("visitor Phone Number: ",phoneNum);
            editor.putString("Radio Group Choice: ",radioValues);
            editor.putString("Comments: ",comments );
            editor.putFloat("rating bar : ", rbarValue);
            editor.putFloat("rating bar 2: ", rbarValue2);
            editor.putFloat("rating bar 3: ", rbarValue3);
            // save changes in SharedPreferences
            editor.apply();

и следующий код внутреннего хранения

try{
            FileOutputStream fileout=openFileOutput("EnginesTechDATA.txt", MODE_PRIVATE);
            OutputStreamWriter outputWriter=new OutputStreamWriter(fileout);

            outputWriter.write(Ecity.getText().toString());
            outputWriter.write(Ename.getText().toString());
            outputWriter.write(Ephone.getText().toString());
outputWriter.write(ans.getText().toString());

outputWriter.write(rBar.getNumStars());
outputWriter.write(rBar2.getNumStars());
outputWriter.write(rBar3.getNumStars());

final String radioValues =
        ((RadioButton)findViewById(rGrop.getCheckedRadioButtonId()))
                .getText().toString();
outputWriter.write(radioValues);

outputWriter.close(); } catch (Exception e) {
e.printStackTrace(); }

Я надеюсь, что кто-то может помочь мне нужно сохранить эти данные любым способом, и мне нужно это к завтрашнему дню

Это ошибки

02-12 12: 58: 25.170 10593-10593/? E/CfgFilePolicy: **** ОШИБКА: env CUST_POLICY_DIRS не задано, используйте значение по умолчанию 02-12 12: 58: 38.510 10593-10593/com.example.etq E/AndroidRuntime: ОСНОВНОЕ ИСКЛЮЧЕНИЕ: основной процесс: com.example.etq, PID: 10593 java.lang.NullPointerException: попытка вызвать виртуальный метод 'java.lang.CharSequence android.widget.RadioButton.getText()' для ссылки на пустой объект в com.example.etq.MainActivity $ 1.onClick(MainActivity.java): 154) на android.view.View.performClick(View.java:4792) на android.view.View $ PerformClick.run(View.java:19938) на android.os.Handler.handleCallback(Handler.java:739) на android.os.Handler.dispatchMessage(Handler.java:95) на android.os.Looper.loop(Looper.java:135) на android.app.ActivityThread.main(ActivityThread.java:5601) на java.lang. refle.Method.invoke (собственный метод) на java.lang.reflect.Method.invoke(Method.java:372) на com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:964) на com. android.internal.os.ZygoteInit.main(ZygoteInit.java:759)

Код группы радио XML

<RadioGroup
        android:id="@+id/Rgrp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"

        >

        <RadioButton
            android:id="@+id/rBtn1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:layout_gravity="end"
            android:fontFamily="@font/lalezar"
            />

        <RadioButton
            android:id="@+id/rBtn2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:fontFamily="@font/lalezar"
            />

        <RadioButton
            android:id="@+id/rBtn3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:fontFamily="@font/lalezar"
            />
    </RadioGroup>

и это строка в файле Java

        final RadioGroup rGrop = findViewById(R.id.Rgrp);
Теги:
android-studio
sharedpreferences
android-internal-storage

2 ответа

1

Согласно вашему журналу аварии

Java.lang.NullPointerException: попытка вызвать виртуальный метод 'java.lang.CharSequence android.widget.RadioButton.getText()'

Вы пытаетесь получить текст с нулевой переключателем

Ваш переключатель выключен, и это является причиной сбоя

Проверьте файл макета и активность, убедитесь, что переключатель включен в xml, и в действии вы связываете его через findViewById с тем же идентификатором, который указан в xml.

После получения всех ваших потребностей, я предлагаю вам вызвать этот метод, откуда вы хотите выполнить действие

public void saveCheckedBox()
{

//rGrop.getCheckedRadioButtonId() returns the id of the RadioButton(or -1 if no RadioButtons are checked) that is checked in the Radiogroup
if(rGrop.getCheckedRadioButtonId()==-1)
{
Toast.makeText(context, "All checkbox unchecked", Toast.LENGTH_SHORT).show();
return;
// if no radio button checked simply toast and return
}

     final String radioValues =
                    ((RadioButton)findViewById(rGrop.getCheckedRadioButtonId()))
                            .getText().toString();
           final String nameValue = Ename.getText().toString();
           final String cityValue = Ecity.getText().toString();
           final String phoneNum = Ephone.getText().toString();
           final String comments = ans.getText().toString();
           final float rbarValue = rBar.getNumStars();
            final float rbarValue2 = rBar2.getNumStars();
            final float rbarValue3 = rBar3.getNumStars();

            SharedPreferences settings = getApplicationContext().getSharedPreferences("Visitors Data",MODE_PRIVATE );
            SharedPreferences.Editor editor = settings.edit();

            editor.putString("Visitor Name: ",nameValue);
            editor.putString("Visitor City: ",cityValue);
            editor.putString("visitor Phone Number: ",phoneNum);
            editor.putString("Radio Group Choice: ",radioValues);
            editor.putString("Comments: ",comments );
            editor.putFloat("rating bar : ", rbarValue);
            editor.putFloat("rating bar 2: ", rbarValue2);
            editor.putFloat("rating bar 3: ", rbarValue3);
            // save changes in SharedPreferences
            editor.apply();


} 
  • 0
    final String radioValues = ((RadioButton) findViewById (rGrop.getCheckedRadioButtonId ())). getText (). toString (); > это код радио группы
  • 0
    rGrop.getCheckedRadioButtonId () возвращает идентификатор проверенного идентификатора радиокнопки в «rGrop», поэтому, если какая-либо радиогруппа не проверена изначально, она будет нулевой. Для более подробной информации, пожалуйста, поделитесь инициализацией "rGrop" и кодом XML.
Показать ещё 4 комментария
1

Что касается вашего отчета о сбое, он выглядит как исключение нулевого указателя. Вы пытались вызвать метод getText() для объекта RadioButton, но представление radioButton, вероятно, не было инициализировано. например, вы могли забыть вызвать radioButton = findViewById (R.id.radio_button_id); (это синтаксис, используйте имя и идентификатор переменной RadioButton)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню