所以在一个活动中,我试图将文件放入共享首选项,然后在另一个活动中,我正在尝试烘烤该字符串,但由于某种原因,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会保持默认值,即“”而不是颜色,我在其他活动中输入共享首选项的值?
答案 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一个正确的名称;)