从共享首选项中检索值时出错

时间:2015-12-30 19:25:58

标签: java android

所以在一个活动中,我试图将文件放入共享首选项,然后在另一个活动中,我正在尝试烘烤该字符串,但由于某种原因,android正在烘烤默认值而不是我从共享输入的值偏好。

以下是MainActivity:

public void onPreviewFrame(byte[] data, Camera camera) {
        // By default preview data is in NV21 format, if needed it must be converted
        try {
            Camera.Size previewSize = camera.getParameters().getPreviewSize();
            int height = previewSize.height;
            int width = previewSize.width;

            ColorModelConverter converter = new ColorModelConverter(height, width);
            int[] pixels = converter.convert(data, this.colorFormat);

            int color = pickColor(pixels, height, width);
            updateColorData(color);

            storeColorInSharedPreferences(color);


            Log.i("FRAME PREVIEW", "Color updated");
        } catch (RuntimeException oops) {
            // Do nothing, exception is thrown because onPreviewFrame is called after camera is released
            Log.i("FRAME PREVIEW", "RuntimeException thrown into onPreviewFrame");
        }
    }

    public void storeColorInSharedPreferences(int color) {

        SharedPreferences sharedprefernces = getSharedPreferences("Mydata",Context.MODE_PRIVATE );
        SharedPreferences.Editor editor = sharedprefernces.edit();
        String first_control = String.valueOf(color);
        editor.putString("first_control", first_control);
        editor.commit();

这是第二个活动:

public class regressionlinecalculator extends ActionBarActivity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_regressionlinecalculator);
    }







    SharedPreferences sharedPreferences = getSharedPreferences("MyData",Context.MODE_PRIVATE);
    String first_control = sharedPreferences.getString("first_control", "");

    public void test(View view) {


        Toast display_final_value = Toast.makeText(getApplicationContext(), new String(first_control), Toast.LENGTH_SHORT);

        display_final_value.show();



    }
}

测试就是当我单击我在xml文件中定义的按钮时发生的事情。所以我的问题是为什么android会保持默认值,即“”而不是颜色,我在其他活动中输入共享首选项的值?

3 个答案:

答案 0 :(得分:2)

  

所以我的问题是为什么android会保持默认值,   这是“”而不是颜色,我输入的值是共享的   其他活动中的偏好?

这是因为您getApplicationContext()使用了Toast。直接使用活动Context

Toast display_final_value = Toast.makeText(this,first_control, Toast.LENGTH_SHORT);

另一方面,你有错误检索SharedPreference对象。使用常量来避免这种问题。此外,它的初始化应该在一个回调方法中移动。例如。 onCreate

SharedPreferences sharedPreferences; 
String first_control;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_regressionlinecalculator);
    sharedPreferences = getSharedPreferences("Mydata",Context.MODE_PRIVATE); 
    first_control = sharedPreferences.getString("first_control", "");
}

答案 1 :(得分:0)

在第一项活动中,您将从"Mydata"获取SharedPreference, 但是在第二项活动中你做了这个' d'大写,并获取字符串"MyData"的SharedPreference。

答案 2 :(得分:0)

在您的第一种方法中,您执行了getSharedPreferences("Mydata",Context.MODE_PRIVATE);,并在第二种方法中执行了getSharedPreferences("MyData",Context.MODE_PRIVATE);

MyData vs Mydata 请选择juste一个正确的名称;)