メソッドでエラーがでてしまいます

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 6,795

uyuka

score 5

前提・実現したいこと

Android Studioでアプリ制作の練習をしているのですが
メソッドでエラーが発生してしまいます。
インターネットで似たようなエラーを調べてみると、
メソッドの引数があっていないことが原因だとありました。
Javaを少しかじった位なので、その説明を読んでも理解できず・・・。
実際にどのように直せば動くのか、教えて頂ければ幸いです。

発生している問題・エラーメッセージ

後述ソースコードの太字の部分がエラーになってしまいます。

エラーメッセージ
・エラー :(33, 86) エラー: <anonymous com.example.user02.app921.ActivityMain$1>はabstractでなく、OnCheckedChangeListener内のabstractメソッドonCheckedChanged(RadioGroup,int)をオーバーライドしません
・エラー :(34, 21) エラー: メソッドはスーパータイプのメソッドをオーバーライドまたは実装しません
エラー :Execution failed for task ':app:compileDebugJavaWithJavac'.

Compilation failed; see the compiler error output for details.

該当のソースコード

package com.example.user02.app921;

import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.preference.PreferenceManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.RadioGroup;
import android.widget.TextView;

public class ActivityMain extends AppCompatActivity {

private EditText etxValue;
private TextView txvValue;
private SharedPreferences preferences;

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

//ビューの取得
etxValue = (EditText)findViewById(R.id.amin_etxValue);
txvValue = (TextView)findViewById(R.id.amin_txvValue);

//デフォルトを任意のファイル名で作成するように設定
preferences = getSharedPreferences("shared",MODE_PRIVATE);

//ラジオボタンの選択処理
((RadioGroup)findViewById(R.id.amin_rdgName))
.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void OnCheckedChanged(RadioGroup group, int checkedId){
switch (checkedId){
case R.id.amin_rdbAnyName:
//任意のファイル名で作成
preferences =
getSharedPreferences("shared",MODE_PRIVATE);
break;

case R.id.amin_rdbActivityName:
//アクティビティ名で作成
preferences =
getPreferences(MODE_PRIVATE);
break;

case R.id.amin_rbdDefaultName:
//デフォルト名で作成
preferences =
PreferenceManager.getDefaultSharedPreferences(getBaseContext());
break;
}
}
});
//書き込みボタン処理
findViewById(R.id.amin_btnSave).setOnClickListener(new View.
OnClickListener(){
@Override
public void onClick(View v){
Editor editor = preferences.edit();
editor.putString("key", etxValue.getText().toString());
editor.commit();
txvValue.setText("");
}
});

//読み出しボタン処理
findViewById(R.id.amin_btnLoad).setOnClickListener(new View.
OnClickListener(){
@Override
public void onClick(View v){
txvValue.setText(preferences.getString("key","データが見つかりません"));

}
});

//削除ボタン処理
findViewById(R.id.amin_btnDelete).setOnClickListener(new View.
OnClickListener(){
@Override
public  void onClick(View v){
SharedPreferences.Editor editor = preferences.edit();
editor.remove("key");
editor.commit();
txvValue.setText("");
}

});

}
}

試したこと

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

buildToolsVersion "23.0.3"

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 2

checkベストアンサー

+1

メソッド名は小文字で始まるので、
OnCheckedChanged -> onCheckedChanged
が正しいです。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2016/09/05 11:11

    エラーの波線は消えたのですが、
    ビルド時に

    エラー :(33, 59) エラー: シンボルを見つけられません
    シンボル: クラス onCheckedChangeListener
    場所: クラス RadioGroup

    という新たなエラーがでてしまいました。

    キャンセル

  • 2016/09/05 11:25

    そこじゃないです。
    そこのoは大文字のOに戻して、その中のメソッド
    OnCheckedChangedの最初のOを小文字にして下さい。

    キャンセル

  • 2016/09/05 11:29

    直りました!!
    @Overrideの下のところですね。

    先生に聞いてもわからなかったところなので、本当にたすかりました。
    ありがとうございます!!

    キャンセル

0

「abstractメソッドonCheckedChanged(RadioGroup,int)をオーバーライドしません 」というエラーメッセージから判断すると、onCheckedChanged(RadioGroup,int)は抽象メソッド(abstract method)なのでしょう。

抽象メソッドは、中身の無い(実装されたコードが無い)メソッドですから、子クラスで @Override 無しでonCheckedChanged(RadioGroup,int)を実装すれば、自動的にオーバーライドされるはずです。

エラーが出たところ(質問のコードで太文字になっているところ)の @Override の行を削除してからコンパイルしてみてください。

--
それにしてもAndroid Studioのエラーメッセージは、日本語になっていませんね。
もしもAndroid Studioの英語版があるのなら、使ってみてはどうかと思います。英語のエラーメッセージの方が、多少は意味が判ると思いますので。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2016/09/05 11:35

    ご回答ありがとうございます。

    @Overrideの後の
    public void OnCheckedChanged(RadioGroup group, int checkedId)

    のOnをonに変えたら無事実行できました。
    その後、@Overrideを抜いても実行できました。
    テキスト通りに@Overrideを付けたのですが、自動でオーバーライドされるのであれば
    自分で記述しなくても良いのですね!

    キャンセル

  • 2016/09/05 11:38

    @Overrideを外すのはおすすめしません。
    今回のように、オーバーライドが正しくなされていない時にエラーを発してくれるので、間違いに気付きやすくなります。

    キャンセル

  • 2016/09/05 11:48

    swordone様
    ありがとうございます。
    何せ初心者なもので、テキスト通りに書いていてもエラーが発生してしまいます。
    @Overrideでコンパイルした時のエラーを読むようにしてみます。

    キャンセル

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

  • ただいまの回答率 90.21%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる