#実現したいこと
MainActivity内でEditorを利用して作ったデータを、SubActivity内でEditorを使って上書きしたいです。
#発生している問題
MainActivityでEditorを宣言するところまでは上手くいきますが、SubActivity内でEditorを宣言するとその瞬間アプリが落ちてしまいデータの上書きをすることが出来ていません。
デバッグを行うと、Sub.javaでのdatastoreがnullになっていました。
goSubb()内のEditor editor = dataStore.edit()を実行しようとしたところでLooper.javaが呼び出されて、
this=com.android.internal.os.ZygoteInit$MethodAndArgsCaller ex=java.lang.reflect.InvocationTargetException cause=java.lang.NullPointerException: Attempt to invoke interface method 'android.content.SharedPreferences$Editor android.content.SharedPreferences.edit()' on a null object reference
というエラーメッセージと共にアプリが終了します。
また、Sub.javaのgoSubb内で
dataStore = getSharedPreferences("DataStore", MODE_PRIVATE);
を宣言してdataStoreにMainActivityで作ったデータを呼び出そうとしましたが、
Cannot resolve method 'getSharedPreferences(java.lang.String, int)'
と出てしまいgetSharedPreferencesが赤字になって呼び出すことが出来ません。datastoreにMainActivity内で入れたデータを呼び出す方法とgetSharedPreferencesでSubActivityに呼び出す方法、間違った文は無いか教えていただけると幸いです。
#該当のソースコード
xml
1//activity_main.xml 2<?xml version="1.0" encoding="utf-8"?> 3<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 4 xmlns:app="http://schemas.android.com/apk/res-auto" 5 xmlns:tools="http://schemas.android.com/tools" 6 android:layout_width="match_parent" 7 android:layout_height="match_parent" 8 tools:context=".MainActivity"> 9 10 <TextView 11 android:id="@+id/textView" 12 android:layout_width="wrap_content" 13 android:layout_height="wrap_content" 14 android:text="Hello World!" 15 app:layout_constraintBottom_toBottomOf="parent" 16 app:layout_constraintLeft_toLeftOf="parent" 17 app:layout_constraintRight_toRightOf="parent" 18 app:layout_constraintTop_toTopOf="parent" /> 19 20 <Button 21 android:id="@+id/button" 22 android:layout_width="wrap_content" 23 android:layout_height="wrap_content" 24 android:layout_marginStart="8dp" 25 android:layout_marginTop="8dp" 26 android:layout_marginEnd="8dp" 27 android:layout_marginBottom="8dp" 28 android:text="Button" 29 app:layout_constraintBottom_toBottomOf="parent" 30 app:layout_constraintEnd_toEndOf="parent" 31 app:layout_constraintHorizontal_bias="0.517" 32 app:layout_constraintStart_toStartOf="parent" 33 app:layout_constraintTop_toBottomOf="@+id/textView" 34 app:layout_constraintVertical_bias="0.174" /> 35 36 <Button 37 android:id="@+id/button3" 38 android:layout_width="wrap_content" 39 android:layout_height="wrap_content" 40 android:layout_marginStart="8dp" 41 android:layout_marginTop="8dp" 42 android:layout_marginEnd="8dp" 43 android:layout_marginBottom="8dp" 44 android:text="Button" 45 app:layout_constraintBottom_toBottomOf="parent" 46 app:layout_constraintEnd_toEndOf="parent" 47 app:layout_constraintHorizontal_bias="0.517" 48 app:layout_constraintStart_toStartOf="parent" 49 app:layout_constraintTop_toBottomOf="@+id/button" 50 app:layout_constraintVertical_bias="0.124" /> 51 52</android.support.constraint.ConstraintLayout>
java
1MainActivity.java 2package com.example.intenttest; 3 4import android.content.SharedPreferences; 5import android.content.SharedPreferences.Editor; 6import android.support.v7.app.AppCompatActivity; 7import android.os.Bundle; 8import android.view.View; 9import android.widget.Button; 10import android.widget.TextView; 11 12public class MainActivity extends AppCompatActivity { 13 private Sub sub; 14 SharedPreferences dataStore; 15 @Override 16 protected void onCreate(Bundle savedInstanceState) { 17 super.onCreate(savedInstanceState); 18 setContentView(R.layout.activity_main); 19 dataStore = getSharedPreferences("DataStore", MODE_PRIVATE); 20 Editor editor = dataStore.edit(); 21 String fragmentId = "送るよ"; 22 editor.putString("fragmentId", fragmentId); 23 editor.commit(); 24 Button go = findViewById(R.id.button); 25 Button ret = findViewById(R.id.button3); 26 String res=""; 27 sub =new Sub(MainActivity.this); 28 29 go.setOnClickListener(new View.OnClickListener() { 30 @Override 31 public void onClick(View view) { 32 sub.goSubb(MainActivity.this); 33 TextView kekka = findViewById(R.id.textView); 34 String str = dataStore.getString("fragmentId", "Nothing"); 35 kekka.setText(str); 36 } 37 }); 38 ret.setOnClickListener(new View.OnClickListener() { 39 @Override 40 public void onClick(View view) { 41 sub.ret(MainActivity.this); 42 } 43 }); 44 45 } 46}
java
1Sub.java 2package com.example.intenttest; 3 4import android.content.SharedPreferences; 5import android.content.SharedPreferences.Editor; 6import android.widget.TextView; 7 8import static android.app.Activity.RESULT_OK; 9 10class Sub { 11 SharedPreferences dataStore; 12 13 String res = ""; 14 15 Sub(MainActivity mainActivity) { 16 TextView kekka = (TextView) mainActivity.findViewById(R.id.textView); 17 } 18 public void goSubb(MainActivity mainActivity) { 19 TextView kekka = (TextView) mainActivity.findViewById(R.id.textView); 20 Editor editor = dataStore.edit(); 21 String fragmentId2 = "半分成功"; 22 editor.putString("fragmentId",fragmentId2); 23 String ketu=dataStore.getString("fragmentId", "Nothing"); 24 } 25 26 27 public void ret(MainActivity mainActivity) { 28 TextView kekka = (TextView) mainActivity.findViewById(R.id.textView); 29 kekka.setText("かえり" + res); 30 } 31}
#自分で調べたこと
別Activityでのデータの呼び出しや、データの上書き等探しましたがデータの呼び出しまでは教えているサイトが有りましたが、自分の知識では上手く呼び出すことが出来ず、上書きに関しては見つかりませんでした。
#環境
windows10
androidstudio 3.4.1
回答2件
あなたの回答
tips
プレビュー