java エラー
- 評価
- クリップ 0
- VIEW 5,503
エラーと書いた部分二つとも、thisを入れるとエラーが起きます。どう直せばいいのか教えてください。getApplicationContext()やgetBaseContext()だとエラーにはならないものの実行した時に強制終了します。
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
protected void onStart() {
super.onStart();
Button main_btn = (Button)findViewById(R.id.main_button);
main_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent main_intent = new Intent(MainActivity.this, SecondActivity.class);
startActivity(main_intent);
}
});
Button main_get_btn = (Button)findViewById(R.id.main_get_button);
main_get_btn.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
EditText edit1 = (EditText)findViewById(R.id.main_editText);
String memo = edit1.getText().toString();
try {
String res = loadData(memo);
//ここがエラー
AlertDialog.Builder dlog = new AlertDialog.Builder(this);
dlog.setTitle(memo);
dlog.setMessage(res);
dlog.create().show();
} catch (IOException e) {
e.printStackTrace();
}
}
});
Button main_put_btn = (Button)findViewById(R.id.main_put_button);
main_put_btn.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
EditText edit1 = (EditText) findViewById(R.id.main_editText);
String memo = edit1.getText().toString();
try {
if (saveData(memo) != -1) {
//ここがエラー
Toast toast = Toast.makeText(this, "put memo!", Toast.LENGTH_SHORT);
toast.show();
}
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
menu.add("Put Memo");
menu.add("Get Memo");
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if ("Put Memo".equals(item.getTitle())) {
EditText edit1 = (EditText) this.findViewById(R.id.main_editText);
String memo = edit1.getText().toString();
try {
if (saveData(memo) != -1) {
Toast toast = Toast.makeText(this, "put memo!", Toast.LENGTH_SHORT);
toast.show();
}
} catch (IOException e) {
e.printStackTrace();
}
}
if ("Get Memo".equals(item.getTitle())){
EditText edit1 = (EditText)findViewById(R.id.main_editText);
String memo = edit1.getText().toString();
try {
String res = loadData(memo);
AlertDialog.Builder dlog = new AlertDialog.Builder(this);
dlog.setTitle(memo);
dlog.setMessage(res);
dlog.create().show();
} catch (IOException e){
e.printStackTrace();
}
}
return super.onOptionsItemSelected(item);
}
private long saveData(String data) throws IOException {
String time = Calendar.getInstance().getTime().toString();
MyDatabaseHelper helper = new MyDatabaseHelper(this);
SQLiteDatabase db = helper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(MyDatabaseHelper.MEMO, data);
values.put(MyDatabaseHelper.DATETIME, time);
long result = -1;
if (db != null) {
result = db.insert(MyDatabaseHelper.TABLE_NAME, null, values);
}
return result;
}
private String loadData(String find) throws IOException {
MyDatabaseHelper helper = new MyDatabaseHelper(this);
SQLiteDatabase db = helper.getReadableDatabase();
String query = "select * from " + MyDatabaseHelper.TABLE_NAME +
" where " + MyDatabaseHelper.MEMO + " like '%" + find + "%'";
String result = "見つかりませんでした。";
if (db != null) {
Cursor c = db.rawQuery(query, null);
if (c.moveToFirst()) {
result = c.getString(1) + "/n" + c.getString(2);
}
}
return result;
}
}
class MyDatabaseHelper extends SQLiteOpenHelper {
static final String ID = "id";
static final String DATABASE_NAME = "mydatabase.db";
static final int DATABASE_VERSION = 1;
static final String TABLE_NAME = "mydata";
static final String MEMO = "memo";
static final String DATETIME = "datetime";
MyDatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
public void onCreate(SQLiteDatabase db) {
String query = "create table " + TABLE_NAME + "(" +
ID + " INTEGER PRIMARY KEY," +
MEMO + " TEXT," +
DATETIME + " TEXT);";
db.execSQL(query);
}
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("drop table if exists " + TABLE_NAME);
onCreate(db);
}
}
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
protected void onStart() {
super.onStart();
Button main_btn = (Button)findViewById(R.id.main_button);
main_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent main_intent = new Intent(MainActivity.this, SecondActivity.class);
startActivity(main_intent);
}
});
Button main_get_btn = (Button)findViewById(R.id.main_get_button);
main_get_btn.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
EditText edit1 = (EditText)findViewById(R.id.main_editText);
String memo = edit1.getText().toString();
try {
String res = loadData(memo);
//ここがエラー
AlertDialog.Builder dlog = new AlertDialog.Builder(this);
dlog.setTitle(memo);
dlog.setMessage(res);
dlog.create().show();
} catch (IOException e) {
e.printStackTrace();
}
}
});
Button main_put_btn = (Button)findViewById(R.id.main_put_button);
main_put_btn.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
EditText edit1 = (EditText) findViewById(R.id.main_editText);
String memo = edit1.getText().toString();
try {
if (saveData(memo) != -1) {
//ここがエラー
Toast toast = Toast.makeText(this, "put memo!", Toast.LENGTH_SHORT);
toast.show();
}
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
menu.add("Put Memo");
menu.add("Get Memo");
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if ("Put Memo".equals(item.getTitle())) {
EditText edit1 = (EditText) this.findViewById(R.id.main_editText);
String memo = edit1.getText().toString();
try {
if (saveData(memo) != -1) {
Toast toast = Toast.makeText(this, "put memo!", Toast.LENGTH_SHORT);
toast.show();
}
} catch (IOException e) {
e.printStackTrace();
}
}
if ("Get Memo".equals(item.getTitle())){
EditText edit1 = (EditText)findViewById(R.id.main_editText);
String memo = edit1.getText().toString();
try {
String res = loadData(memo);
AlertDialog.Builder dlog = new AlertDialog.Builder(this);
dlog.setTitle(memo);
dlog.setMessage(res);
dlog.create().show();
} catch (IOException e){
e.printStackTrace();
}
}
return super.onOptionsItemSelected(item);
}
private long saveData(String data) throws IOException {
String time = Calendar.getInstance().getTime().toString();
MyDatabaseHelper helper = new MyDatabaseHelper(this);
SQLiteDatabase db = helper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(MyDatabaseHelper.MEMO, data);
values.put(MyDatabaseHelper.DATETIME, time);
long result = -1;
if (db != null) {
result = db.insert(MyDatabaseHelper.TABLE_NAME, null, values);
}
return result;
}
private String loadData(String find) throws IOException {
MyDatabaseHelper helper = new MyDatabaseHelper(this);
SQLiteDatabase db = helper.getReadableDatabase();
String query = "select * from " + MyDatabaseHelper.TABLE_NAME +
" where " + MyDatabaseHelper.MEMO + " like '%" + find + "%'";
String result = "見つかりませんでした。";
if (db != null) {
Cursor c = db.rawQuery(query, null);
if (c.moveToFirst()) {
result = c.getString(1) + "/n" + c.getString(2);
}
}
return result;
}
}
class MyDatabaseHelper extends SQLiteOpenHelper {
static final String ID = "id";
static final String DATABASE_NAME = "mydatabase.db";
static final int DATABASE_VERSION = 1;
static final String TABLE_NAME = "mydata";
static final String MEMO = "memo";
static final String DATETIME = "datetime";
MyDatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
public void onCreate(SQLiteDatabase db) {
String query = "create table " + TABLE_NAME + "(" +
ID + " INTEGER PRIMARY KEY," +
MEMO + " TEXT," +
DATETIME + " TEXT);";
db.execSQL(query);
}
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("drop table if exists " + TABLE_NAME);
onCreate(db);
}
}
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
0
//ここがエラー
AlertDialog.Builder dlog = new AlertDialog.Builder(this);
これは,new View.OnClickListener(){}の内部で,これは「View.OnClickListenerを実装した無名の内部クラス」という扱いです.なのでこの中でthisを使うと,この内部クラスのオブジェクト自身を指します.
もちろんこれはContextを継承していないのでAlertDialog.Builderのコンストラクタに渡せず,エラーになります.
ここは,thisを
MainActivity.this
にするか,仰るとおりgetApplicationContext()
を渡します.
もう一個のエラーも同様です(Toast.makeTextにリスナー実装内部クラスを渡そうとしている).
その修正をした時の実行時の強制終了に関しては原因が別にある可能性があります.
強制終了時のログを見せていただけませんか?
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.37%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2015/05/19 10:12
ちなみに、ログはこれだと思います
Error:(45, 38) エラー: Intentに適切なコンストラクタが見つかりません(<anonymous OnClickListener>,Class<SecondActivity>)
コンストラクタ Intent.Intent(String,Uri)は使用できません
(引数の不一致: <anonymous OnClickListener>をStringに変換できません:)
コンストラクタ Intent.Intent(Context,Class<?>)は使用できません
(引数の不一致: <anonymous OnClickListener>をContextに変換できません:)
Error:(87, 44) エラー: makeTextに適切なメソッドが見つかりません(<anonymous OnClickListener>,String,int)
メソッド Toast.makeText(Context,CharSequence,int)は使用できません
(引数の不一致: <anonymous OnClickListener>をContextに変換できません:)
メソッド Toast.makeText(Context,int,int)は使用できません
(引数の不一致: <anonymous OnClickListener>をContextに変換できません:)
2015/05/19 10:20
修正で全部消えるはずです
2015/05/19 10:43