【发布时间】:2016-01-04 13:33:51
【问题描述】:
我为安卓开发了一个应用程序。
我有很多EditText 类型的变量。我想使用Button 来保存用户输入的数据。当我尝试将每个EditText 一个一个放入时,问题就开始了。
所以我考虑使用ArrayList。我读到我不能将ArrayList 直接放入SharedPreferences。但是哪种方式更好呢?使用Hash,可序列化还是一个一个?我是初学者,所以我不知道哪种方式更好 - 这意味着更易于使用但更长。
在这种情况下,我尝试使用一个变量(仅“m”),但是当我单击按钮保存它时,它会从 app.
如何改进此代码以使其正常工作?
这是代码:
public class MainActivity extends ActionBarActivity {
public static final String MY_PREFS_NAME = "MyPrefsFile";
EditText m,m1,m2,m3,m00,m11,m22,m33;
Button button10;
SharedPreferences sharedPreferences;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final EditText m = (EditText) findViewById(R.id.message);
final EditText m1 = (EditText) findViewById(R.id.message1);
final EditText m2 = (EditText) findViewById(R.id.message2);
final EditText m3 = (EditText) findViewById(R.id.message3);
final EditText m00 = (EditText) findViewById(R.id.message00);
final EditText m11 = (EditText) findViewById(R.id.message11);
final EditText m22 = (EditText) findViewById(R.id.message22);
final EditText m33 = (EditText) findViewById(R.id.message33);
List<EditText> messageLIST = new ArrayList<EditText>(){{
add(m);
add(m1);
add(m2);
add(m3);
add(m00);
add(m11);
add(m22);
add(m33);
}};
for(int i = 0; i < messageLIST.size(); i++)
{
messageLIST.get(i);
}
sharedPreferences = getApplication().getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE);
String numberValue = sharedPreferences.getString("numberValue", null);
m.setText(numberValue);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
public void saveButton(View view)
{
Intent intent = new Intent(this,MainActivity.class);
m.getText().toString();
SharedPreferences sharedPreferences = getApplication().getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("numberValue", m.getText().toString());
editor.commit();
startActivity(intent);
}
}
【问题讨论】:
-
您确实已经声明了 EditText:EditText m,m1,m2,m3,m00,m11,m22,m33;从带有 findbyid 的行中删除 - 最后的 EditText。
-
@SergeyNeskoromny 感谢您的回复。但是当我删除这个时,我的 messageLIST 现在是错误的。带有 add(m) 和下一个的行是错误的:'变量“m”是从内部类中访问的,需要声明为 final。'
-
final EditText m = (EditText) findViewById(R.id.message);应该是m = (EditText) findViewById(R.id.message);,因为您在顶部声明了您的EditText。 -
删除
和 - 你复制了声明。编辑文本 m,m1,m2,m3,m00,m11,m22,m33; - 在您活动的所有范围内可见! -
@SergeyNeskoromny 谢谢。我没有看到这个错误。现在,它没有错误,但我仍然在考虑选择哪种方式保存此数据信息 SharedPreferences by button。
标签: java android arraylist sharedpreferences