2015-12-30 52 views
1

因此,在一个活动中,我试图将文件放入共享首选项中,然后在另一个活动中尝试为该字符串敬酒,但由于某种原因,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

在第一个活动有“MYDATA”并在第二个“我的数据” – user2957782

回答

2

所以我的问题是,为什么机器人保持敬酒的默认值, 这是不是颜色,这是我在其他活动输入到共享 喜好值“”?

这是因为您对Toast使用getApplicationContext()。直接使用活动的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", ""); 
} 
+0

除了放置onCreate之外,还有其他的初始化方法,因为它不会返回任何东西。当我运行我的代码,说我试图在空对象引用上调用一个虚拟方法时,我得到一个错误。 –

+0

我编辑了我的答案。 – Blackbelt

0

在第一个活动,你是从"Mydata", 得到一个SharedPreference但在第二个活动所做的“d”大写,并获得SharedPreference的字符串"MyData"

0

在你的第一个方法,你做getSharedPreferences("Mydata",Context.MODE_PRIVATE);,并在Seconde系列一个你没有getSharedPreferences("MyData",Context.MODE_PRIVATE);

迈德特 VS MYDATA请选择中庸之道一个正确名称;)