共享偏好和收藏列表,我不能复制数组

时间:2014-11-29 07:58:05

标签: android

我正在创建一个具有收藏功能的应用程序,用户可以在收藏夹列表中添加项目,我有一个listActivity,显示最喜欢的项目; 我使用此代码在共享偏好中存储喜欢的情况

    boolean[] favorite;
String[] storyTitle;
@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    storyTitle = getResources().getStringArray(R.array.storyTitles);
    favorite = new boolean [storyTitle.length];
    SharedPreferences appPref = PreferenceManager.getDefaultSharedPreferences(this);



    for(int x=0;x<storyTitle.length;x++){
        String str ="subject_"+ String.valueOf(x);

        favorite[x]= appPref.getBoolean(str, false);
    }

}

当用户点击添加到收藏夹时,我有一个方法,通过使tat项目为true将项目添加到收藏夹 现在一切都好;但是当我想用下面的代码显示ListActivity和最喜欢的项目时;如果我的一件物品是假的;意外错误并退出应用程序

    String[] storyTitles;
String[] favorite; 
int c=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
storyTitles=getResources().getStringArray(R.array.storyTitles);
favorite= new String[storyTitles.length];
doFav();
setListAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,favorite));


}
public void doFav(){

int c=0;
SharedPreferences appPref = getSharedPreferences("Preference", MODE_PRIVATE);
for( int i=0 ; i<storyTitles.length;i++){
    String str ="subject_"+String.valueOf(i);
    boolean s = appPref.getBoolean(str,false);
    if(s){
    favorite[c]= storyTitles[i];
    c++;


    }

}

有什么问题? 如果我评论这部分应用程序没有错误

setListAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,favorite));

2 个答案:

答案 0 :(得分:0)

如果真的少于其计数,则最喜欢的数组可能具有空变量。

public void doFav(){

int c=0;
SharedPreferences appPref = getSharedPreferences("Preference", MODE_PRIVATE);
Vector<String>tmp = new Vector<String>();
for( int i=0 ; i<storyTitles.length;i++){
    String str ="subject_"+String.valueOf(i);
    boolean s = appPref.getBoolean(str,false);
    if(s){
    tmp.addElement(storyTitles[i]);
    }
}
favorite = new String[tmp.size()];
tmp.copyInto(favorite);
}

答案 1 :(得分:0)

你应该分享你的堆栈轨道..这可能会对这个问题有所了解..

问题可能是String数组String []最喜欢的;可能为null ..所以要么在适配器中处理null,要么在你的情况下不是自定义适配器,你必须通过其他一些技术处理它...

或问题可能是用户可能没有将任何项目标记为收藏,因此您可能没有在您喜欢的数组中复制项目作为结果null数组,因此再次处理空案例<​​/ p>