Урок 52. SimpleCursorAdapter, пример использования

Обсуждение уроков
dimitrius
Сообщения: 17
Зарегистрирован: 21 авг 2014, 12:47

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение dimitrius » 01 ноя 2014, 12:30

понимаю что текст нужно извлекать из БД, а не адаптера. но как связать использованный в примере acmi.id c курсором, и в курсоре отобрать требуемое поле не понимаю

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

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение Foenix » 01 ноя 2014, 14:37

а это есть в уроках
R.id.team

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

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

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение Foenix » 01 ноя 2014, 14:38

кроме того это тут очень часто задаваемый вопрос!
R.id.team

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

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение doter.ua » 01 ноя 2014, 15:20

dimitrius писал(а):понимаю что текст нужно извлекать из БД, а не адаптера. но как связать использованный в примере acmi.id c курсором, и в курсоре отобрать требуемое поле не понимаю
бла бла
db.query ( ... where _id = acm.id ... )
бла бла
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

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

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение Foenix » 01 ноя 2014, 15:47

doter.ua писал(а):
dimitrius писал(а):понимаю что текст нужно извлекать из БД, а не адаптера. но как связать использованный в примере acmi.id c курсором, и в курсоре отобрать требуемое поле не понимаю
бла бла
db.query ( ... where _id = acm.id ... )
бла бла
НЕТ.
R.id.team

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

dimitrius
Сообщения: 17
Зарегистрирован: 21 авг 2014, 12:47

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение dimitrius » 02 ноя 2014, 16:13

уважаемая Phoenix уделите минуточку пожалуйста

Во втором пункте меню нужно извлечь текст из поля TABLE_EMAIL.
Для последующей отправки. Для этого будем использовать метод getEmail().
Описывать его будем в DB.java

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

public void onCreateContextMenu(ContextMenu menu, View v,
			ContextMenuInfo menuInfo) {
		super.onCreateContextMenu(menu, v, menuInfo);
		menu.add(0, 1, 0, "Удалить запись");
		menu.add(0, 2, 0, "Отправить письмо");
	}

	public boolean onContextItemSelected(MenuItem item) {
		
		if (item.getItemId() == 1) {
			// получаем из пункта контекстного меню данные по пункту списка
			AdapterContextMenuInfo acmi = 
                        (AdapterContextMenuInfo) item.getMenuInfo();
			// извлекаем id записи и удаляем соответствующую запись в БД dbh
			dbh.delRec(acmi.id);
			// обновляем курсор
			cursor.requery();
			return true;
		}
		
		if (item.getItemId() == 2) {
			
			AdapterContextMenuInfo acmi = 
			(AdapterContextMenuInfo) item.getMenuInfo();
			
			// вызываем Intent для отправки почты
			Intent Emailintent = new Intent(Intent.ACTION_SEND);
			Emailintent.setData(Uri.parse("mailto:"));

	                String[] to={dbh.sendEmail(acmi.id)};

			Emailintent.putExtra(Intent.EXTRA_EMAIL, to);
			Emailintent.putExtra(Intent.EXTRA_SUBJECT, " ");
			Emailintent.putExtra(Intent.EXTRA_TEXT, " ");
			Emailintent.setType("message/rfc822");
			startActivity(Intent.createChooser(Emailintent, "Email"));
			return true;
		}
		
		return super.onContextItemSelected(item);
	}
привожу код метода sendEmail() из класса DB

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

public String sendEmail(long idd){ 
		Cursor c = mDB.query(DB_TABLE, new String[] {TABLE_EMAIL}, null, null, null, null, null);
		
		 if (c.moveToFirst()) {
		  int emailColIndex = c.getColumnIndex(TABLE_EMAIL);
			long  id = c.getInt(c.getColumnIndex(TABLE_ID));

	        do { if(idd==id) to = c.getString(emailColIndex);                
	           
	          } while (c.moveToNext());
			} return to;
	     }
String to = null описана там где все константы; после нажатия в контекстном меню "Отправить письмо" приложение слетает и выдает следующий лог:

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

java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow.  Make sure the Cursor is initialized correctly before accessing data from it.
уважаемая Phoenix укажите пожалуйста где исправить ошибку

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение doter.ua » 02 ноя 2014, 17:08

Как подметила феникс: "в БД я нуп и бревно", но даже мне очевидно, что поиск записи в столбце с индексом -1 должен приводить к ошибке. Couldn't read row 0, col -1 from CursorWindow,
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

dimitrius
Сообщения: 17
Зарегистрирован: 21 авг 2014, 12:47

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение dimitrius » 02 ноя 2014, 17:25

Это понятно что столбца -1 не существует, подскажи что исправить, где копать. А то с виду все правильно

dimitrius
Сообщения: 17
Зарегистрирован: 21 авг 2014, 12:47

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение dimitrius » 02 ноя 2014, 17:31

вот код DB.java

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

package com.example.userdatabase;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;

public class DB {

	private static final String DB_NAME = "mydbase";
	private static final int DB_VERSION = 1;
	private static final String DB_TABLE = "mytable";

	public static final String TABLE_ID = "_id";
	public static final String TABLE_LOGIN = "login";
	public static final String TABLE_PASSWORD = "password";
	public static final String TABLE_NAME = "name";
	public static final String TABLE_EMAIL = "email";
	public static final String TABLE_PHONE = "phone";
	public static final String TABLE_WWW = "www";
	String to = null;

	private static final String DB_CREATE = "create table " + DB_TABLE + "("
			+ TABLE_ID + " integer primary key autoincrement, " 
			+ TABLE_LOGIN + " text, " + TABLE_PASSWORD + " text, " 
			+ TABLE_NAME + " text, " + TABLE_EMAIL + " text, "
			+ TABLE_PHONE + " text, " + TABLE_WWW + " text" + ");";

	private final Context mCtx;

	private DBHelper mDBHelper;
	private SQLiteDatabase mDB;

	public DB(Context ctx) {
		mCtx = ctx;
	}

	// открыть подключение
	public void open() {
		mDBHelper = new DBHelper(mCtx, DB_NAME, null, DB_VERSION);
		mDB = mDBHelper.getWritableDatabase();
	}

	// закрыть подключение
	public void close() {
		if (mDBHelper != null)
			mDBHelper.close();
	}

	// получить все данные из таблицы DB_TABLE
	public Cursor getAllData() {
		return mDB.query(DB_TABLE, null, null, null, null, null, null);
	}

	// добавить запись в DB_TABLE
	public void addRec(String txt_login, String txt_password, String txt_name, 
			           String txt_email, String txt_phone, String txt_www) {
		ContentValues cv = new ContentValues();
		cv.put(TABLE_LOGIN, txt_login);
		cv.put(TABLE_PASSWORD, txt_password);
		cv.put(TABLE_NAME, txt_name);
		cv.put(TABLE_EMAIL, txt_email);
		cv.put(TABLE_PHONE, txt_phone);
		cv.put(TABLE_WWW, txt_www);
		mDB.insert(DB_TABLE, null, cv);
	}

	// удалить запись из DB_TABLE
	public void delRec(long id) {
		mDB.delete(DB_TABLE, TABLE_ID + " = " + id, null);
	}
	
	public String sendEmail(long idd){ 
		Cursor c = mDB.query(DB_TABLE, new String[] {TABLE_EMAIL}, null, null, null, null, null);
		
		 if (c.moveToFirst()) {
		  int emailColIndex = c.getColumnIndex(TABLE_EMAIL);
			long  id = c.getInt(c.getColumnIndex(TABLE_ID));

	        do { if(idd==id) to = c.getString(emailColIndex);                
	           
	          } while (c.moveToNext());
			} return to;
	     }
	
	// класс по созданию и управлению БД
	private class DBHelper extends SQLiteOpenHelper {

		public DBHelper(Context context, String name, CursorFactory factory,
				int version) {
			super(context, name, factory, version);
		}

		// создаем и заполняем БД
		@Override
		public void onCreate(SQLiteDatabase db) {
			db.execSQL(DB_CREATE);
		}

		@Override
		public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		}
	}
}
а вот код Activity

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

package com.example.userdatabase;

import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
import android.widget.AdapterView.AdapterContextMenuInfo;

public class TwoActivity extends Activity implements OnClickListener{
	
	TextView txLogin, txPassword, txName, txEmail, txPhone, txWWW;
	String login, password, name, email, phone, www;
	Button btnConfirm, btnEdit;
	
	ListView lvData;
	DB dbh;
	SimpleCursorAdapter scAdapter;
	Cursor cursor;
	
	/** Called when the activity is first created. */
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.two);

		txLogin = (TextView) findViewById(R.id.txLogin);
		txPassword = (TextView) findViewById(R.id.txPassword);
		txName = (TextView) findViewById(R.id.txName);
		txEmail = (TextView) findViewById(R.id.txEmail);
		txPhone = (TextView) findViewById(R.id.txPhone);
	    txWWW = (TextView) findViewById(R.id.txWWW);
		
	    btnConfirm = (Button) findViewById(R.id.btnConfirm);
	    btnConfirm.setOnClickListener(this);
		
		Intent intent1 = getIntent();
        String Sicore1 = intent1.getStringExtra("Login");
        String Sicore2 = intent1.getStringExtra("Password");
        String Sicore3 = intent1.getStringExtra("Name");
        String Sicore4 = intent1.getStringExtra("Email");
        String Sicore5 = intent1.getStringExtra("Phone");
        String Sicore6 = intent1.getStringExtra("WWW");
        
        txLogin.setText(Sicore1);
        txPassword.setText(Sicore2);
        txName.setText(Sicore3);
        txEmail.setText(Sicore4);
        txPhone.setText(Sicore5);
        txWWW.setText(Sicore6);
        
     // открываем подключение к БД
     	dbh = new DB(this);
     	dbh.open();
     				
     // получаем курсор
     	cursor = dbh.getAllData();
     	startManagingCursor(cursor);
     			
     	// формируем столбцы сопоставления
     	String[] from = new String[] { DB.TABLE_LOGIN, DB.TABLE_PASSWORD, DB.TABLE_NAME, DB.TABLE_EMAIL, DB.TABLE_PHONE, DB.TABLE_WWW };
     	int[] to = new int[] { R.id.tvText1, R.id.tvText2, R.id.tvText3, R.id.tvText4, R.id.tvText5, R.id.tvText6 };

     	// создаем адаптер и настраиваем список
     	scAdapter = new SimpleCursorAdapter(this, R.layout.items, cursor, from, to);
     	lvData = (ListView) findViewById(R.id.lvData);
     	lvData.setAdapter(scAdapter);
     			
     // добавляем контекстное меню к списку
     	registerForContextMenu(lvData);
}

	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		
    switch(v.getId()) {
		
		case R.id.btnConfirm:
		
		login = txLogin.getText().toString();
		password = txPassword.getText().toString();
		name = txName.getText().toString();
		email = txEmail.getText().toString();
		phone = txPhone.getText().toString();
		www = txWWW.getText().toString();
		
		// добавляем запись
		dbh.addRec(login, password, name, email, phone, www);
		// обновляем курсор
		cursor.requery();
		
		break;
     }		
  }
	
	public void onCreateContextMenu(ContextMenu menu, View v,
			ContextMenuInfo menuInfo) {
		super.onCreateContextMenu(menu, v, menuInfo);
		menu.add(0, 1, 0, "Удалить запись");
		menu.add(0, 2, 0, "Отправить письмо");
	}

	public boolean onContextItemSelected(MenuItem item) {
		
		if (item.getItemId() == 1) {
			// получаем из пункта контекстного меню данные по пункту списка
			AdapterContextMenuInfo acmi = (AdapterContextMenuInfo) item.getMenuInfo();
			// извлекаем id записи и удаляем соответствующую запись в БД
			dbh.delRec(acmi.id);
			// обновляем курсор
			cursor.requery();
			return true;
		}
		
		if (item.getItemId() == 2) {
			
			AdapterContextMenuInfo acmi = (AdapterContextMenuInfo) item.getMenuInfo();	

			// вызываем Intent для отправки почты
			Intent Emailintent = new Intent(Intent.ACTION_SEND);
			Emailintent.setData(Uri.parse("mailto:"));
	            String[] to={dbh.sendEmail(acmi.id)};
			Emailintent.putExtra(Intent.EXTRA_EMAIL, to);
			Emailintent.putExtra(Intent.EXTRA_SUBJECT, " ");
			Emailintent.putExtra(Intent.EXTRA_TEXT, " ");
			Emailintent.setType("message/rfc822");
			startActivity(Intent.createChooser(Emailintent, "Email"));
			return true;
		}
		return super.onContextItemSelected(item);
	}

	protected void onDestroy() {
		super.onDestroy();
		// закрываем подключение при выходе
		dbh.close();
	}
}

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение doter.ua » 02 ноя 2014, 18:51

номер строчки в которой ошибка, а лучше сразу кусок из LogCat
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

dimitrius
Сообщения: 17
Зарегистрирован: 21 авг 2014, 12:47

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение dimitrius » 02 ноя 2014, 20:53

Смотрите? вот таков наш Logcat

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

11-02 17:45:25.313: E/CursorWindow(1285): Failed to read row 0, column -1 from a CursorWindow which has 4 rows, 1 columns.
11-02 17:45:25.313: E/InputEventReceiver(1285): Exception dispatching input event.
11-02 17:45:25.317: E/MessageQueue-JNI(1285): Exception in MessageQueue callback: handleReceiveCallback
11-02 17:45:25.325: E/MessageQueue-JNI(1285): java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow.  Make sure the Cursor is initialized correctly before accessing data from it.
11-02 17:45:25.325: E/MessageQueue-JNI(1285): 	at android.database.CursorWindow.nativeGetLong(Native Method)
11-02 17:45:25.325: E/MessageQueue-JNI(1285): 	at android.database.CursorWindow.getLong(CursorWindow.java:507)
11-02 17:45:25.325: E/MessageQueue-JNI(1285): 	at android.database.CursorWindow.getInt(CursorWindow.java:574)
11-02 17:45:25.325: E/MessageQueue-JNI(1285): 	at android.database.AbstractWindowedCursor.getInt(AbstractWindowedCursor.java:69)
11-02 17:45:25.325: E/MessageQueue-JNI(1285): 	at com.example.userdatabase.DB.sendEmail(DB.java:82)
11-02 17:45:25.325: E/MessageQueue-JNI(1285): 	at com.example.userdatabase.TwoActivity.onContextItemSelected(TwoActivity.java:150)
11-02 17:45:25.325: E/MessageQueue-JNI(1285): 	at android.app.Activity.onMenuItemSelected(Activity.java:2552)
11-02 17:45:25.325: E/MessageQueue-JNI(1285): 	at com.android.internal.policy.impl.PhoneWindow$DialogMenuCallback.onMenuItemSelected(PhoneWindow.java:3601)
11-02 17:45:25.325: E/MessageQueue-JNI(1285): 	at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:735)
11-02 17:45:25.325: E/MessageQueue-JNI(1285): 	at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:149)
11-02 17:45:25.325: E/MessageQueue-JNI(1285): 	at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:874)
11-02 17:45:25.325: E/MessageQueue-JNI(1285): 	at com.android.internal.view.menu.MenuDialogHelper.onClick(MenuDialogHelper.java:167)
11-02 17:45:25.325: E/MessageQueue-JNI(1285): 	at com.android.internal.app.AlertController$AlertParams$3.onItemClick(AlertController.java:924)
11-02 17:45:25.325: E/MessageQueue-JNI(1285): 	at android.widget.AdapterView.performItemClick(AdapterView.java:298)
11-02 17:45:25.325: E/MessageQueue-JNI(1285): 	at android.widget.AbsListView.performItemClick(AbsListView.java:1086)
11-02 17:45:25.325: E/MessageQueue-JNI(1285): 	at android.widget.AbsListView$PerformClick.run(AbsListView.java:2855)
11-02 17:45:25.325: E/MessageQueue-JNI(1285): 	at android.widget.AbsListView.onTouchEvent(AbsListView.java:3541)
11-02 17:45:25.325: E/MessageQueue-JNI(1285): 	at android.view.View.dispatchTouchEvent(View.java:7127)
11-02 17:45:25.325: E/MessageQueue-JNI(1285): 	at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2170)
11-02 17:45:25.325: E/MessageQueue-JNI(1285): 	at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1905)
11-02 17:45:25.325: E/MessageQueue-JNI(1285): 	at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2176)
11-02 17:45:25.325: E/MessageQueue-JNI(1285): 	at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1919)
11-02 17:45:25.325: E/MessageQueue-JNI(1285): 	at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2176)
11-02 17:45:25.325: E/MessageQueue-JNI(1285): 	at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1919)
11-02 17:45:25.325: E/MessageQueue-JNI(1285): 	at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2176)
11-02 17:45:25.325: E/MessageQueue-JNI(1285): 	at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1919)
11-02 17:45:25.325: E/MessageQueue-JNI(1285): 	at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2176)
11-02 17:45:25.325: E/MessageQueue-JNI(1285): 	at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1919)
11-02 17:45:25.325: E/MessageQueue-JNI(1285): 	at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2176)
11-02 17:45:25.325: E/MessageQueue-JNI(1285): 	at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1919)
11-02 17:45:25.325: E/MessageQueue-JNI(1285): 	at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1925)
11-02 17:45:25.325: E/MessageQueue-JNI(1285): 	at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1379)
11-02 17:45:25.325: E/MessageQueue-JNI(1285): 	at android.app.Dialog.dispatchTouchEvent(Dialog.java:736)
11-02 17:45:25.325: E/MessageQueue-JNI(1285): 	at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1873)
11-02 17:45:25.325: E/MessageQueue-JNI(1285): 	at android.view.View.dispatchPointerEvent(View.java:7307)
11-02 17:45:25.325: E/MessageQueue-JNI(1285): 	at android.view.ViewRootImpl.deliverPointerEvent(ViewRootImpl.java:3172)
11-02 17:45:25.325: E/MessageQueue-JNI(1285): 	at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:3117)
11-02 17:45:25.325: E/MessageQueue-JNI(1285): 	at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:4153)
11-02 17:45:25.325: E/MessageQueue-JNI(1285): 	at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:4132)
11-02 17:45:25.325: E/MessageQueue-JNI(1285): 	at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:4224)
11-02 17:45:25.325: E/MessageQueue-JNI(1285): 	at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:171)
11-02 17:45:25.325: E/MessageQueue-JNI(1285): 	at android.os.MessageQueue.nativePollOnce(Native Method)
11-02 17:45:25.325: E/MessageQueue-JNI(1285): 	at android.os.MessageQueue.next(MessageQueue.java:125)
11-02 17:45:25.325: E/MessageQueue-JNI(1285): 	at android.os.Looper.loop(Looper.java:124)
11-02 17:45:25.325: E/MessageQueue-JNI(1285): 	at android.app.ActivityThread.main(ActivityThread.java:4745)
11-02 17:45:25.325: E/MessageQueue-JNI(1285): 	at java.lang.reflect.Method.invokeNative(Native Method)
11-02 17:45:25.325: E/MessageQueue-JNI(1285): 	at java.lang.reflect.Method.invoke(Method.java:511)
11-02 17:45:25.325: E/MessageQueue-JNI(1285): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
11-02 17:45:25.325: E/MessageQueue-JNI(1285): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
11-02 17:45:25.325: E/MessageQueue-JNI(1285): 	at dalvik.system.NativeStart.main(Native Method)
11-02 17:45:25.325: D/AndroidRuntime(1285): Shutting down VM

dimitrius
Сообщения: 17
Зарегистрирован: 21 авг 2014, 12:47

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение dimitrius » 02 ноя 2014, 20:57

Всмысле я имел ввиду смотрите, вот такой наш Logcat)

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

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение Foenix » 03 ноя 2014, 19:16

посмотри создавшуюся таблицу, судя по логу, у тебя нет столбца _id
а может и есть,
и перед строчкой
if (c.moveToFirst()) {
хорошо бы проверять - есть ли вообще в результативном курсоре записи
R.id.team

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

dimitrius
Сообщения: 17
Зарегистрирован: 21 авг 2014, 12:47

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение dimitrius » 04 ноя 2014, 02:48

Phoenix Вы просто Богиня))) сработало, просто при создании курсора для отправки смс во вкладку columns не добавил столбец из таблицы TABLE_ID :

Cursor c = mDB.query(DB_TABLE, new String[] {TABLE_ID, TABLE_EMAIL}, null, null, null, null, null); - вот так работает))))

dimitrius
Сообщения: 17
Зарегистрирован: 21 авг 2014, 12:47

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение dimitrius » 04 ноя 2014, 09:11

и подскажите еще, реально ли из разных фрагментов одного Activity с помощью таких же методов (типа addRec(), delRec(), getAllData(), определенных в отдельном классе DB.java) реализовать в одном из фрагментов запись в базу а в другом из фрагментов - вывод данных базы (к примеру в виде списка)

Или для подобных задач обязателен Content Provider? спасибо)

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение doter.ua » 04 ноя 2014, 10:25

dimitrius писал(а):и подскажите еще, реально ли из разных фрагментов одного Activity с помощью таких же методов (типа addRec(), delRec(), getAllData(), определенных в отдельном классе DB.java) реализовать в одном из фрагментов запись в базу а в другом из фрагментов - вывод данных базы (к примеру в виде списка)

Или для подобных задач обязателен Content Provider? спасибо)
Создаешь отдельный класс для ДБ (если раньше использовал вложенный)
Теперь там, где нужен функционал (CRUD создание,удаление,вставка и т.д.) этого класса создаешь экземпляр MyDBClass db = new MyDBClass();

НУ у тебя он итак отдельно, поэтому просто в нужном месте должен быть создан екземпляр класса ДБ. Главное с транзакциями не начудить.
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

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

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение Foenix » 04 ноя 2014, 10:43

если оставлять старый вариант, лучше сделать синглтон со ссылкой на этот класс (я делала в классе application). Но по-моему это не совсем, долго меня мучило, что может где-то вылезти нехорошие вещи и я перешла на контент-провайдеры и не жалею об этом. Теперь это просто стандарт общения с бд. Если хотите дальше программировать - лучше разобраться с этим. В вебинаре я все главные моменты описывала.
R.id.team

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

dimitrius
Сообщения: 17
Зарегистрирован: 21 авг 2014, 12:47

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение dimitrius » 04 ноя 2014, 21:05

Так и чувствовал что предстоит) спасибо, а где вебинар можно послушать, посмотреть?

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

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение Foenix » 04 ноя 2014, 21:33

все ссылки в ветке этого форума R.id.team
R.id.team

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

aleksbim
Сообщения: 81
Зарегистрирован: 02 фев 2013, 02:52

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение aleksbim » 27 янв 2015, 17:03

Список выведен путем выборки из БД.
Теперь элементы не удаляются через контекстное меню.

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

public boolean onContextItemSelected(MenuItem item) {
		    if (item.getItemId() == CM_DELETE_ID) {		    
		      AdapterContextMenuInfo acmi = (AdapterContextMenuInfo) item.getMenuInfo();
		      if(cursorH.moveToPosition(acmi.position)){ 
		    	  dbHistory.delete("tableHistory", "_id" + " = " + (acmi.id), null);//   
		    	  cursorH.requery();
		    	 }
		      return true;
		    }
		    return super.onContextItemSelected(item);
		  }
Предполагаю, что вопрос следует задать так:
if(cursorH.moveToPosition(что теперь должно быть здесь?)){
dbHistory.delete("tableHistory", "_id" + " = " + (и здесь?), null);//

Ответить