これまでに尋ねられたいくつかの同様の質問がありますが、ソリューションごとにすべてがあるにもかかわらず、私のsharedPreferencesはnull値を返します。以下は私のコードです:SharedPreferences nullを返す
以下に示すアプリケーション全体からsharedPrefencesにアクセスするためのMainActivityに2つの静的メソッドを宣言しました。
public static void saveToPreferences(Context context, int i,String key) {
mSharedPreferences = context.getSharedPreferences(FILE_NAME, context.MODE_PRIVATE);
SharedPreferences.Editor editor = mSharedPreferences.edit();
editor.putInt(key , i);
//used in place of commit as it is faster. This does the task asynchronously
editor.commit();
}
public static int readFromPreferences(Context context, int i, String key) {
mSharedPreferences = context.getSharedPreferences(FILE_NAME, context.MODE_PRIVATE);
int fed_value = mSharedPreferences.getInt(key, i);
return fed_value;
}
static PendingIntent pendingIntent;
static Intent alarmIntent;
int mMinute;
final Calendar calendar = Calendar.getInstance();
int mCurrentHour = calendar.get(calendar.HOUR_OF_DAY);
int mCurrentMinute = calendar.get(calendar.MINUTE);
int minuteDifference;
int mHour;
// Create the TimePicker
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
return new TimePickerDialog(getActivity(), this, mCurrentHour, mCurrentMinute,
DateFormat.is24HourFormat(getActivity()));
}
@Override
public void onTimeSet(android.widget.TimePicker view, int hourOfDay, int minute) {
mHour = hourOfDay;
minuteDifference = Math.abs(mCurrentMinute - mMinute);
MainActivity.saveToPreferences(getActivity(),minuteDifference,"set_minute");
mMinute = minute;
MainActivity.saveToPreferences(getActivity(), Math.abs(mCurrentHour - mHour), "set_hour");
public int minuteDifference(){
Log.d("tag", String.valueOf(mHour) + " " + String.valueOf(mMinute));
return MainActivity.readFromPreferences(getActivity(),minuteDifference,"set_minute");
}
public int HourDifference(){
return MainActivity.readFromPreferences(getActivity(),Math.abs(mCurrentHour - mHour),"set_hour");
}
minuteDifferenceがnullを返すされているメソッドの下に示したように私は別の方法でそれらの値にアクセスしています。これはonStartメソッドで以下に示すように別のフラグメントから呼び出されています。
以下のコードブロックのボタン(setTime.setOnclickListener(..))をクリックするとtimePickerが表示され、onTimeSetメソッドが呼び出され、データがプリファレンスに保存されます。
2番目のボタン(下のコードブロックのsetAlarm.setOnClickListener(..))は、上記の別のフラグメントで定義されているメソッドのminuteDifferenceメソッドを呼び出します。
これは、sharedPreferencesから必要な値を読み取り、それを返す必要があります。 E/AndroidRuntime com.rs.rishitshah.feedingnemo 47.525 25850から25850 /::05:しかし、それがnull
@Override
public void onStart() {
super.onStart();
final Button setTime = (Button) getActivity().findViewById(R.id.set_time);
final Button setAlarm = (Button) getActivity().findViewById(R.id.set_alarm);
alarmIntent = new Intent(getActivity(), AlarmReciever.class);
pendingIntent = PendingIntent.getBroadcast(getActivity(), 0, alarmIntent, 0);
setAlarm.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AlarmManager manager;
TimePickerFragment tfSchedule = new TimePickerFragment();
int mDifferenceMinute = tfSchedule.minuteDifference();
manager = (AlarmManager) getActivity().getSystemService(Context.ALARM_SERVICE);
int interval = mDifferenceMinute*60000;
Log.d("minuteDifference",String.valueOf(mDifferenceMinute));
// manager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), interval, pendingIntent);
manager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime() +
interval, pendingIntent);
}
});
setTime.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
TimePickerFragment tfViewTimer = new TimePickerFragment();
tfViewTimer.show(getFragmentManager(), "Tag");
}
});
}
以下
を返すと、エラーログ
8月17日10で致命的な例外:メイン プロセス:com.rs.rishitshah.feedingnemo、PID:25850 java.lang.NullPointerException:仮想メソッド 'android.content.SharedPreferences android.content.Context.getSharedPreferences(java.lang.String、int)'をnullオブジェクト参照 at com.rs.rishitshah.feedingnemo.MainActivity.readFromPrefe rences(MainActivity.java:265)com.rs.rishitshah.feedingnemo.TimePickerFragment.minuteDifference(TimePickerFragment.java:63)で com.rs.rishitshah.feedingnemo.ScheduleFeed $ 1.onClick(ScheduleFeed.java:51)で android.view.View.performClick(View.java:5204) at android.view.View $ PerformClick.run(View.java:21155) (android.os.Handler.handleCallback(Handler.java:739) )にあります。 android.os.Handler.dispatchMessage(Handler.java:95) とandroid.os.Looper.loop(Looper.java:148) とandroid.app.ActivityThread.main(ActivityThread.java:5422) (ネイティブメソッド) com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(java.lang.reflect.Method.invoke) ZygoteInit.java:616)
PS:重複としてこれをマークするか、私は以下のリンクをたどっこの質問ノートをdownvoting前に、すでにそれらに言及したソリューションごとに私のコードを持っています。このすべてにもかかわらず、私のコードは動作していません。
android - sharedpreferences return null value
SharedPreferences getString returns null though set by editor in AsyncTask
SharedPreferences returns null values
Sharedpreferences in Android returns null when called from another activity
共有設定ではnullが返されません。あなたのコンテキストはnullです。 –
ありがとうございます。なぜこれが起こっているのか、これに対する修正は何ですか? –
[NullPointerExceptionとは何か、それを修正する方法は?](http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it) ) –