我想以共享偏好保存,但应用程序崩溃
Posted
技术标签:
【中文标题】我想以共享偏好保存,但应用程序崩溃【英文标题】:I want to save with shared preference but the app crashes 【发布时间】:2020-07-04 08:51:57 【问题描述】:我想制作一个基本上用户在 a 中输入一些字符串的应用程序
<LinearLayout
android:layout_
android:layout_
android:layout_gravity="center"
android:orientation="horizontal">
<com.google.android.material.textfield.TextInputLayout
android:layout_
android:layout_
android:layout_weight="2"
android:textColorHint="#ffffff"
app:errorEnabled="true">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/texto"
android:layout_
android:layout_
android:backgroundTint="#4249ff"
android:hint="@string/BtnO"
android:textColor="#ffffff" />
</com.google.android.material.textfield.TextInputLayout>
<Button
android:layout_
android:layout_
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();
【问题讨论】:
您应该首先从 Android logcat 获取堆栈跟踪。这会告诉你哪一行代码导致了崩溃。 【参考方案1】:我认为错误是因为SharedPreferences prefs
有两个声明,一个在onCreate
方法级别,另一个在类的开头
只需删除首选项声明 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);
【讨论】:
【参考方案2】:只需做这个小改动:
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 对象。您不需要再次创建它。
【讨论】:
以上是关于我想以共享偏好保存,但应用程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章