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

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

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

null値の参照型変数を参照しようとした場合に投げられる、Javaにおける例外のひとつです。

Java

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

Android Studio

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

Q&A

解決済

1回答

363閲覧

TextViewの表示

HW_

総合スコア18

NullPointerException

null値の参照型変数を参照しようとした場合に投げられる、Javaにおける例外のひとつです。

Java

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

Android Studio

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

0グッド

0クリップ

投稿2017/11/29 02:52

編集2017/11/29 04:10

###前提・実現したいこと
androidstudioでアプリを製作しています。
SQLiteに、画面で入力されたデータを保存し、リセットボタンでそのデータをクリアします。
データが保存されると件数がカウントアップして表示され、クリアされると0が表示されるようにしたいです。(データの件数を数えるのはできています)

###発生している問題・エラーメッセージ
リセットボタンを押すと確認ダイアログ(OK/キャンセル)を出しOKを押すとSQLiteのデータを消した後、件数をTextViewに再び表示しなおしたいのですが、ダイアログを表示するのに別のクラスを呼び出して使っているためか、うまく表示させることができません。OKを押した後にデータのクリアはされるのですが、表示の部分でエラーが出て止まってしまいます。

###エラーメッセージ

E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.root.qrsystemtest2, PID: 12511 java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window$Callback android.view.Window.getCallback()' on a null object reference at android.support.v7.app.AppCompatDelegateImplBase.<init>(AppCompatDelegateImplBase.java:117) at android.support.v7.app.AppCompatDelegateImplV9.<init>(AppCompatDelegateImplV9.java:149) at android.support.v7.app.AppCompatDelegateImplV11.<init>(AppCompatDelegateImplV11.java:29) at android.support.v7.app.AppCompatDelegateImplV14.<init>(AppCompatDelegateImplV14.java:54) at android.support.v7.app.AppCompatDelegateImplV23.<init>(AppCompatDelegateImplV23.java:31) at android.support.v7.app.AppCompatDelegateImplN.<init>(AppCompatDelegateImplN.java:31) at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:198) at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:183) at android.support.v7.app.AppCompatActivity.getDelegate(AppCompatActivity.java:519) at android.support.v7.app.AppCompatActivity.findViewById(AppCompatActivity.java:190) at com.example.root.qrsystemtest2.SyukkaActivity.GetRecordNum(SyukkaActivity.java:164) at com.example.root.qrsystemtest2.DialogActivity$2.onClick(DialogActivity.java:54) at android.support.v7.app.AlertController$ButtonHandler.handleMessage(AlertController.java:162) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6119) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) Application terminated.

###該当のソースコード
入力画面のソース
SyukkaActivity.class

java

1public class SyukkaActivity extends AppCompatActivity{ 2 int count = 0; 3 4 @Override 5 protected void onCreate(@Nullable Bundle savedInstanceState) { 6 super.onCreate(savedInstanceState); 7 setContentView(R.layout.activity_syukka); 8 9 GetRecordNum(this); 10 11 EditText Syomikigen = (EditText) findViewById(R.id.editText5); 12 Syomikigen.setOnEditorActionListener(new TextView.OnEditorActionListener() { 13 @Override 14 public boolean onEditorAction(TextView textView, int i, KeyEvent keyEvent) { 15 if(keyEvent != null && keyEvent.getKeyCode() == KeyEvent.KEYCODE_ENTER) { 16 if(keyEvent.getAction() == KeyEvent.ACTION_UP) { 17 RegistMikakutei(); 18 GetRecordNum(SyukkaActivity.this); 19 Toast.makeText(getApplicationContext(), "未確定情報として一件登録しました", Toast.LENGTH_SHORT).show(); 20 21 ((InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(textView.getWindowToken(), 0); 22 } 23 return true; 24 } 25 return false; 26 } 27 }); 28 Button btn = (Button) findViewById(R.id.button); 29 btn.setOnClickListener(new View.OnClickListener() { 30 @Override 31 public void onClick(View view) { 32 DialogActivity dialogActivity = new DialogActivity(); 33 dialogActivity.Dialog(SyukkaActivity.this,1, "Syukka","警告","編集中の内容が破棄されますがよろしいですか"); 34 } 35 }); 36 } 37 38public void GetRecordNum(Context context) { 39 MyOpenHelper helper = new MyOpenHelper(context); 40 final SQLiteDatabase db = helper.getWritableDatabase(); 41 long MikakuteirecodeCount = DatabaseUtils.queryNumEntries(db, "Mikakutei"); 42 long KakuteirecodeCount = DatabaseUtils.queryNumEntries(db, "Kakutei"); 43 44 TextView mikakutei = (TextView) findViewById(R.id.mikakutei); //エラー箇所はここ 45 TextView kakutei = (TextView) findViewById(R.id.kakutei); 46 String mikakutei_kensu = String.valueOf(MikakuteirecodeCount); 47 String kakutei_kensu = String.valueOf(KakuteirecodeCount); 48 mikakutei.setText(mikakutei_kensu); 49 kakutei.setText(kakutei_kensu); 50 db.close(); 51 } 52

ダイアログ用のクラス
DialogActivity.class

java

1public class DialogActivity { 2 Context con; 3 4 public void Dialog(Context context, int i, String gamen, String title, String message) { 5 con = context; 6 switch (i) { 7 case 0: 8 KakuninDialog(title, message); 9 break; 10 case 1: 11 SentakuDialog(gamen, title, message); 12 break; 13 } 14 } 15 16 private void KakuninDialog(String title, String message) { 17 final AlertDialog.Builder alertDialog = new AlertDialog.Builder(con); 18 alertDialog.setTitle(title); //タイトル設定 19 alertDialog.setMessage(message); //内容(メッセージ)設定 20 21 // OKボタンの設定 22 alertDialog.setPositiveButton("OK", new DialogInterface.OnClickListener() { 23 public void onClick(DialogInterface dialog, int which) { 24 } 25 }); 26 } 27 28 private void SentakuDialog(final String gamen, String title, String message) { 29 AlertDialog.Builder alertDialog = new AlertDialog.Builder(con); 30 alertDialog.setTitle(title); //タイトル設定 31 alertDialog.setMessage(message); //内容(メッセージ)設定 32 33 // OKボタンの設定 34 alertDialog.setPositiveButton("OK", new DialogInterface.OnClickListener() { 35 public void onClick(DialogInterface dialog, int which) { 36 if (gamen.equals("Syukka")) { 37 MyOpenHelper helper = new MyOpenHelper(con); 38 SyukkaActivity syukkaActivity = new SyukkaActivity(); 39 final SQLiteDatabase db = helper.getWritableDatabase(); 40 helper.ResetButton(db); 41 syukkaActivity.GetRecordNum(con); //エラー箇所はここ 42 Toast.makeText(con, "未確定情報をクリアしました", Toast.LENGTH_SHORT).show(); 43 } 44 } 45 }); 46 47 // キャンセルボタンの設定 48 alertDialog.setNegativeButton("キャンセル", new DialogInterface.OnClickListener() { 49 public void onClick(DialogInterface dialog, int which) { 50 51 } 52 }); 53 alertDialog.create(); 54 alertDialog.show(); 55 } 56 57}

###試したこと
TextViewの初期化の位置を変えたりなど試しましたが同じエラーが出てしまいます。

###補足情報(言語/FW/ツール等のバージョンなど)
AndroidStudio 3.0
android 6.0

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

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

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

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

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

guest

回答1

0

ベストアンサー

Activityはプログラマーがインスタンス化して使うクラスではありません。
Activityを継承する意味はなんでしょうか、通常のクラスでいいと思いますよ。

また、下記を修正してください。
・コードはコード用の記述に修正して下さい。
・タグは正しく付けましょう。
・ログは省略せずに全て載せましょう。

投稿2017/11/29 03:03

yona

総合スコア18155

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

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

HW_

2017/11/29 04:07

回答ありがとうございます。 ご指摘いただいた部分を修正いたしました。 また、Activityについては、他画面から遷移してくるため、Activityの切り替えで画面遷移を行うために継承しています。
yona

2017/11/29 04:36

おそらく私の回答の意味を正しく理解されていないようです。 SyukkaActivityはAndroid OSが画面遷移によってSyukkaActivityをインスタンス化されているのではなく、あなたがインスタンス化しています。そのため、SyukkaActivityは不完全な状態のインスタンスとなり、いくつかのメソッドは正常に動きません。だからエラーが発生しています。
HW_

2017/11/29 04:52

なるほど、理解いたしました。 あまりよく理解せずに使っていました、失礼しました。 DialogActivityの方からSyukkaActivityのGetRecordNumを呼び出す際にはどのように呼び出すが正しいでしょうか?
yona

2017/11/29 07:48

DAOパターンを導入するといいですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問