【问题标题】:Save change String on restart in Android在 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 提到的共享偏好等一般方式学习这一点更有帮助..(对不起我的英语)

标签: android string save restart


【解决方案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 并不常见。
    • 好的,我会试试你的方法。。谢谢 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-06
    • 1970-01-01
    相关资源
    最近更新 更多