Androidスタジオを使い始めています。現在ノートを保存して保存する簡単なアプリケーションを作成しようとしています。私はJson/Gsonを使ってSharedPreferencesにそれらを格納しようとしています。いくつかのオンラインチュートリアルに続いて動作するように見えません。ここにも同様の質問は役に立たなかった。これは、これまでの私のコードです:SharedPreferencesのNullPointerException
MainActivity.java:
public class MainActivity extends AppCompatActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
NoteHandler noteHandler = new NoteHandler();
noteHandler.newNote("test", 1);
}
}
Note.java:
public class Note {
public enum State { TODO, DONE };
private String content;
private State state;
private Date date;
private int id;
private Note parent;
public Note(String content, State state, Date date, Note parent, int id) {
this.content = content;
this.state = state;
this.date = date;
this.parent = parent;
this.id = id;
}
/* Getters and setters */
}
NoteHandler.java:
public class NoteHandler {
NotePrefs notePrefs = new NotePrefs(ContextGetter.getAppContext());
void newNote(String content, int id) {
newNote(content, null, id);
}
void newNote(String content, Note parent, int id) {
Note newNote = new Note(content, Note.State.TODO, new Date(), parent, id);
notePrefs.saveNote(newNote);
}
Note getNote(int id) {
return notePrefs.loadNote(id);
}
}
NotePrefs.java:
public class NotePrefs {
private final String PREFS_NAME = "notes.NotePrefs";
private static SharedPreferences settings;
private static SharedPreferences.Editor editor;
private static Gson gson = new Gson();
public NotePrefs(Context ctx) {
if(settings == null) {
settings = ctx.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
}
editor = settings.edit();
}
public static void saveNote(Note note) {
editor.putString("" + note.getId(), gson.toJson(note));
editor.apply();
}
public static Note loadNote(int id) {
String noteJson = settings.getString("" + id, "");
return gson.fromJson(noteJson, Note.class);
}
public static List<Note> loadAllNotes() {
return null;
}
}
ContextGetter.java:
public class ContextGetter extends Application {
private static Context context;
public void onCreate(){
super.onCreate();
context = getApplicationContext();
}
public static Context getAppContext() {
return context;
}
}
例外:
java.lang.RuntimeException:活性ComponentInfo {ノート/ notes.MainActivity}を開始できません:java.lang.NullPointerExceptionが仮想起動しようとしメソッド 'android.content.SharedPreferences android.content.Context.getSharedPreferences(java.lang.String、int)' nullオブジェクトリファレンス
まだコンテキストのものの周りに私の頭を包んでいるように見えることはできません。どんな助けもありがとう!
また、loadAllNotes()を実装するにはどうすればよいでしょうか?
乾杯
Hmは、この 'ContextGetter'が正しく動作していないようです。なぜ、あなたの 'NoteHandler'に' context'としてアクティビティのインスタンスを渡してから 'NotePrefs'に渡すことができませんか? – Vucko
もうひとつのコメントは、すでに動作しています。あなたはちょっとお勧めしましたが、コードで書くことができますか?私は実際にはまだ活動や文脈については考えていません... – Shlx
stacktraceを投稿してください。また、どのラインがNPEを引き起こしますか? –