在 Android 中重新启动时保存更改字符串
Posted
技术标签:
【中文标题】在 Android 中重新启动时保存更改字符串【英文标题】:Save change String on restart in Android 【发布时间】:2016-07-03 10:48:38 【问题描述】:我正在构建一个应用程序,其中有一个带有字符串和按钮的数组列表。 当我按下按钮时,它会从列表中删除字符串(使用 string.remove)并将其显示在另一个活动中.. 问题是当我关闭应用程序并重新打开它时,一切都会恢复正常。如何保存所做的更改?
代码如下:
public class TasksActivity extends AppCompatActivity
private static ArrayList<String> list;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_tasks);
final Button tasksbtn = (Button) findViewById(R.id.btnfortasks);
Button checkTask = (Button) findViewById(R.id.remove_case);
final TextView tasksView = (TextView) findViewById(R.id.tasks_textView);
final ArrayList<String> tasks = new ArrayList<String>();
tasks.add("one");
tasks.add("two");
tasks.add("three");
tasks.add("four");
tasks.add("five");
tasks.add("six");
Collections.shuffle(tasks);
tasksView.setText(tasks.get(0));
assert tasksbtn != null;
tasksbtn.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
Collections.shuffle(tasks);
tasksView.setText(tasks.get(0));
);
checkTask.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
Intent intent = new Intent(TasksActivity.this, CompletedTasks.class);
intent.putExtra("completedTasks", tasks.get(0));
tasks.remove(tasks.get(0));
startActivity(intent);
);
还有第二个活动
public class CompletedTasks extends AppCompatActivity
String completedTasks;
Global_Variable object = new Global_Variable();
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_completed_tasks);
TextView completedTasksView = (TextView) findViewById(R.id.completed_tasks);
Intent intent = getIntent();
completedTasks = intent.getExtras().getString("completedTasks");
object.tasks.add(completedTasks + "\n");
String a = "";
for (int i = 0; i < object.tasks.size(); i++)
a += object.tasks.get (i);
completedTasksView.setText(a);
Log.d("a", "a---------" + a);
【问题讨论】:
感谢您的反对票.. 真的很有帮助.. :/ 这可能是因为您没有提供任何代码。如果不看代码,通常很难帮助或理解您尝试实现的目标。 好的,我将提供我的代码,但我认为以@babadaba 提到的共享偏好等一般方式学习这一点更有帮助..(对不起我的英语) 【参考方案1】:您可能应该尝试序列化。请看下面的示例。
public class SerializationDemo extends Activity
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Person person = new Person();
person.setName("CoderzHeaven");
person.setAddress("CoderzHeaven India");
person.setNumber("1234567890");
//save the object
saveObject(person);
// Get the Object
Person person1 = (Person)loadSerializedObject(new File("/sdcard/save_object.bin")); //get the serialized object from the sdcard and caste it into the Person class.
System.out.println("Name : " + person1.getName());
public void saveObject(Person p)
try
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File("/sdcard/save_object.bin"))); //Select where you wish to save the file...
oos.writeObject(p); // write the class as an 'object'
oos.flush(); // flush the stream to insure all of the information was written to 'save_object.bin'
oos.close();// close the stream
catch(Exception ex)
Log.v("Serialization Save Error : ",ex.getMessage());
ex.printStackTrace();
public Object loadSerializedObject(File f)
try
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(f));
Object o = ois.readObject();
return o;
catch(Exception ex)
Log.v("Serialization Read Error : ",ex.getMessage());
ex.printStackTrace();
return null;
Person implements Serializable //Added implements Serializable
String name="";
private String number="";
private String address="";
private static final long serialVersionUID = 46543445;
public void setName(String name)
this.name = name;
public void setNumber(String number)
this.number = number;
public void setAddress(String address)
this.address = address;
public String getName()
return name;
public String getNumber()
return number;
public String getAddress()
return address;
【讨论】:
【参考方案2】:您可以尝试将更改保存到 SharedPreferences。然后,当您重新启动您的应用程序时,从您的 ShraredPreferences 中读取更改并将其应用到您的 ListView 或您正在使用的任何东西。
您可以在此处阅读有关 SharedPreferences 的更多信息:https://developer.android.com/training/basics/data-storage/shared-preferences.html
【讨论】:
所以如果我删除一个字符串,SharedPreferences 会保存列表,这样就不会再看到它了? 是的。您可能应该使用 ListView 或 RecyclerView 来显示您的任务。使用带有 \n 的 TextView 并不常见。 好的,我会试试你的方法。。谢谢 :)以上是关于在 Android 中重新启动时保存更改字符串的主要内容,如果未能解决你的问题,请参考以下文章
保存我的唯一 ID(字符串)并稍后在我重新启动 Java 应用程序时检索它