Android Studio를 시작하면서 현재 메모를 작성하고 저장하는 간단한 앱을 만들려고합니다. '할 일 목록'기능이 있습니다. 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()를 구현하는 좋은 방법은 무엇입니까? 당신은 name=".ContextGetter"
를 추가해야
건배
흠,이 'ContextGetter'가 제대로 작동하지 않는 것 같습니다. 어째서 활동의 인스턴스를'NoteHandler'에 'context'로 전달한 다음'NotePrefs'에 전달할 수 없습니까? – Vucko
다른 의견으로 이미 작동했습니다. 정확히 무엇을 제안 했습니까? 코드로 작성할 수 있습니까? 나는 아직 활동과 컨텍스트 (아직)에 대해 전혀 모른다 ... – Shlx
stacktrace를 게시하십시오. 또한 어떤 라인이 NPE를 유발합니까? –