Не нашёл ответа на свой вопрос.
Вобщем, работаю над приложением, способным изменить мир, так что не зазорно помочь.
Хочу реализовать такое:
При нажатии на любом пункте списка в первом Активити, открывается второй активити с "шаблонным" layout, в котором большая таблица из TextView.
Так вот, таблица то открывается одна, но заполняться она должна каждый раз из разных таблиц бд, в зависимости от нажатого пункта списка в предыдущем активити.
Таблицы эти создаются также при нажатии на пунктах списка того самого первого Активити, ну...должны создаваться. На деле же создаётся только первая таблица, а при нажатии на другом пункте списка - приложение валится.
Весь день пытаюсь разобраться, но безуспешно. Выручайте.
Вот код второго Активити. Из первого в него приходят 2 значения, различных для каждого пункта списка первого Активити... Вот по сумме этих двух значений я и хочу чтобы автоматом создавалось куча шаблонных таблиц) с названием из суммы этих двух строк
Возможно ли такое? Хотя бы ткните носом в очередную мою глупую ошибку дилетанта.
Код: Выделить всё
public class tabl29 extends Activity {
int Cball1_1, Cball1_2;
DBHelper dbHelper29;
TextView TablName, ball1_1, ball1_2, itog1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.tabllay29);
TablName = (TextView) findViewById(R.id.TablName);
Intent intentmes29 = getIntent();
String TablNamebd1 = intentmes29.getStringExtra("TablName1");
String TablNamebd2 = intentmes29.getStringExtra("TablName2");
TablName.setText(TablNamebd1+TablNamebd2);
ball1_1 = (TextView) findViewById(R.id.ball1_1);
ball1_2 = (TextView) findViewById(R.id.ball1_2);
itog1 = (TextView) findViewById(R.id.itog1);
registerForContextMenu(ball1_1);
registerForContextMenu(ball1_2);
// создаем объект для создания и управления версиями БД
dbHelper29 = new DBHelper(this);
// подключаемся к БД
SQLiteDatabase db29 = dbHelper29.getWritableDatabase();
// делаем запрос всех данных из таблицы х, получаем Cursor...при создании 2 таблицы тут приложение валится...
Cursor c29 = db29.query(TablNamebd1+TablNamebd2, null, null, null, null, null, null);
// ставим позицию курсора на первую строку выборки
// если в выборке нет строк, вернется false
if (c29.moveToFirst()) {
// определяем номера столбцов по имени в выборке
int idColIndex = c29.getColumnIndex("id");
int ball1_1ColIndex = c29.getColumnIndex("ball1_1");
int ball1_2ColIndex = c29.getColumnIndex("ball1_2");
do {
// получаем значения по номерам столбцов и пишем все в textview!!!
Cball1_1=c29.getInt(ball1_1ColIndex);
Cball1_2=c29.getInt(ball1_2ColIndex);
ball1_1.setText(Integer.toString(Cball1_1));
ball1_2.setText(Integer.toString(Cball1_2));
itog1.setText(Integer.toString(Cball1_1+Cball1_2));
// переход на следующую строку
// а если следующей нет (текущая - последняя), то false - выходим из цикла
} while (c29.moveToNext());
} else
c29.close();
//очистка бд чтобы потом перезаписать )
db29.delete(TablNamebd1+TablNamebd2, null, null);
// закрываем подключение к БД
dbHelper29.close();
}
class DBHelper extends SQLiteOpenHelper {
static final int DB_VERSION = 1;
public DBHelper(Context context) {
// конструктор суперкласса
super(context, "myDB", null, DB_VERSION);
}
Intent intentmes29 = getIntent();
String TablNamebd1 = intentmes29.getStringExtra("TablName1");
String TablNamebd2 = intentmes29.getStringExtra("TablName2");
@Override
public void onCreate(SQLiteDatabase db) {
// создаем таблицу с полями
db.execSQL("create table " + TablNamebd1+TablNamebd2+ "("
+ "id integer primary key autoincrement,"
+ "ball1_1 int,"
+ "ball1_2 int" + ");");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
//опишем создание контекстных меню
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
switch (v.getId()) {
case R.id.ball1_1:
menu.add(0, 1, 0, "1 балл");
menu.add(0, 2, 0, "2 балла");
menu.add(0, 3, 0, "3 балла");
break;
case R.id.ball1_2:
menu.add(0, 4, 0, "1 балл");
menu.add(0, 5, 0, "2 балла");
menu.add(0, 6, 0, "3 балла");
break;
}
}
//обработчик нажатия пунктов меню
@Override
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()) {
// пункты меню для 1
case 1:
Cball1_1=1;
break;
case 2:
Cball1_1=2;
break;
case 3:
Cball1_1=3;
break;
// пункты меню для 2
case 4:
Cball1_2=1;
break;
case 5:
Cball1_2=2;
break;
case 6:
Cball1_2=3;
break;
}
ball1_1.setText(Integer.toString(Cball1_1));
ball1_2.setText(Integer.toString(Cball1_2));
itog1.setText(Integer.toString(Cball1_1+Cball1_2));
return super.onContextItemSelected(item);
}
public void onDestroy() {
super.onDestroy();
Intent intentmes29 = getIntent();
String TablNamebd1 = intentmes29.getStringExtra("TablName1");
String TablNamebd2 = intentmes29.getStringExtra("TablName2");
// создаем объект для данных
ContentValues cv29 = new ContentValues();
// получаем данные из полей ввода
int DBCball1_1 = Cball1_1;
int DBCball1_2 = Cball1_2;
// подключаемся к БД
SQLiteDatabase db29 = dbHelper29.getWritableDatabase();
cv29.put("ball1_1", DBCball1_1);
cv29.put("ball1_2", DBCball1_2);
// вставляем запись
db29.insert(TablNamebd1+TablNamebd2, null, cv29);
// закрываем подключение к БД
dbHelper29.close();
}
}
Шапка лога с ошибкой
Код: Выделить всё
10-25 23:24:01.812: E/SQLiteLog(31997): (1) no such table: Февраль2012
10-25 23:24:01.818: E/AndroidRuntime(31997): FATAL EXCEPTION: main
10-25 23:24:01.818: E/AndroidRuntime(31997): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.p044_listclick/com.example.p044_listclick.tabl29}: android.database.sqlite.SQLiteException: no such table: Февраль2012 (code 1): , while compiling: SELECT * FROM Февраль2012
Первый пункт списка - "Февраль2016". Так как он был нажат первым, таблица успешно создалась, я с ней отработал, вышел в Первое активити со списком, и нажал на "Февраль2012". И упало...
и так двацть раз)
Ну не смог я найти, как реализовать автоматическое создание таблиц, понимаете? Вот как мне это сделать? не прописывать же в onCreate SQLTхелпера все возможные варианты таблиц?
Хочу, чтобы таблицы сами создавались по мере необходимости, с названием, равным названию пункта списка, но с одной структурой содержимого.