Android 无法访问构造函数中的SharedReferences
我使用Android 无法访问构造函数中的SharedReferences,android,android-preferences,Android,Android Preferences,我使用SharedReferences存储数据。当我试图从类的构造函数调用数据存储函数时,它显示了一个运行时错误。但是,当我从onCreate()调用函数时,它工作正常。 有什么方法可以从构造函数调用我的数据存储函数吗 package com.examples.storedata; import android.app.Activity; import android.content.SharedPreferences; import android.os.Bundle; import and
SharedReferences
存储数据。当我试图从类的构造函数调用数据存储函数时,它显示了一个运行时错误。但是,当我从onCreate()调用函数时,它工作正常。有什么方法可以从构造函数调用我的数据存储函数吗
package com.examples.storedata;
import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class Activity1 extends Activity
{
EditText editText1, editText2;
TextView textSavedMem1, textSavedMem2;
Button buttonSaveMem1, buttonSaveMem2;
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
textSavedMem1 = (TextView)findViewById(R.id.savedmem1);
textSavedMem2 = (TextView)findViewById(R.id.savedmem2);
editText1 = (EditText)findViewById(R.id.edittext1);
editText2 = (EditText)findViewById(R.id.edittext2);
buttonSaveMem1 = (Button)findViewById(R.id.save_mem1);
buttonSaveMem2 = (Button)findViewById(R.id.save_mem2);
buttonSaveMem1.setOnClickListener(buttonSaveMem1OnClickListener);
buttonSaveMem2.setOnClickListener(buttonSaveMem2OnClickListener);
}
public Activity1()
{
LoadPreferences(); //show error while calling from here
}
Button.OnClickListener buttonSaveMem1OnClickListener
= new Button.OnClickListener(){
public void onClick(View arg0) {
SavePreferences("MEM1", editText1.getText().toString());
LoadPreferences();
}
};
Button.OnClickListener buttonSaveMem2OnClickListener
= new Button.OnClickListener(){
public void onClick(View arg0) {
SavePreferences("MEM2", editText2.getText().toString());
LoadPreferences();
}
};
private void SavePreferences(String key, String value)
{
SharedPreferences sharedPreferences = getPreferences(MODE_APPEND);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString(key, value);
editor.putInt("1",5);
editor.commit();
}
private void LoadPreferences()
{
SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
String strSavedMem1 = sharedPreferences.getString("MEM1", "");
String strSavedMem2 = sharedPreferences.getString("MEM2", "");
textSavedMem1.setText(strSavedMem1);
textSavedMem2.setText(strSavedMem2);
}
}
这是不可能的,因为您可以在已创建的活动中获取
SharedReference
。。在这里,您甚至在构建活动(构造函数)之前就试图获得SharedReference。。要获得共享首选项,您需要活动
你可以将值存储在构造函数中的一些实例变量中,然后将它们放入SharedReference…这是正常的。当您的活动被创建时,例如当构造函数被称为SharePreferences时,对象还不可访问。使用/重写活动的构造函数不是好的做法。阅读了解如何使用活动。在初始化视图或变量之前,您正在尝试访问文本视图:
textSavedMem1.setText(strSavedMem1);
textSavedMem2.setText(strSavedMem2);
从活动构造函数调用LoadPreferences
时,onCreate
尚未调用,这意味着textSavedMem1
和textSavedMem2
尚未初始化且为null
当您从onCreate
调用它时,只要它在以下内容之后,这些变量就会被初始化,并且一切都会按预期工作
setContentView(R.layout.main);
textSavedMem1 = (TextView)findViewById(R.id.savedmem1);
textSavedMem2 = (TextView)findViewById(R.id.savedmem2);
这意味着我们没有从构造函数调用它的选项。我可以使用其他存储方法,比如SQLLite internal storage来解决这个问题。你能帮我举个例子吗?但问题是,当我声明textSavedMem1=(TextView)findViewById(R.id.savedmem1);在构造函数中,它也不起作用。那是因为构造函数不是这样做的地方。您应该只在onCreate
中初始化UI元素。它不起作用的原因是您没有调用setContentView
。现在,虽然从技术上讲,您可以在构造函数中实现这一点,但我希望您还有其他问题,因为在调用onCreate
之前,Android还没有准备好让您开始处理该活动。在Android调用onCreate
之前,您实际上没有可以与之交互的活动。