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

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

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

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

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

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

Q&A

1回答

2329閲覧

TimePickerDialogでエラーが発生する。contextが原因?[Android]

DaisukeHarada

総合スコア7

Java

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

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

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

0グッド

0クリップ

投稿2016/02/29 08:13

###前提・実現したいこと
Javaで時刻表アプリを作成しています。
時間を入力に受け付けたく、TimePickerDialogを使っているのですがエラーが発生し、うまくできません。
まずは入力を受けた時刻をToastで表示しようと考えています。
###発生している問題・エラーメッセージ
onClickの中にTimePickerDialogを入れており、対象のボタンをクリックした際に下記のようなエラーが出ます。

E/AndroidRuntime: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application

###ソースコード

java

1import android.app.TimePickerDialog; 2import android.content.ContentValues; 3import android.content.Intent; 4import android.database.Cursor; 5import android.database.sqlite.SQLiteDatabase; 6import android.database.sqlite.SQLiteException; 7import android.os.Bundle; 8import android.provider.ContactsContract; 9import android.support.annotation.MainThread; 10import android.support.design.widget.FloatingActionButton; 11import android.support.design.widget.Snackbar; 12import android.support.v7.app.AppCompatActivity; 13import android.support.v7.widget.Toolbar; 14import android.util.Log; 15import android.view.View; 16import android.view.Menu; 17import android.view.MenuItem; 18import android.widget.Button; 19import android.widget.EditText; 20import android.view.View.OnClickListener; 21import android.widget.LinearLayout; 22import android.widget.Spinner; 23import android.widget.TextView; 24import android.widget.TimePicker; 25import android.widget.Toast; 26 27import java.io.IOException; 28import java.sql.Time; 29import java.util.Calendar; 30 31 32public class MainActivity extends AppCompatActivity { 33 34 private String TAG_D = "database"; 35 private SQLiteDatabase db; 36 private int count_b1=0; 37 private static String TABLE_NAME="Book1"; 38 private DataBaseOpenHelper mDbHelper; 39 40 @Override 41 protected void onCreate(Bundle savedInstanceState) { 42 super.onCreate(savedInstanceState); 43 setContentView(R.layout.activity_main); 44 Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 45 setSupportActionBar(toolbar); 46 47 48 Button execButton =(Button)findViewById(R.id.b_exec); 49 execButton.setOnClickListener(new OnClickListener() { 50 @Override 51 public void onClick(View v) { 52 setDatabase(true); 53 count_b1 += 1; 54 Toast.makeText(MainActivity.this, "実行ボタンを押した回数は" + count_b1, Toast.LENGTH_SHORT).show(); 55 } 56 }); 57 58 59 Button showAllDataBaseButton=(Button)findViewById(R.id.b_showAllDataBase); 60 showAllDataBaseButton.setOnClickListener(new OnClickListener() { 61 @Override 62 public void onClick(View v) { 63 setDatabase(true); 64 TextView textView=(TextView)findViewById(R.id.tv_display); 65 Cursor c=db.query(TABLE_NAME,new String[]{"_id","field2","field3","field4","field5","field6","field7","field8","field9"},null,null,null,null,null); 66 boolean mov=c.moveToFirst(); 67 String str; 68 69 str="データベース一覧\n"; 70 while(mov) { 71 str +=(String.format("ID:%5s--%10s→→%10s→→%10s→→%10s→→%10s→→%10s\n", c.getString(0), c.getString(1), c.getString(2), c.getString(3), c.getString(4), c.getString(5), c.getString(6))); 72 mov = c.moveToNext(); 73 } 74 textView.setText(str); 75 c.close(); 76 db.close(); 77 }}); 78 79 Button deleteButton=(Button)findViewById(R.id.b_delete); 80 deleteButton.setOnClickListener(new OnClickListener() { 81 @Override 82 public void onClick(View v) { 83 setDatabase(false); 84 Log.d(TAG_D, "データベースを削除します"); 85 //削除されてない気がする 86 db.delete("Book1", null, null); 87 } 88 }); 89 90 91 Button showSelectedStopButton =(Button)findViewById(R.id.b_show_selected_stop); 92 showSelectedStopButton.setOnClickListener(new OnClickListener() { 93 @Override 94 public void onClick(View v) { 95 setDatabase(true); 96 //バス停が選択されているかチェックしたい TODO how?? 97 Spinner spStopSelect=(Spinner)findViewById(R.id.sp_stop_select); 98 String item=(String)spStopSelect.getSelectedItem(); 99 100 TextView textView=(TextView)findViewById(R.id.tv_display); 101 Cursor c=db.query(TABLE_NAME,new String[]{"_id",item},null,null,null,null,null); 102 boolean mov=c.moveToFirst(); 103 String str; 104 str="データベース一覧\n"; 105 while(mov) { 106 str +=(String.format("ID:%5s--%10s\n", c.getString(0), c.getString(1))); 107 mov = c.moveToNext(); 108 } 109 textView.setText(str); 110 c.close(); 111 db.close(); 112 } 113 }); 114 115 Button timeButton =(Button)findViewById(R.id.b_time); 116 timeButton.setOnClickListener(new OnClickListener() { 117 @Override 118 public void onClick(View v) { 119 final Calendar calendar=Calendar.getInstance(); 120 final int hour=calendar.get(Calendar.HOUR_OF_DAY); 121 final int minute=calendar.get(Calendar.MINUTE); 122 123 final TimePickerDialog timePickerDialog=new TimePickerDialog(getApplicationContext(), 124 new TimePickerDialog.OnTimeSetListener(){ 125 @Override 126 public void onTimeSet(TimePicker view,int hourOfDay,int minute){ 127 Toast.makeText(getApplicationContext(),String.valueOf(hourOfDay)+":"+String.valueOf(minute),Toast.LENGTH_SHORT).show(); 128 } 129 },hour,minute,true); 130 timePickerDialog.show(); 131 } 132 }); 133 134 FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 135 fab.setOnClickListener(new View.OnClickListener() { 136 @Override 137 public void onClick(View view) { 138 Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 139 .setAction("Action", null).show(); 140 } 141 }); 142 } 143 144 145 146 147 //データベースをセットするメソッド 148 private void setDatabase(boolean READ_ONLY) { 149 mDbHelper = new DataBaseOpenHelper(this); 150 try { 151 mDbHelper.createDataBase(); 152 db=mDbHelper.openDataBase(READ_ONLY); 153 } catch (IOException ioe) { 154 throw new Error("Unable to create database"); 155 } catch(SQLiteException sqle){ 156 throw sqle; 157 } 158 } 159 160 161 162 163 public boolean onCreateOptionsMenu(Menu menu) { 164 // Inflate the menu; this adds items to the action bar if it is present. 165 getMenuInflater().inflate(R.menu.menu_main, menu); 166 return true; 167 } 168 169 @Override 170 public boolean onOptionsItemSelected(MenuItem item) { 171 // Handle action bar item clicks here. The action bar will 172 // automatically handle clicks on the Home/Up button, so long 173 // as you specify a parent activity in AndroidManifest.xml. 174 int id = item.getItemId(); 175 176 //noinspection SimplifiableIfStatement 177 if (id == R.id.action_settings) { 178 return true; 179 } 180 181 return super.onOptionsItemSelected(item); 182 } 183} 184

###補足情報(言語/FW/ツール等のバージョンなど)
分かる方、ご回答していただけると幸いです。

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

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

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

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

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

guest

回答1

0

DialogはActivityに紐づけないといけないため、getApplicationContextで取得できるContextではどのActivityに紐づけるかわからないのでしょう。MainActivity.thisに変更してみて下さい。

投稿2016/02/29 09:34

yona

総合スコア18155

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問