java - 无法从不同扩展检索 SharedPreferences 值

标签 java android android-intent sharedpreferences

我试图将matrix_id的值从MainActivity(扩展Activity)传递到HomeActivity(扩展Activity)和ScheduleFragment(扩展Fragment)。 当我运行应用程序时,它会崩溃。

我对 Java 编程非常业余。

我应该做什么?

请帮帮我,谢谢。

这是 MainActivity.java 的一部分

    public class MainActivity extends Activity {

    public static final String PREFS_NAME="PreferencesValue";

    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.login_screen);

    b = (Button)findViewById(R.id.btnLogin);  
    matrix_id = (EditText)findViewById(R.id.txtMatric);


    b.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {

            SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
            SharedPreferences.Editor editor = settings.edit();
            editor.putString("matrix", matrix_id.getText().toString());

            editor.commit(); 

            Intent i = new Intent(getApplicationContext(), HomeActivity.class);
    startActivity(i);
    finish();
        }
       });
      }

这是 HomeActivity.java 的一部分

     /**
 * Displaying fragment view for selected nav drawer list item
 * */
private void displayView(int position) {
    // update the main content by replacing fragments
    Fragment fragment = null;
    switch (position) {
    case 0: fragment = new ScheduleFragment();
        break;

    case 1: fragment = new ReminderFragment();
        break;

    case 2: fragment = new AboutFragment();
        break;

    case 3: fragment = new LogoutFragment();
        break;
            }

这是 ScheduleFragment.java

    public class ScheduleFragment extends Fragment {
private final Context context;


public static final String PREFS_NAME="PreferencesValue";

public ScheduleFragment(Context context){
    this.context = context;

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
    View rootView = inflater.inflate(R.layout.fragment_schedule, container, false);

    TextView tvmatrix = (TextView)rootView.findViewById(R.id.textViewMatrix);

    SharedPreferences settings = context.getSharedPreferences(PREFS_NAME, 0);

    tvmatrix.setText(settings.getString("matrix", "A324142"));



    return rootView;

 }
  }

最佳答案

你有

public ScheduleFragment(Context context){
this.context = context;
}

fragment 构造函数不得有任何参数。您可以使用 getActivity() 获取托管 fragment 的 Activity 的 Activity 上下文

SharedPreferences settings = getActivity().getSharedPreferences(PREFS_NAME, 0);

关于java - 无法从不同扩展检索 SharedPreferences 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22588565/

相关文章:

java - 解析 JSON 字符串

android - 应用程序处于后台和终止时点击通知有什么区别

android - 如何使用 webview 将 paypal 集成到 android 应用程序

Android 分享 Intent Twitter : How to share only by Tweet or Direct Message?

android - 迷你应用程序安卓三星

java - 我不断收到错误。不兼容的类型 : ArrayList<StudentDetails> cannot be converted to ArrayList<AndroidTargets>

java - 有没有更好的方法使用 for 和 if-else 循环编写下面的程序?

java - 使用 Java 解析 URL 时,URL 中的编码字符错误

java - 如何检查日历/日期对象中的特定变量是否与java匹配?

java - Android USB 配件多线程