2015-12-30 97 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請選擇中庸之道一個正確名稱;)