SimpleCusorAdapter в виджете

SQLite, Preferences, файлы, SD, Content Provider, XML, JSON
Ответить
Максим Янчий
Сообщения: 77
Зарегистрирован: 21 июл 2013, 17:33

SimpleCusorAdapter в виджете

Сообщение Максим Янчий » 29 авг 2013, 16:15

Здравствуйте! Хочется в виджет получать данные из БД, но при попытке сделать БД оберткой - db= new DB(this) - ругается и на эту строчку тоже ListView lvEveryday = (ListView)findViewById(R.id.lvEveryday);!
Помогите пожалуйста! Заранее благодарен!

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: SimpleCusorAdapter в виджете

Сообщение Foenix » 30 авг 2013, 14:07

Максим, не создавай новые темы, просто постарайся, если нет ответа, переформулировать свой вопрос конкретнее, олее развернуто и с кодом.
Вообще про доступ к БД нужно как правильно сказали, обратить внимание на ContentProvider, но с ним не так просто разобраться, а уж тем более тут все о нем объяснить, это очень большая тема.
К какой базе тебе нужен доступ? где она располагается, как ты и что пишешь в коде? Объясни все это, разложи по полочкам с уважением ко времени людей, пытающихся тебе помочь..
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Максим Янчий
Сообщения: 77
Зарегистрирован: 21 июл 2013, 17:33

Re: SimpleCusorAdapter в виджете

Сообщение Максим Янчий » 30 авг 2013, 15:29

Foenix писал(а):Максим, не создавай новые темы, просто постарайся, если нет ответа, переформулировать свой вопрос конкретнее, олее развернуто и с кодом.
Вообще про доступ к БД нужно как правильно сказали, обратить внимание на ContentProvider, но с ним не так просто разобраться, а уж тем более тут все о нем объяснить, это очень большая тема.
К какой базе тебе нужен доступ? где она располагается, как ты и что пишешь в коде? Объясни все это, разложи по полочкам с уважением ко времени людей, пытающихся тебе помочь..
Простите! База данных записей. Состоит из записи в формате String. Создавая виджет пишу в onEnabled():

Код: Выделить всё

db= new DB(this);
db.open();
cursor=db.getData();
String[] from = new String[] {DB.SOMENOTE};
int[] to = new int[] {R.id.tvNote};
SimpleCursorAdapter scadapter = new SimpleCursorAdapter(this, R.layout.item, from, to);
ListView lv= (ListView)findViewById(R.id.lvWidget);
lv.setAdapter(scadapter);
Перед onEnabled объявил: При таких попытках подчеркивает здесь:
db= new DB(this);
И здесь:
SimpleCursorAdapter scadapter = new SimpleCursorAdapter(this, R.layout.item, from, to);
ListView lv= (ListView)findViewById(R.id.lvWidget);

В чем может быть проблема! Заранее спасибо за любую помощь!

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: SimpleCusorAdapter в виджете

Сообщение Foenix » 30 авг 2013, 15:57

1. ДАвай договоримся, что база данных состоит из таблиц, а не из записей.
2. Приведи код этого самого класса DB. Ты ж вызываешь конструктор класса с параметрами.
3. Ну, и как мы должны догадаться, что пишет тебе компилятор при подчеркивании?
Сделай так - наведи мышь на эту строку, появится желтое окошко. Поставь туда курсор мыши и скопируй что там написано сюда. Да и вообще неплохо почитать, что там тебе пишут-то?
***
И здесь:
SimpleCursorAdapter scadapter = new SimpleCursorAdapter(this, R.layout.item, from, to);
ListView lv= (ListView)findViewById(R.id.lvWidget);
компилятор тоже пишет в чем проблема............. :)
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Максим Янчий
Сообщения: 77
Зарегистрирован: 21 июл 2013, 17:33

Re: SimpleCusorAdapter в виджете

Сообщение Максим Янчий » 30 авг 2013, 16:18

Foenix писал(а):1. ДАвай договоримся, что база данных состоит из таблиц, а не из записей.
2. Приведи код этого самого класса DB. Ты ж вызываешь конструктор класса с параметрами.
3. Ну, и как мы должны догадаться, что пишет тебе компилятор при подчеркивании?
Сделай так - наведи мышь на эту строку, появится желтое окошко. Поставь туда курсор мыши и скопируй что там написано сюда. Да и вообще неплохо почитать, что там тебе пишут-то?
***
И здесь:
SimpleCursorAdapter scadapter = new SimpleCursorAdapter(this, R.layout.item, from, to);
ListView lv= (ListView)findViewById(R.id.lvWidget);
компилятор тоже пишет в чем проблема............. :)
в строке db= new DB(this);:

Код: Выделить всё

The constructor DB(widget) is undefined
в строке SimpleCursorAdapter scadapter = new SimpleCursorAdapter(this, R.layout.item, from, to);:

Код: Выделить всё

The constructor SimpleCursorAdapter(widget, int, Cursor, String[], int[]) is undefined
в строке ListView lv= (ListView)findViewById(R.id.lvWidget);:

Код: Выделить всё

The method findViewById(int) is undefined for the type widget

Код: Выделить всё

public class DB {

	private static final String DATABASE_NAME = "note_database.db";
		private static final int DATABASE_VERSION = 1;
		public static final String ID = "_id";
		public static final String NOTE = "note";
		
		public static final String TABLE_NAME = "note_table";
		private static final String CREATE_DATABASE = "CREATE TABLE "
				+ TABLE_NAME + " (" + ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
				+ NOTE + " VARCHAR(255));";
		private static final String DROP_TABLE = "DROP TABLE IF EXISTS "
				+ TABLE_NAME;
private final Context c;
private DBHelper dbHelper;
private SQLiteDatabase db;
public DB(Context context){
	c=context;
}
public void open(){
	dbHelper = new DBHelper(c, DATABASE_NAME, null, DATABASE_VERSION);
	db = dbHelper.getWritableDatabase();
}
public void close(){
	if (dbHelper!=null) dbHelper.close();
}
public void delete(long id){
	db.delete(TABLE_NAME, ID + "=" + id, null);
}
public Cursor getAllData(){
	return db.query(TABLE_NAME, null, null,null,null,null,null);
}
public void insert(String note) {
    ContentValues cv = new ContentValues();
    cv.put(NOTE, note);
    
   db.insert(TABLE_NAME, NOTE, cv);
  }

private class DBHelper extends SQLiteOpenHelper {
	public DBHelper(Context context, String name, CursorFactory factory, int Version){
		super(context, name, factory, Version);
	}
	public void onCreate(SQLiteDatabase db){
		db.execSQL(CREATE_DATABASE);
	
	}

	  @Override
	    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		  db.execSQL(DROP_TABLE);
		  onCreate(db);
	    }
	 
}
}

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: SimpleCusorAdapter в виджете

Сообщение Foenix » 30 авг 2013, 16:30

я с виджетами не работала, но когда создаешь объект БД, то нужно передать в конструктор контекст активити, а не виджет. У тебя активити нету, но есть объект application, поэтому попробуй взять контекст из него типа такого
Context mContext = getApplicationContext();
а затем передать это mContext в конструктор бд.
То же самое с адаптером.
***
ListView lv= (ListView)findViewById(R.id.lvWidget);:
тут не знаю, надо знать что делаешь, посмотри уроки по виджетам.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Максим Янчий
Сообщения: 77
Зарегистрирован: 21 июл 2013, 17:33

Re: SimpleCusorAdapter в виджете

Сообщение Максим Янчий » 30 авг 2013, 16:34

Foenix писал(а):я с виджетами не работала, но когда создаешь объект БД, то нужно передать в конструктор контекст активити, а не виджет. У тебя активити нету, но есть объект application, поэтому попробуй взять контекст из него типа такого
Context mContext = getApplicationContext();
а затем передать это mContext в конструктор бд.
То же самое с адаптером.
***
ListView lv= (ListView)findViewById(R.id.lvWidget);:
тут не знаю, надо знать что делаешь, посмотри уроки по виджетам.
С контекстом такую вещь уже провернул до этого, пошло, но все равно спасибо! Просто я выложил обе ошибки, чтобы выяснить, может одна влияет на другую!
Спасибо большое за помощь!

Ответить