2016-09-13 16 views
0

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()を実装するにはどうすればよいでしょうか?

乾杯

+0

Hmは、この 'ContextGetter'が正しく動作していないようです。なぜ、あなたの 'NoteHandler'に' context'としてアクティビティのインスタンスを渡してから 'NotePrefs'に渡すことができませんか? – Vucko

+0

もうひとつのコメントは、すでに動作しています。あなたはちょっとお勧めしましたが、コードで書くことができますか?私は実際にはまだ活動や文脈については考えていません... – Shlx

+0

stacktraceを投稿してください。また、どのラインがNPEを引き起こしますか? –

答えて

1

あなたは<application>タグ内にマニフェストにname=".ContextGetter"を追加する必要があります。

+0

うわー、それは実際にトリックでした!私は愚かな間違いではなかったのでうれしいです。ありがとうございました!その行が何であるのか、それともすべてがうまくいったのかを教えてください。 – Shlx

+0

ようこそ。これらの行がなければ、アプリケーションを拡張するクラスは決して作成されません。回答 –

+0

を受け入れてください。まあ、意味があります。受け入れ、ありがとう – Shlx

関連する問題