从数组加载和保存字符串的问题

Posted

技术标签:

【中文标题】从数组加载和保存字符串的问题【英文标题】:Problems with loading and saving strings from an array 【发布时间】:2013-05-07 17:04:56 【问题描述】:

所以我已经对这个主题进行了研究,并且有很多方法可以对数组中的字符串进行收藏。有一个收藏按钮,用户单击该按钮以收藏将在数组中的特定显示字符串。我在这个类中提出了一个加载数组和保存数组的方法。我在 loadArray(favorites, this);和 saveArray(favorites, "favorites", this);它似乎没有将 loadArray 或 saveArray 识别为一种方法。非常感谢!

public class Base extends Activity implements OnClickListener 

    Button home, search, moreapps, fav;
    TextView display;
    String [] favorites;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(starting.rt.R.layout.relationship);
        home = (Button) findViewById(starting.rt.R.id.Home);
        search = (Button) findViewById(starting.rt.R.id.search);
        moreapps = (Button) findViewById(starting.rt.R.id.moreapps);
        fav = (Button) findViewById(starting.rt.R.id.fav);
        display = (TextView) findViewById(starting.rt.R.id.tvResults);
        fav.setOnClickListener(new View.OnClickListener() 

        public void onClick(View v) 
                display.getText();
                loadArray(favorites, this);
                favorites = Arrays.copyOf(favorites, favorites.length+1);
                favorites[favorites.length]=display.getText().toString();
                saveArray(favorites, "favorites", this);

            
        ); 
    

    public 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 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 void onClick(View arg0) 
        // TODO Auto-generated method stub

    

【问题讨论】:

【参考方案1】:

那是因为 this 在那个范围内是 onClickListener(),你可以使用 Base.this 来引用 Activity(上下文)。

我不建议使用 getApplicationContext(),文档说:

这通常只应在您需要一个上下文的情况下使用 生命周期与当前上下文是分开的,它与 进程的生命周期而不是当前组件的生命周期。

【讨论】:

适用于 SaveArray 不加载数组 您还可以从 loadArray()saveArray() 中删除 Context 参数并调用 getSharedPreferences("preferencename", 0);,因为它们是 Activity 类的一部分,该类已经是一个上下文。【参考方案2】:

你在打电话

 loadArray(String[], View.OnClickListener)

而不是

 loadarray(String, Context)

"favorites" 是字符串数组,不是字符串

“this”指的是 View.OnclickListener 而不是 Context

您可以使用“getApplicationContext()”获取上下文

【讨论】:

以上是关于从数组加载和保存字符串的问题的主要内容,如果未能解决你的问题,请参考以下文章

从 svg 标记字符串重新加载自定义工具

iOS将UIViews数组保存到文件然后重新加载

保存数据的最佳方法

寻找访问字符串的猫鼬数组

从 KeyChain 保存和加载 |斯威夫特 [重复]

从字典数组中获取元素并将键保存为字符串,将值保存为字符串