簡體   English   中英

Android Studio SharedPreferences和內部存儲不起作用

[英]Android Studio SharedPreferences and Internal Storage not working

我正在構建一個反饋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:****錯誤:未設置en CUST_POLICY_DIRS,使用默認值02-12 12:58:38.510 10593-10593 / com.example.etq E / AndroidRuntime:致命例外:主進程:com.example.etq, PID:10593 java.lang.NullPointerException:嘗試在com.example.etq.MainActivity $ 1.onClick(MainActivity.java)上的空對象引用上調用虛擬方法'java.lang.CharSequence android.widget.RadioButton.getText()' :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。 com處com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:964)處java.lang.reflect.Method.invoke(Method.java:372)處的reflect.Method.invoke(本機方法)。 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);

關於崩潰報告,這似乎是一個空指針異常。 您試圖在RadioButton對象上調用getText()方法,但是radioButton視圖可能尚未初始化。 例如,您可能忘記了調用radioButton = findViewById(R.id.radio_button_id);。 (這是語法,請使用您的RadioButton變量名稱和ID)

根據您的崩潰日志

Java.lang.NullPointerException:嘗試調用虛擬方法'java.lang.CharSequence android.widget.RadioButton.getText()'

您正在嘗試從null單選按鈕獲取文本

您的單選按鈕為空,這是導致崩潰的原因

檢查您的布局文件和活動,確保單選按鈕位於xml中,並且在活動中您通過findViewById將其鏈接為xml中具有相同的ID

滿足所有需求后,建議您從要執行操作的位置調用此方法

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();


} 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM