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

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

ただいまの
回答率

91.36%

  • Java

    10450questions

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

  • Android Studio

    2713questions

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

  • NullPointerException

    22questions

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

TextViewの表示

解決済

回答 1

投稿 2017/11/29 11:52 ・編集 2017/11/29 13:10

  • 評価
  • クリップ 0
  • VIEW 51

HW_

score 1

前提・実現したいこと

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

public class SyukkaActivity extends AppCompatActivity{
    int count = 0;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_syukka);

        GetRecordNum(this);

        EditText Syomikigen = (EditText) findViewById(R.id.editText5);
        Syomikigen.setOnEditorActionListener(new TextView.OnEditorActionListener() {
            @Override
            public boolean onEditorAction(TextView textView, int i, KeyEvent keyEvent) {
                if(keyEvent != null && keyEvent.getKeyCode() == KeyEvent.KEYCODE_ENTER) {
                    if(keyEvent.getAction() == KeyEvent.ACTION_UP) {
                        RegistMikakutei();
                        GetRecordNum(SyukkaActivity.this);
                        Toast.makeText(getApplicationContext(), "未確定情報として一件登録しました", Toast.LENGTH_SHORT).show();

                        ((InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(textView.getWindowToken(), 0);
                    }
                    return true;
                }
                return false;
            }
        });
        Button btn = (Button) findViewById(R.id.button);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                DialogActivity dialogActivity = new DialogActivity();
                dialogActivity.Dialog(SyukkaActivity.this,1, "Syukka","警告","編集中の内容が破棄されますがよろしいですか");
            }
        });
    }

public void GetRecordNum(Context context) {
        MyOpenHelper helper = new MyOpenHelper(context);
        final SQLiteDatabase db = helper.getWritableDatabase();
        long MikakuteirecodeCount = DatabaseUtils.queryNumEntries(db, "Mikakutei");
        long KakuteirecodeCount = DatabaseUtils.queryNumEntries(db, "Kakutei");

        TextView mikakutei = (TextView) findViewById(R.id.mikakutei); //エラー箇所はここ
        TextView kakutei = (TextView) findViewById(R.id.kakutei);
        String mikakutei_kensu = String.valueOf(MikakuteirecodeCount);
        String kakutei_kensu = String.valueOf(KakuteirecodeCount);
        mikakutei.setText(mikakutei_kensu);
        kakutei.setText(kakutei_kensu);
        db.close();
    }

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

public class DialogActivity {
    Context con;

    public void Dialog(Context context, int i, String gamen, String title, String message) {
        con = context;
        switch (i) {
            case 0:
                KakuninDialog(title, message);
                break;
            case 1:
                SentakuDialog(gamen, title, message);
                break;
        }
    }

    private void KakuninDialog(String title, String message) {
        final AlertDialog.Builder alertDialog = new AlertDialog.Builder(con);
        alertDialog.setTitle(title);      //タイトル設定
        alertDialog.setMessage(message);  //内容(メッセージ)設定

        // OKボタンの設定
        alertDialog.setPositiveButton("OK", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
            }
        });
    }

    private void SentakuDialog(final String gamen, String title, String message) {
        AlertDialog.Builder alertDialog = new AlertDialog.Builder(con);
        alertDialog.setTitle(title);      //タイトル設定
        alertDialog.setMessage(message);  //内容(メッセージ)設定

        // OKボタンの設定
        alertDialog.setPositiveButton("OK", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                if (gamen.equals("Syukka")) {
                    MyOpenHelper helper = new MyOpenHelper(con);
                    SyukkaActivity syukkaActivity = new SyukkaActivity();
                    final SQLiteDatabase db = helper.getWritableDatabase();
                    helper.ResetButton(db);
                    syukkaActivity.GetRecordNum(con); //エラー箇所はここ
                    Toast.makeText(con, "未確定情報をクリアしました", Toast.LENGTH_SHORT).show();
                }
            }
        });

        // キャンセルボタンの設定
        alertDialog.setNegativeButton("キャンセル", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {

            }
        });
        alertDialog.create();
        alertDialog.show();
    }

}

試したこと

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

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

AndroidStudio 3.0
android 6.0

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

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

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

投稿 2017/11/29 12:03

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/11/29 13:07

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

    キャンセル

  • 2017/11/29 13:36

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

    キャンセル

  • 2017/11/29 13:52

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

    キャンセル

  • 2017/11/29 16:48

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

    キャンセル

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

ただいまの回答率

91.36%

関連した質問

同じタグがついた質問を見る

  • Java

    10450questions

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

  • Android Studio

    2713questions

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

  • NullPointerException

    22questions

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