Java 切换活动后保存ArrayList数据

Java 切换活动后保存ArrayList数据,java,android,arraylist,sharedpreferences,Java,Android,Arraylist,Sharedpreferences,我在两个活动中有两个ArrayList。第一个ArrayList包含大约1000项(保存在JSON文件中),第二个ArrayList包含0项 可以使用“onClick”将1项添加到ArrayList 2中 但当我关闭应用程序时,活动将无法保存 如何保存这些更改 1.1主要活动: public class MainActivity extends AppCompatActivity { static ArrayList<Recipe> recipeList = new Arr

我在两个活动中有两个ArrayList。第一个ArrayList包含大约1000项(保存在JSON文件中),第二个ArrayList包含0项

可以使用“onClick”将1项添加到ArrayList 2中

但当我关闭应用程序时,活动将无法保存

如何保存这些更改

1.1主要活动:

    public class MainActivity extends AppCompatActivity {

static ArrayList<Recipe> recipeList = new ArrayList();
public class ObjList{
    public ArrayList<String> recipeList = new ArrayList<>();
}
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mListView = (ListView) findViewById(R.id.recipe_list_view);
    recipeList = Recipe.getRecipesFromFile("recipes.json", this);
    String[] listItems = new String[recipeList.size()];
    for (int i = 0; i < recipeList.size(); i++) {
        Recipe recipe = recipeList.get(i);
        listItems[i] = recipe.title;
    }


    final RecipeAdapter adapter = new RecipeAdapter(this, recipeList);
    mListView.setAdapter(adapter);
    final Context context = this;
    mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Recipe selectedRecipe = recipeList.get(position);
            recipeList.remove(selectedRecipe);
            recipeList2.add(selectedRecipe);
            adapter.notifyDataSetChanged();

    }
    });
};
public void test_onClick(View view) {
    Intent intent = new Intent(MainActivity.this, TestActivity.class);
    startActivity(intent);
}
private ListView mListView;
}
public类MainActivity扩展了AppCompatActivity{
静态ArrayList recipeList=新ArrayList();
公共类对象列表{
public ArrayList recipeList=新建ArrayList();
}
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mListView=(ListView)findViewById(R.id.recipe\u list\u视图);
recipeList=Recipe.getRecipesFromFile(“recipes.json”,this);
String[]listItems=新字符串[recipeList.size()];
对于(int i=0;i
2.活动:

public class TestActivity extends AppCompatActivity {
 static ArrayList<Recipe> recipeList2 = new ArrayList<>();


   public void onCreate(Bundle savedInstanceState) {
    ListView mListView;
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_test);
    mListView = (ListView) findViewById(R.id.testlist2);
    final RecipeAdapter adapter = new RecipeAdapter (this, recipeList2);
    mListView.setAdapter(adapter);
    final Context context = this;
    mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Recipe selectedRecipe = recipeList2.get(position);
            recipeList2.remove(selectedRecipe);
            recipeList.add(selectedRecipe);
            adapter.notifyDataSetChanged();
        }});}
public void test2_onClick(View view) {
    Intent intent = new Intent(TestActivity.this, MainActivity.class);
    startActivity(intent);
}}
公共类测试活动扩展了AppCompative活动{
静态ArrayList recipeList2=新ArrayList();
创建时的公共void(Bundle savedInstanceState){
列表视图;
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_测试);
mListView=(ListView)findViewById(R.id.testlist2);
最终RecipeAdapter适配器=新RecipeAdapter(此为recipeList2);
mListView.setAdapter(适配器);
最终上下文=此;
mListView.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
Recipe selectedRecipe=recipeList2.get(位置);
recipeList2.移除(selectedRecipe);
recipeList.add(selectedRecipe);
adapter.notifyDataSetChanged();
}});}
公共无效测试2_onClick(视图){
意向意向=新意向(TestActivity.this,MainActivity.class);
星触觉(意向);
}}
Recipe.class:

  public static ArrayList<Recipe> getRecipesFromFile(String filename, Context context){
final ArrayList<Recipe> recipeList = new ArrayList<>();


try {
  // Load data
  String jsonString = loadJsonFromAsset("recipes.json", context);
  JSONObject json = new JSONObject(jsonString);
  JSONArray recipes = json.getJSONArray("recipes");

  // Get Recipe objects from data
  for(int i = 0; i < recipes.length(); i++){
    Recipe recipe = new Recipe();

    recipe.title = recipes.getJSONObject(i).getString("title");


    recipeList.add(recipe);
  }
} catch (JSONException e) {
  e.printStackTrace();
}

return recipeList;  }
  private static String loadJsonFromAsset(String filename, Context context) {
String json = null;

try {
  InputStream is = context.getAssets().open(filename);
  int size = is.available();
  byte[] buffer = new byte[size];
  is.read(buffer);
  is.close();
  json = new String(buffer, "UTF-8");
}
catch (java.io.IOException ex) {
  ex.printStackTrace();
  return null;
}

return json;
  }
}
publicstaticarraylistgetrecipesfromfile(字符串文件名,上下文){
最终ArrayList recipeList=新ArrayList();
试一试{
//加载数据
字符串jsonString=loadJsonFromAsset(“recipes.json”,上下文);
JSONObject json=新的JSONObject(jsonString);
JSONArray recipes=json.getJSONArray(“recipes”);
//从数据中获取配方对象
对于(int i=0;i
如果关闭应用程序,未保存的数据将被删除。看一看。当应用程序关闭时,将调用
onDestroy()
。您应该在activity中重写onDestroy()方法,该方法用于保存更改。

我没有看到任何试图保存列表的代码。。。你为什么认为这样可以省钱?试着写回一个文件是的,我知道,因为我不知道如何保存我的列表在磁盘上打开一个
文件
对象,然后写入它