【问题标题】:Retrieving shared prefrences values in another activity在另一个活动中检索共享偏好值
【发布时间】:2011-12-30 16:18:20
【问题描述】:

谁能告诉我哪里错了,因为它只是一个简单的过程,但它如何不检索我无法理解的值并对字符串变量进行条件检查...

活动 A:-

EditText e = (EditText) findViewById(R.id.editText1);
        EditText e1 = (EditText) findViewById(R.id.editText2);
        EditText e2 = (EditText) findViewById(R.id.editText3);
        EditText e3 = (EditText) findViewById(R.id.editText4);
        EditText e4 = (EditText) findViewById(R.id.editText5);
        EditText e5 = (EditText) findViewById(R.id.editText6);
        EditText e6 = (EditText) findViewById(R.id.editText7);

        SharedPreferences myPrefs = getSharedPreferences("myPrefs", Context.MODE_WORLD_READABLE);
        SharedPreferences.Editor editor = myPrefs.edit();
        editor.putString("text", e.getText().toString());
        SharedPreferences myPrefs1 = getSharedPreferences("myPrefs1", Context.MODE_WORLD_READABLE);
        SharedPreferences.Editor editor1 = myPrefs1.edit();
        editor1.putString("text1", e1.getText().toString());

    SharedPreferences myPrefs2 = getSharedPreferences("myPrefs2", Context.MODE_WORLD_READABLE);
        SharedPreferences.Editor editor2 = myPrefs.edit();
        editor2.putString("text2", e2.getText().toString());

SharedPreferences myPrefs3 = getSharedPreferences("myPrefs3", Context.MODE_WORLD_READABLE);
        SharedPreferences.Editor editor3 = myPrefs3.edit();
        editor3.putString("text3", e3.getText().toString());

SharedPreferences myPrefs4 = getSharedPreferences("myPrefs4", Context.MODE_WORLD_READABLE);
        SharedPreferences.Editor editor4 = myPrefs4.edit();
        editor4.putString("text4", e4.getText().toString());

        SharedPreferences myPrefs5 = getSharedPreferences("myPrefs5", Context.MODE_WORLD_READABLE);
        SharedPreferences.Editor editor5 = myPrefs5.edit();
        editor5.putString("text5", e5.getText().toString());

        SharedPreferences myPrefs6 = getSharedPreferences("myPrefs6", Context.MODE_WORLD_READABLE);
        SharedPreferences.Editor editor6 = myPrefs6.edit();
        editor6.putString("text6", e6.getText().toString());

活动 B:-在此活动中,我正在访问值并进行条件检查,但只有 else 条件在两种情况下都被执行

public class CheckActivity extends Activity{
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        SharedPreferences myPrefs = getSharedPreferences("myPrefs",Context.MODE_PRIVATE); 
        String restoredText = myPrefs.getString("text", "");
        SharedPreferences myPrefs1 = getSharedPreferences("myPrefs1",Context.MODE_PRIVATE); 
        String restoredText1 = myPrefs1.getString("text1", "");
        SharedPreferences myPrefs2 = getSharedPreferences("myPrefs2",Context.MODE_PRIVATE); 
        String restoredText2 =myPrefs2.getString("text2", "");
        SharedPreferences myPrefs3 = getSharedPreferences("myPrefs3",Context.MODE_PRIVATE); 
        String restoredText3 =myPrefs3.getString("text3", "");
        SharedPreferences myPrefs4 = getSharedPreferences("myPrefs4",Context.MODE_PRIVATE); 
        String restoredText4 = myPrefs4.getString("text4", "");
        SharedPreferences myPrefs5 = getSharedPreferences("myPrefs5",Context.MODE_PRIVATE);  
        String restoredText5 = myPrefs5.getString("text5", "");
        SharedPreferences myPrefs6 = getSharedPreferences("myPrefs6",Context.MODE_PRIVATE); 
        String restoredText6 = myPrefs6.getString("text6", "");
    Intent i1 = new Intent();
    if((restoredText.length()>1)&&(restoredText1.length()>1)&&(restoredText2.length()>1)&&(restoredText3.length()>1)&&(restoredText4.length()>1)&&(restoredText5.length()>1)&&(restoredText6.length()>1))
        {
             i1.setClass(this,ShpoonkleActivity.class);
        }
        //if((restoredText.length()==0)||(restoredText1.length()==0)||(restoredText2.length()==0)||(restoredText3.length()==0)||(restoredText4.length()==0)||(restoredText5.length()==0)||(restoredText6.length()==0))
    else    
    {
            i1.setClass(this,Test.class);
    }
        startActivity(i1);
        finish();
    }
}

【问题讨论】:

    标签: android android-activity sharedpreferences if-statement


    【解决方案1】:

    您应该使用editor.commit(); 提交您的数据

    注意:在你的情况下,不需要使用很多 SharedPreferences 的实例,你只需要一个实例,然后将所有字符串放入其中,然后提交

    【讨论】:

    • thnx 因为我纠正了这个错误,但我的 else 条件仍然被执行..
    • +1(对于“很多实例”)我认为他根本不需要 SharedPreferences,但他不知道如何在意图中使用额外内容:) ...
    • @Selvin:我不知道他是否需要在重新启动应用程序后获取这些字符串,或者只是将其传递给另一个活动,在这种情况下,正如你所说,他只需要使用 Extras意图:)
    • @Gaurav:我认为问题在于您使用的是可读模式,请尝试在您的两个活动中使用 : 0 修改它并尝试。并确保在您的 editText 中输入了长度为 2 个或更多字符的字符串(或者只是测试 str.length()>0 )
    • 我应该清除一件事@selvin,我正在进行条件检查的活动是我的主要活动,否则我会使用 getIntent.getExtras()。实际上我的应用程序有一个非常复杂的结构,其中首先,我的活动正在检查是否我的表单 edittext 是否具有值,如果是,那么它将启动另一个活动,如果 dnt 表示共享首选项字符串为空,则打开该表单活动...thanx..
    【解决方案2】:

    你应该使用

    editor.commit();
    

    为了保留您的更改。而且,您不需要使用不同的文件来存储各种字符串,您可以将所有字符串存储在同一个共享首选项文件中。

    【讨论】:

    • thnx 因为我纠正了这个错误,但我的 else 条件仍然被执行..
    • 您确定,您为每个 editText 提供了一个有效的输入,即每个 editText 中至少有 2 个字符? ,我想,你应该检查字符串长度是否大于0,而不是1,但我也可能错了。
    【解决方案3】:

    实际上保存edittext的文本会造成歧义,因此执行得不好,所以我这样做如下所示:-

    活动 B:-

    protected void onPause() {
            EditText ed = (EditText)findViewById(R.id.editText1);
            EditText ed1 = (EditText)findViewById(R.id.editText2);
            EditText ed2 = (EditText)findViewById(R.id.editText3);
            EditText ed3 = (EditText)findViewById(R.id.editText4);
            EditText ed4 = (EditText)findViewById(R.id.editText5);
            EditText ed5 = (EditText)findViewById(R.id.editText6);
            EditText ed6 = (EditText)findViewById(R.id.editText7);
    
            super.onPause();
            SharedPreferences myPrefs = getSharedPreferences("myPrefs", Context.MODE_WORLD_READABLE);
            SharedPreferences.Editor editor = myPrefs.edit();
            editor.putString("text", ed.getText().toString());
            editor.putString("text1", ed1.getText().toString());
            editor.putString("text2", ed2.getText().toString());
            editor.putString("text3", ed3.getText().toString());
            editor.putString("text4", ed4.getText().toString());
            editor.putString("text5", ed5.getText().toString());
            editor.putString("text6", ed6.getText().toString());
            editor.commit();
        }
    

    活动 A:-

    public class CheckActivity extends Activity{
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            SharedPreferences myPrefs = getSharedPreferences("myPrefs",Context.MODE_PRIVATE); 
            String restoredText = myPrefs.getString("text", "");
            String restoredText1 = myPrefs.getString("text1", "");
            String restoredText2 =myPrefs.getString("text2", "");
            String restoredText3 =myPrefs.getString("text3", "");
            String restoredText4 = myPrefs.getString("text4", "");
            String restoredText5 = myPrefs.getString("text5", "");
            String restoredText6 = myPrefs.getString("text6", "");
        Intent i1 = new Intent();
        if((restoredText.length()>0)&&(restoredText1.length()>0)&&(restoredText2.length()>0)&&(restoredText3.length()>0)&&(restoredText4.length()>0)&&(restoredText5.length()>0)&&(restoredText6.length()>0))
            {
                 i1.setClass(this,ShpoonkleActivity.class);
            }
            //if((restoredText.length()==0)||(restoredText1.length()==0)||(restoredText2.length()==0)||(restoredText3.length()==0)||(restoredText4.length()==0)||(restoredText5.length()==0)||(restoredText6.length()==0))
        else    
        {
                i1.setClass(this,Test.class);
        }
            startActivity(i1);
            finish();
        }
    }
    

    而且效果很棒...thnx..

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多