java - android 类之间传递大量数据

标签 java android android-intent android-activity static-variables

我正在开发一个 Android 应用程序,其中有许多 StringString[]intint[]<使用。我必须使用 intent.putExtra() 将此变量从一个 Activity 传递到另一个 Activity 。但在我看来有点恶心。我喜欢优化我的代码。 我会将这些变量用作静态变量。但使用太多静态数据可能会导致内存泄漏。 那么在android的不同activity之间管理随机使用的变量的正确方法是什么? 提前致谢。

最佳答案

事实上,静态变量会导致内存泄漏和NullPointerExceptions

您可以将字符串和字符串数组保存到SharedPreferences,因此这里有一个适合您的解决方案(始终记住对要从 SharedPreferences 获取的数据进行空检查):

用于设置和获取对象的 SharedPreferences 类:

    public class SharedPrefManager {

            public static boolean saveArray(String[] array, String arrayName, Context mContext) {   
                SharedPreferences prefs = mContext.getSharedPreferences("preferencename", 0);  
                SharedPreferences.Editor editor = prefs.edit();  
                editor.putInt(arrayName +"_size", array.length);  
                for(int i=0;i<array.length;i++)  
                    editor.putString(arrayName + "_" + i, array[i]);  
                return editor.commit();  
            } 

            public static String[] loadArray(String arrayName, Context mContext) {  
                SharedPreferences prefs = mContext.getSharedPreferences("preferencename", 0);  
                int size = prefs.getInt(arrayName + "_size", 0);  
                String array[] = new String[size];  
                for(int i=0;i<size;i++)  
                    array[i] = prefs.getString(arrayName + "_" + i, null);  
                return array;  
            }  

            public static void setDefaults(String key, String value, Context context) {
                SharedPreferences prefs =  PreferenceManager.getDefaultSharedPreferences(context);
                SharedPreferences.Editor editor = prefs.edit();
                editor.putString(key, value);
                editor.commit();
            }

            public static String getDefaults(String key, Context context) {
                SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
                return preferences.getString(key, null);
            }

    }

将数组设置为 SharedPreferences: 清除数组并将其更新到共享首选项中。

//save array to shared pref
SharedPrefManager.saveArray(array, "array_tag", getApplicationContext());

从 SharedPreferences 获取数组:

String [] a = SharedPrefManager.loadArray("array_tag", getApplicationContext());

将字符串保存到 SharedPreferences

SharedPrefManager.setDefaults("your_tag", "string_value", context);

从 SharedPreferences 获取字符串

SharedPrefManager.getDefaults("your_tag", getApplicationContext())

关于java - android 类之间传递大量数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23381110/

相关文章:

java - 同步块(synchronized block)是否会阻止其他线程访问对象?

Java:如何从 System.in.read 中排除回车/换行

android - 如何将我的其他 Intent 数据发送到拨号器/电话应用程序并在另一个应用程序服务中接收这些 Intent 数据

android - TranslateAnimation 处于相反位置?

android - 销毁 Android 中的 Activity 问题

android - Activity 过渡无法正常使用背景颜色

java - 执行 JUnit 测试时 ServletContext 无法打开属性文件

java - 当抛出 IOE 时,JUnit 期望 IOException,将测试标记为失败

android - 在微调器对话框中搜索 View

java - 在没有 Activity 的情况下运行 IntentService