質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

2回答

690閲覧

MainActivityのメソッドをほかのアクティビティーから呼び出す

uhsi

総合スコア57

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2019/07/23 07:28

編集2019/07/23 11:54

MainActivityのメソッドをほかのアクティビティーから呼び出すためにインスタンスを生成して実行したのですが、「SharedPreferences」を使っている部分で「java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.SharedPreferences android.content.Context.getSharedPreferences(java.lang.String, int)' on a null object reference」というエラーが出てしまいます。

java

1Realm realm = Realm.getDefaultInstance(); 2 //リセット 3 RealmQuery<DataModel> query = realm.where(DataModel.class); 4 RealmResults<DataModel> result = query.findAll(); 5 realm.beginTransaction(); 6 result.deleteAllFromRealm(); 7 realm.commitTransaction(); 8 9 InputStream is = null; 10 BufferedReader br = null; 11 int times = 1; 12 try { 13 try { 14 is = this.getAssets().open("data.txt"); 15 br = new BufferedReader(new InputStreamReader(is)); 16 String str; 17 18 String wordEnTemp = null; 19 String wordJpTemp = null; 20 String sentenceEnTemp = null; 21 String sentenceJpTemp = null; 22 int indexTemp = 0; 23 24 while ((str = br.readLine()) != null) { 25 switch (times%4){ 26 case 1: 27 //単語 28 wordEnTemp = str; 29 break; 30 case 2: 31 //和訳 32 wordJpTemp = str; 33 break; 34 case 3: 35 //例文 36 sentenceEnTemp = str; 37 break; 38 case 0: 39 //和訳 40 sentenceJpTemp = str; 41 42 //データ保存 43 realm.beginTransaction(); 44 DataModel model=realm.createObject(DataModel.class); 45 model.setIndex(indexTemp); 46 model.setWordEn(wordEnTemp); 47 model.setWordJp(wordJpTemp); 48 model.setSentenceEn(sentenceEnTemp); 49 model.setSentenceJp(sentenceJpTemp); 50 model.setProgressWord(0); 51 model.setProgressSpelling(0); 52 model.setTimeWord(0); 53 model.setTimeSpelling(0); 54 realm.commitTransaction(); 55 56 indexTemp++; 57 break; 58 } 59 times++; 60 } 61 } finally { 62 if (is != null) is.close(); 63 if (br != null) br.close(); 64 } 65 } catch (Exception e){ 66 } 67 //完了 68 SharedPreferences preferences = getSharedPreferences("data",MODE_PRIVATE); 69 SharedPreferences.Editor editor = preferences.edit(); 70 editor.putInt("count",1); 71 editor.commit();

Java

1MainActivity main = new MainActivity(); 2main.loadFile();

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jimbe

2019/07/23 11:46

一行のコードだけでは(想像は出来ますが)正確なことが何も分かりません. 「実行してそのエラーが出るのを確認できる」プログラムをご提示願えますか.
uhsi

2019/07/23 11:53

よろしくお願いいたします。
guest

回答2

0

getSharedPreferences は、ソースを見る限り context を必要としています。
上記のような使い方では、context は正常に渡らないので、ご希望の動作はエラーとなると思います。

自分なら、上記の処理を別クラスに定義して、コンストラクタか、メソッドの引数に Context を渡すようにします。

一応、MainActivity に static メソッドで、context を引数にするメソッド化すれば、共通で使用できるかと思います。

投稿2019/07/23 13:44

編集2019/07/23 13:49
kamikaze.cappa

総合スコア558

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

uhsi

2019/07/25 10:11

ありがとうございます。何度か調べているのですがcontextを完全に理解できていません。また、「getSharedPreferences は、ソースを見る限り context を必要としています。」とはどういう意味でしょうか。getSharedPreferencesの引数にcontextは見当たらないのですが。
退会済みユーザー

退会済みユーザー

2019/07/25 10:30

> 「getSharedPreferences は、ソースを見る限り context を必要としています。」とはどういう意味でしょうか。 getSharedPreferences()は、Contextクラスのメソッドです。
uhsi

2019/07/25 11:07

ありがとうございます。Contextクラスについて説明していただけますか。
kamikaze.cappa

2019/07/25 11:07

getSharedPreference を選択して、Ctrl+Alt+B を押してください。 メソッドを実装している所を、参照する事ができます。 この場合、ContextWrapper で実装されいます。 ContextWrapper のコンストラクタは、引数に Context を使用しています。
uhsi

2019/08/01 00:52 編集

失礼しました。新しい質問を作成しました。
guest

0

ベストアンサー

ご提示ありがとうございます.
MainActivity#loadFile メソッドが見当たりませんが...上の断片が loadFile の一部ということでしょうか.

アクティビティの機能は大抵システムと繋がって成り立っています. SharedPreferences もその一部です.
ですので勝手にアクティビティのインスタンスを作っても, システムと繋がっていなければ利用出来ません.
MainActivity という名前から, アプリ起動時には最初にシステムによって生成(=システムと繋がっていて)実行されているアクティビティと想像します.
loadFile を実行する場合は, その既に実行されている MainActivity の参照を(どうにか)取得して, 行う必要があるかと思います.

投稿2019/07/23 12:15

jimbe

総合スコア12545

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

uhsi

2019/07/25 10:07

ありがとうございます。「MainActivity の参照」とはどういった意味でしょうか。Stringの参照という意味は何となく理解できるのですが。
jimbe

2019/07/25 13:24

MainActivity も String も オブジェクトという点では同じです. ですので String の参照がご理解頂けていれば, MainActivity の参照も同じです.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問