1

newBostonチュートリアルに従おうとしていますが、ボタンをクリックしてデータベースにデータを書き込むと、ランタイムエラーが発生します。LogCatは、「アクティビティにメソッドaddModuleButton(View)が見つかりませんでした。

助言がありますか?

モジュールアクティビティを追加

    public class AddCourse extends Activity implements OnClickListener {

        Button sqlAddModule;
        EditText sqlModuleCode, sqlModuleName, sqlModuleType, sqlModuleDay, 
        sqlModuleStart, sqlModuleEnd, sqlModuleLocation, sqlModuleComments;

         @Override
            public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.add_course);

                sqlAddModule= (Button)findViewById(R.id.addToDatabase);
                sqlModuleCode = (EditText)findViewById(R.id.labelEditModuleCode);
                sqlModuleName = (EditText)findViewById(R.id.labelEditModuleFull);
                sqlModuleType = (EditText)findViewById(R.id.labelCourseType);
                sqlModuleDay = (EditText)findViewById(R.id.labelDay);
                //sqlModuleStart = (EditText)findViewById(R.id.labelEditModuleCode);
                //sqlModuleEnd = (EditText)findViewById(R.id.labelEditModuleCode);
                sqlModuleLocation = (EditText)findViewById(R.id.labelEditModuleLocation);
                sqlModuleComments = (EditText)findViewById(R.id.labelEditModuleComments);
         }

                public void onClick (View addModuleButton) 
                {
                    boolean didItWork = true;
                    try{
                    String moduleCode = sqlModuleCode.getText().toString();
                    String moduleName = sqlModuleName.getText().toString();
                    String moduleDay = sqlModuleDay.getText().toString();
                    String moduleType = sqlModuleType.getText().toString();
                    String moduleLocation = sqlModuleLocation.getText().toString();
                    String moduleComments = sqlModuleComments.getText().toString();

                    database entry = new database(AddCourse.this);
                    entry.open();
                    entry.createEntry(moduleCode, moduleName,moduleType, moduleDay,moduleLocation, moduleComments);
                    entry.close();

                    }catch(Exception e){
                        didItWork = false;
                    }finally{ if(didItWork){
                        Dialog d = new Dialog(this) ;
                        d.setTitle("BooYa!");
                        TextView tv = new TextView(this);
                        tv.setText("Success");
                        d.setContentView(tv);
                        d.show();
                    }


                    }

                }
}

データベースクラス

public class database {

    public static final String KEY_ROWID = "_id";
    public static final String KEY_MODULECODE = "module_code";
    public static final String KEY_MODULENAME = "module_name";
    public static final String KEY_MODULETYPE = "module_type";
    public static final String KEY_MODULEDAY = "module_day";
    public static final String KEY_MODULESTART = "module_start";
    public static final String KEY_MODULEEND = "module_end";
    public static final String KEY_MODULELOCATION = "module_location";
    public static final String KEY_MODULECOMMENTS = "module_comments";

    private static final String DATABASE_NAME = "module_database";
    private static final String DATABASE_TABLE = "my_modules";
    private static final int DATABASE_VERSION = 1;

    private DbHelper myHelper;
    private final Context myContext;
    private SQLiteDatabase moduleDatabase;

    private static class DbHelper extends SQLiteOpenHelper {

        public DbHelper(Context context){
            super(context, DATABASE_NAME, null, DATABASE_VERSION);

        }

        @Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" +
                        KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
                        KEY_MODULECODE + " TEXT NOT NULL, " +
                        KEY_MODULENAME + " TEXT NOT NULL, " +
                        KEY_MODULETYPE + " TEXT NOT NULL, " +
                        KEY_MODULEDAY + " TEXT NOT NULL, " +
                        //KEY_MODULESTART + " TEXT, " +
                        //KEY_MODULEEND + " TEXT, " +
                        KEY_MODULELOCATION + " TEXT NOT NULL, " +
                        KEY_MODULECOMMENTS + " TEXT NOT NULL,);"
                    );

        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            // TODO Auto-generated method stub
            db.execSQL("DROP TABEL IF EXISTS " + DATABASE_TABLE);
            onCreate(db);

        }


    }

    public database(Context c){
        myContext = c;
    }

    public  database open()throws SQLException{
        myHelper = new DbHelper(myContext);
        moduleDatabase = myHelper.getWritableDatabase();
        return this;
    }

    public void close(){
    myHelper.close();
    }

    public long createEntry(String moduleCode, String moduleName, String moduleType,
            String moduleDay, String moduleLocation, String moduleComments) {
        ContentValues cv = new ContentValues();
        cv.put(KEY_MODULECODE,moduleCode);
        cv.put(KEY_MODULENAME,moduleName);
        cv.put(KEY_MODULETYPE,moduleType);
        cv.put(KEY_MODULEDAY,moduleDay);
        cv.put(KEY_MODULELOCATION,moduleLocation);
        cv.put(KEY_MODULECOMMENTS,moduleComments);
        return moduleDatabase.insert(DATABASE_TABLE,null,cv);
        // TODO Auto-generated method stub

    }

}
4

2 に答える 2

1

LogCat は、「アクティビティで addModuleButton(View) メソッドが見つかりませんでした」と表示します。

あなたのボタンは XML 属性を使用しているようですandroid:onClick="addModuleButton"。これを変更するだけです:

public void onClick (View addModuleButton) 

これに:

public void addModuleButton (View view)

onClickドキュメントから:

この名前は、View 型のパラメーターを 1 つだけ取る public メソッドに対応している必要があります。たとえば、 を指定する場合は、コンテキスト (通常はアクティビティ) のメソッドをandroid:onClick="sayHello"宣言する必要があります。public void sayHello(View v)

于 2012-10-31T23:03:38.037 に答える
0

データベースクラス

private static class DbHelper extends SQLiteOpenHelper {
           public static final String KEY_ROWID = "_id";
            public static final String KEY_MODULECODE = "module_code";
            public static final String KEY_MODULENAME = "module_name";
            public static final String KEY_MODULETYPE = "module_type";
            public static final String KEY_MODULEDAY = "module_day";
            public static final String KEY_MODULESTART = "module_start";
            public static final String KEY_MODULEEND = "module_end";
            public static final String KEY_MODULELOCATION = "module_location";
            public static final String KEY_MODULECOMMENTS = "module_comments";


    private static final String DATABASE_NAME = "module_database";
    private static final String DATABASE_TABLE = "my_modules";
    private static final int DATABASE_VERSION = 1;

    private DbHelper myHelper;
    private final Context myContext;
    private SQLiteDatabase moduleDatabase;

        public DbHelper(Context context){
            super(context, DATABASE_NAME, null, DATABASE_VERSION);

        }

        @Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" +
                        KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
                        KEY_MODULECODE + " TEXT NOT NULL, " +
                        KEY_MODULENAME + " TEXT NOT NULL, " +
                        KEY_MODULETYPE + " TEXT NOT NULL, " +
                        KEY_MODULEDAY + " TEXT NOT NULL, " +
                        //KEY_MODULESTART + " TEXT, " +
                        //KEY_MODULEEND + " TEXT, " +
                        KEY_MODULELOCATION + " TEXT NOT NULL, " +
                        KEY_MODULECOMMENTS + " TEXT NOT NULL,);"
                    );

        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            // TODO Auto-generated method stub
            db.execSQL("DROP TABEL IF EXISTS " + DATABASE_TABLE);
            onCreate(db);

        }


    }

    public database(Context c){
        myContext = c;
    }

    public  database open()throws SQLException{
        myHelper = new DbHelper(myContext);
        moduleDatabase = myHelper.getWritableDatabase();
        return this;
    }

    public void close(){
    myHelper.close();
    }

    public long createEntry(String moduleCode, String moduleName, String moduleType,
            String moduleDay, String moduleLocation, String moduleComments) {
        ContentValues cv = new ContentValues();
        cv.put(KEY_MODULECODE,moduleCode);
        cv.put(KEY_MODULENAME,moduleName);
        cv.put(KEY_MODULETYPE,moduleType);
        cv.put(KEY_MODULEDAY,moduleDay);
        cv.put(KEY_MODULELOCATION,moduleLocation);
        cv.put(KEY_MODULECOMMENTS,moduleComments);
        return moduleDatabase.insert(DATABASE_TABLE,null,cv);
        // TODO Auto-generated method stub

    }

モジュールアクティビティ

DbHelper  myHelper= new DbHelper (this, DATABASENAME, null, VERSION_CODE);
SQLiteDatabase db = myHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("module_code", "XXX");
values.put("module_name", "XXX");
...
db.insert("module_database", "", values);
于 2012-11-01T06:35:11.257 に答える