Re: Урок 136. CursorLoader
Добавлено: 29 янв 2015, 13:32
конечно нет
Добро пожаловать на форум сайта
http://forum.startandroid.ru/
Код: Выделить всё
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DB {
String city[]={"Абакан", "Черногорск", "Минусинск", "Красноярск","Москва","Санкт-Питербург","Новосибирск",
"Новокузнецк","Екатеренбург","Нижний Новгород","Казань","Самара","Челябинск","Омск",
"Ростов-на-Дону","Уфа","Пермь","Волгоград","Воронеж"};
private static final String DB_NAME = "AutoLab";
private static final int DB_VERSION = 1;
private static final String DB_TABLE = "city";
public static final String COLUMN_ID = "_id";
public static final String COLUMN_TXT = "city";
private static final String DB_CREATE =
"create table " + DB_TABLE + "(" +
COLUMN_ID + " integer primary key autoincrement, " +
COLUMN_TXT + " 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) {
ContentValues cv = new ContentValues();
cv.put(COLUMN_TXT, txt);
mDB.insert(DB_TABLE, null, cv);
}
// удалить запись из DB_TABLE
public void delRec(long id) {
mDB.delete(DB_TABLE, COLUMN_ID + " = " + id, null);
}
// класс по созданию и управлению БД
private class DBHelper extends SQLiteOpenHelper {
public DBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory,
int version) {
super(context, name, factory, version);
}
public void onCreate(SQLiteDatabase db) {
db.execSQL(DB_CREATE);
ContentValues cv = new ContentValues();
// заполним таблицу
for (int i = 0; i < 20; i++) {
cv.put(COLUMN_TXT, city[i]);
db.insert(DB_TABLE, null, cv);
}
}
@Override
public void onUpgrade (SQLiteDatabase db,int oldVersion, int newVersion){
}
}
}
Код: Выделить всё
import java.util.concurrent.TimeUnit;
import android.content.Context;
import android.database.Cursor;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.LoaderManager.LoaderCallbacks;
import android.support.v4.content.CursorLoader;
import android.support.v4.content.Loader;
import android.support.v4.widget.SimpleCursorAdapter;
import android.widget.ListView;
public class MainActivity extends FragmentActivity implements LoaderCallbacks<Cursor> {
private static final int CM_DELETE_ID = 1;
ListView lvData;
DB db;
SimpleCursorAdapter scAdapter;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// открываем подключение к БД
db = new DB(this);
db.open();
// формируем столбцы сопоставления
String[] from = new String[] {DB.COLUMN_TXT };
int[] to = new int[] { R.id.tvText };
// создааем адаптер и настраиваем список
scAdapter = new SimpleCursorAdapter(this, R.layout.city, null, from, to, 0);
lvData = (ListView) findViewById(R.id.lvData);
lvData.setAdapter(scAdapter);
// добавляем контекстное меню к списку
registerForContextMenu(lvData);
// создаем лоадер для чтения данных
getSupportLoaderManager().initLoader(0, null, this);
}
protected void onDestroy() {
super.onDestroy();
// закрываем подключение при выходе
db.close();
}
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle bndl) {
return new MyCursorLoader(this, db);
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
scAdapter.swapCursor(cursor);
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
}
static class MyCursorLoader extends CursorLoader {
DB db;
public MyCursorLoader(Context context, DB db) {
super(context);
this.db = db;
}
@Override
public Cursor loadInBackground() {
Cursor cursor = db.getAllData();
try {
TimeUnit.SECONDS.sleep(3);
} catch (InterruptedException e) {
e.printStackTrace();
}
return cursor;
}
}
}
Код: Выделить всё
// заполним таблицу
for (int i = 0; i < 19; i++) {
cv.put(COLUMN_TXT, city[i]);
db.insert(DB_TABLE, null, cv);
}
Код: Выделить всё
lvData.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Log.d(LOG_TAG, "itemClick: city = " + position + ", id = "
+ id);
}
});
Код: Выделить всё
Toast.makeText(getApplicationContext(),"Вы выбрали город = "
+ lvData.getItemIdAtPosition(position).toString(),Toast.LENGTH_SHORT ).show();
Код: Выделить всё
import java.util.concurrent.TimeUnit;
import android.content.Context;
import android.database.Cursor;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.LoaderManager.LoaderCallbacks;
import android.support.v4.content.CursorLoader;
import android.support.v4.content.Loader;
import android.support.v4.widget.SimpleCursorAdapter;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;
public class MainActivity extends FragmentActivity implements LoaderCallbacks<Cursor> {
final String LOG_TAG = "myLogs";
private static final int CM_DELETE_ID = 1;
ListView lvData;
DB db;
SimpleCursorAdapter scAdapter;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// открываем подключение к БД
db = new DB(this);
db.open();
// формируем столбцы сопоставления
String[] from = new String[] {DB.COLUMN_TXT };
int[] to = new int[] { R.id.tvText };
// создааем адаптер и настраиваем список
scAdapter = new SimpleCursorAdapter(this, R.layout.city, null, from, to, 0);
lvData = (ListView) findViewById(R.id.lvData);
lvData.setAdapter(scAdapter);
lvData.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// Log.d(LOG_TAG, "itemClick: city = " + position + ", id = "
// + id);
Toast.makeText(getApplicationContext(),"Вы выбрали город = "
+ lvData.getItemIdAtPosition(position).toString(),Toast.LENGTH_SHORT ).show();
}
});
// добавляем контекстное меню к списку
registerForContextMenu(lvData);
// создаем лоадер для чтения данных
getSupportLoaderManager().initLoader(0, null, this);
}
protected void onDestroy() {
super.onDestroy();
// закрываем подключение при выходе
db.close();
}
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle bndl) {
return new MyCursorLoader(this, db);
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
scAdapter.swapCursor(cursor);
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
}
static class MyCursorLoader extends CursorLoader {
DB db;
public MyCursorLoader(Context context, DB db) {
super(context);
this.db = db;
}
@Override
public Cursor loadInBackground() {
Cursor cursor = db.getAllData();
try {
TimeUnit.SECONDS.sleep(3);
} catch (InterruptedException e) {
e.printStackTrace();
}
return cursor;
}
}
}
Код: Выделить всё
lvData.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
String selectedItem=lvData.getItemAtPosition(position).toString();
Log.d(LOG_TAG, "itemClick: city = " + selectedItem + ", id = "
+ id);
Код: Выделить всё
import java.util.concurrent.TimeUnit;
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;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.content.CursorLoader;
import android.support.v4.content.Loader;
import android.support.v4.widget.SimpleCursorAdapter;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.ListView;
import android.widget.TextView;
Ругается на передаваемые аргументы, что-то не то передаешь.Cliffman писал(а):ошибка The method initLoader(int, Bundle, LoaderManager.LoaderCallbacks<D>) in the type LoaderManager is not applicable for the arguments (int, null, ListActivity)
в строке getSupportLoaderManager().initLoader(0, null, this);
мой импортextends FragmentActivity естьКод: Выделить всё
import java.util.concurrent.TimeUnit; 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; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.support.v4.content.CursorLoader; import android.support.v4.content.Loader; import android.support.v4.widget.SimpleCursorAdapter; import android.view.ContextMenu; import android.view.ContextMenu.ContextMenuInfo; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.AdapterView.AdapterContextMenuInfo; import android.widget.ListView; import android.widget.TextView;
мин minSdkVersion="12" (в инете нашел, что ниже 11 сдк может давать такую ошибку)
Код: Выделить всё
import android.content.ContentValues;
import android.content.Context;
import android.content.res.Resources;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.widget.Toast;
public class DB {
String city[]={"test","test","test","test","test","test","test","test","test","test","test","test","test","test","test",
"test","test","test","test","test","test","test","test","test","test","test","test","test","test","test",
"test","test","test","test","test","test","test","test","test","test","test","test","test"
};
String cto[]={"test123","test123","test123","test123","test123","test123","test123","test123","test123","test123",
"test123","test123","test123","test123","test123","test123","test123","test123","test123","test123","test123",
"test123","test123","test123","test123","test123","test123","test123","test123","test123","test123","test123",
"test123","test123","test123","test123","test123","test123","test123","test123","test123","test123","test123"};
private static final String DB_NAME = "AutoLab";
private static final int DB_VERSION = 1;
private static final String DB_TABLE = "city";
public static final String COLUMN_ID = "_id";
public static final String COLUMN_TXT = "city";
private static final String DB_CTO = "cto";
public static final String CTO_ID = "_id";
public static final String CTO_TXT = "cto";
private static final String DB_CREATE =
"create table " +
DB_TABLE + "(" +
COLUMN_ID + " integer primary key autoincrement, " +
COLUMN_TXT + " text" +
");";
private static final String CTO_CREATE =
"create table " +
DB_CTO + "(" +
CTO_ID + " integer primary key autoincrement, " +
CTO_TXT + " 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);
}
// класс по созданию и управлению БД
private class DBHelper extends SQLiteOpenHelper {
public DBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory,
int version) {
super(context, name, factory, version);
}
public void onCreate(SQLiteDatabase db) {
db.execSQL(DB_CREATE);
ContentValues cv = new ContentValues();
// заполним таблицу
for (int i = 0; i < city.length; i++) {
cv.put(COLUMN_TXT, city[i]);
db.insert(DB_TABLE, null, cv);
}
db.execSQL(CTO_CREATE);
for (int i = 0; i < cto.length; i++) {
cv.put(CTO_TXT, cto[i]);
db.insert(DB_CTO, null, cv);
}
}
@Override
public void onUpgrade (SQLiteDatabase db,int oldVersion, int newVersion){
}
}
}
Код: Выделить всё
public Cursor getCity_CTO() {
String sqlQuery = "select ct._id, ct.cto, ci.city as city "
+ "From cto as ct "
+ "INNER JOIN city ci "
+ "on ct.city_id = ci._id "
+ "where city = ?";
return mDB.rawQuery(sqlQuery, new String[] {"Test"});
}