Я прочитал тонну постов в сети и вижу, что многие другие хотят делать то же самое, и все посты ссылаются на необходимость делать что-то вроде Singleton или использовать громоздкие подпрограммы conext.Почему доступ к классу-оболочке базы данных сложнее, чем доступ к любому другому действию (что довольно просто)?У меня нет проблем с доступом к другим занятиям из другого занятия - я, должно быть, спал во время этого занятия - что мне не хватает?
Вот фон:
Основной код вызывает основной макет с OneКнопка.
Кнопка вызывает класс DB Wapper (называемый DB_Interface, который имеет компоновку с кнопками для выполнения нужных мне операций с БД. Основные вещи БД определены в помощнике - яназывая его DBHelp_mate).
Без использования основного кода я могу запустить приложение (используя DB_Interface в качестве основного действия) , и оно прекрасно работает . Но , как только я использую Основной код для вызова DB_Interface, он падает при нажатии кнопки.
Да - я правильно изменил файл манифеста, чтобы отразить, какое действие является основным, так кака также объявление о других действиях (это не ракетостроение - и, действительно, я ученый в области ракетостроения!).
Итак, мой вопрос таков: как я могу вызвать DB_Interface из Maincodeи он вызывает DBHelp_mate и работает?
Спасибо - новые коды являются следующими (без содержимого внутри DBHelp_mate, которое не должно влиять на ваше руководство).Пожалуйста, предоставьте конкретные звонки / код, вместо того, чтобы говорить что-то вроде «вам нужно создать экземпляр. Это и то» - это просто создает дополнительную путаницу и много ответов / повторных сообщений.
НОВЫЙ КОД:
public class Maincode extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final Button goToDB = (Button) findViewById(R.id.Button01);
// ---------------------------------------------------------
goToDB.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent doIt = new Intent();
doIt.setClassName("com.bt.hopex", "com.bt.hopex.DB_Interface");
startActivity(doIt);
}
}); // end -----------------------------------------------
}//end onCreate
}//end activity
DB_INTERFACE
public class DB_Interface extends Activity {
private DBHelp_mate ddbb;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.db_dialog);
ddbb = new DBHelp_mate(this);
ddbb.open();
}//end onCreate
}//end activity
DBHelp-mate
public class DBHelp_mate {
private DatabaseHelper dbHelper ;
private SQLiteDatabase db;
private Context mCtx = null;
//*******************************************************
private static final String DATABASE_NAME = "XgAlert_db";
private static final String DATABASE_TABLE = "tblData";
private static final int DATABASE_VERSION = 2;
private static final String DATABASE_CREATE =
"create table gAlert_alerts ( "
+ "_id integer primary key autoincrement, "
+ "alert_text text not null,"
+ "alert_date varchar(20) not null,"
+ "alert_time varchar(20) not null"
+");";
//-------------------------------------------------------------
private static class DatabaseHelper extends SQLiteOpenHelper {
DatabaseHelper(Context ctx) {
super(ctx, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(DATABASE_CREATE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){
db.execSQL("DROP IF TABLE EXISTS "+ DATABASE_TABLE); change drop to alter later after all is working!
onCreate(db);
}
}
public DBHelp_mate(Context ctx) {
mCtx = ctx;
}
//********************************************************
public DBHelp_mate open () throws SQLException {
dbHelper = new DatabaseHelper(mCtx);
db = dbHelper.getWritableDatabase();
return this;
}
//------------------------------------------------------------
/** Closes a database connection */
public void close() {
dbHelper.close();
}
//------------------------------------------------------------