2011-05-02 84 views
0

我在我的活动中有一个字符串ArrayList,我想将它存储为SharedPreference中的onPause,并在我的onCreate()中检索它,但我无法这样做。Android - sharedPreference不能正常工作?

这里是我的代码 - :

public static ArrayList<String> ignoredTasks; 
public static final String PREF_FILE_NAME = "savedPreferences"; 

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    ignoredTasks = loadBackStates(); 
} 
@Override 
public void onPause() 
{ 
    super.onPause(); 
    Log.e(TAG, "I am pause"); 
    saveState(); 
} 
@Override 
public void onStop() 
{ 
    super.onStop(); 
    Log.e(TAG, "I am stop"); 
    saveState(); 
} 
@Override 
public void onDestroy() 
{ 
    super.onDestroy(); 
    Log.e(TAG, "i am destroy"); 
    saveState(); 
} 

public void saveState() 
{ 
    SharedPreferences spr = getSharedPreferences(PREF_FILE_NAME, Context.MODE_PRIVATE); 
    SharedPreferences.Editor editor = spr.edit(); 
    int size = ignoredTasks.size(); 
    editor.putInt("size", size); 
    for(int k = 0; k < size-1; k++) 
    { 
     editor.putString(k+"4", ignoredTasks.get(k)); 
     editor.commit(); 
    } 

    //editor.commit(); 
} 
public ArrayList<String> loadBackStates() 
{ 
    ArrayList<String> ignoredTask = new ArrayList<String>(); 
    SharedPreferences sp = getSharedPreferences(PREF_FILE_NAME, Context.MODE_PRIVATE); 
    int size = sp.getInt("size", 0); 
    for(int k = 0; k < size-1; k++) 
    { 
     ignoredTask.add(k, sp.getString(k + "4", " ")); 
    } 
    return ignoredTask; 

} 


public void createMenuDialog(final int i, Drawable icon, final String taskName, final String pkgName) 
{ 
    final AlertDialog.Builder menuDialog = new AlertDialog.Builder(this); 
    menuDialog.setIcon(icon); 
    menuDialog.setTitle(taskName); 
menuDialog.setItems(menuItems, new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int which) { 

        /* User clicked so do some stuff */ 
        String[] items = menuItems; 

        if(items[which].equals("Ignore")) 
        { 
         HashMap<String,String> newItem = new HashMap<String,String>(); 
         newItem.put("Process", pkgName); 
         newItem.put("Name", taskName); 
         ignored.add(newItem); 
         ignoredTasks.add(pkgName); 
        }            
       } 
      }); 
    menuDialog.show(); 
} 

问题是,当我使用返回键退出我的应用程序,然后,如果我再重新启动它,我可以看到sharedpreference但是当我强制关闭我的应用程序,然后它不见了。有什么问题?

请帮忙!!

感谢

+0

嗨,我想当你强制关闭onPause方法将不会被调用...确保它是否被称为... – Dinash 2011-05-02 11:33:53

+0

是的,你是正确的onPause()没有得到一个强制关闭的呼吁....任何解决方案这个问题? – Varundroid 2011-05-02 11:38:26

+0

你可以尝试在onDestroy方法... – Dinash 2011-05-02 11:41:06

回答

0

试试这个..

SharedPreferences spr = activity.getSharedPreferences("SPR", Context.MODE_PRIVATE); 

尝试这一点 - 也许这将帮助..

for(int k = 0; k < size-1; k++) 
{ 
    editor.putString(k+"4", ignoredTasks.get(k)); 

} 
editor.commit(); 
+0

@CapDroid问题仍然存在:( – Varundroid 2011-05-02 11:32:46

+0

请参阅编辑答案并尝试它 – 2011-05-02 11:36:54

+0

@Capdroid其实问题是,每当我强制关闭我的应用程序,onPause没有得到一个调用,这就是为什么它无法保存我的应用程序的状态。为什么它没有接到电话以及如何解决这个问题? – Varundroid 2011-05-02 11:42:26

1

试着用的getSharedPreferences代替的getPreferences

编辑:我也看到了你已经张贴在注释中logcat的线。当你强迫关闭时,Android向你的应用发送一个SIGKILL信号,所以我认为你什么都做不了。读这个。 http://en.wikipedia.org/wiki/SIGKILL

+0

@Rafaesp仍然无法正常工作。在SharedPreference中关闭evrything后关闭。 :( – Varundroid 2011-05-02 11:27:27

+0

也许当你强迫关闭,活动不会暂停。使用Logcat来查看它是否正在保存。 – Rafaesp 2011-05-02 11:29:56

+0

是啊right onPause()没有得到强制关闭的呼叫....?wierd !! – Varundroid 2011-05-02 11:37:06

0

强行关闭终止您的应用程序瞬间,没有任何其他的代码被调用。这并不奇怪,这是事情的方式。

听起来好像你已经记录了onPause()当你按下Back时被调用。在移动到另一个活动或应用程序时,您还应该检查是否调用了onPause()。例如,长按主页按钮并选择另一个应用程序,您应该看到您的onPause()日志。

这应该足够你的目的。为什么你认为你需要onPause()在强制关闭后调用(这是不可能的)?