【问题标题】:Saving ArrayList Data after switching Activities切换Activity后保存ArrayList数据
【发布时间】:2017-06-25 18:02:26
【问题描述】:

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

可以通过“onClick”向 ArrayList2 添加 1 个项目

但是当我关闭应用程序时,活动不会保存。

如何保存这些更改?

1.MainActivity:

    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;
}

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);
}}

食谱类:

  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;
  }
}

【问题讨论】:

  • 我没有看到任何试图保存列表的代码...为什么您认为它会保存?尝试写回文件
  • 是的,我知道,因为我不知道如何保存我的列表
  • 在磁盘上打开一个File 对象,并写入它

标签: java android arraylist sharedpreferences


【解决方案1】:

如果您关闭应用程序,未保存的数据将被删除。看看android activity lifecycle。当应用程序关闭时,onDestroy() 被调用。您应该覆盖活动中的 onDestroy() 方法,该方法应该保存更改。

【讨论】:

    猜你喜欢
    • 2021-04-02
    • 1970-01-01
    • 1970-01-01
    • 2017-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多