ver una tutorial studio proyectos para hacer funciona fichero español ejemplo datos crear con como acceder android sqlite listview

tutorial - Android Configuración de los valores de la base de datos sqlite en una lista



sqlite android tutorial español (1)

Me estoy enfrentando a un problema al configurar un ListView en Android. Todo funciona bien, pero no está configurado de la manera que quiero que se establezca. aquí están las imágenes que están pasando

cuando agrego los datos, se muestra bien e inserta los datos con precisión, pero cuando retrocedo y luego de nuevo comienza la actividad, recupera los datos y los muestra en una sola fila de la vista de lista.

1) Quiero mostrar los datos de cada entrada en diferentes elementos de lista. No sé cómo puedo lograrlo.

2) cuando empiece la actividad, debería mostrar todas las entradas de la base de datos y cuando agregue el nuevo elemento, debería agregarse a la lista anterior. pero lo que realmente sucede es que cuando ya hay 3 registros y agrego un registro más, muestra el último registro agregado. los registros agregados previamente se han ido. No sé por qué no se muestran.

aquí está mi código :

public class noticall extends ListActivity { CustomDateTimePicker custom; TextView tv,tv1; EditText ed; String store; static String Names; public static final int PICK_CONTACT = 1; String [] adi ; String [] adi1 ; String [] adi2 ; String [] adi3 ; static int incre=0; ArrayList<String> myrows = new ArrayList<String>(); ArrayList<String> time1 = new ArrayList<String>(); ArrayList<String> name1 = new ArrayList<String>(); ArrayList<String> number1 = new ArrayList<String>(); private PendingIntent pendingIntent; ListView listview; String temp1 ,temp2 ; int x=0; OnItemClickListener listener; String Date,Time,Name,Number; MyNotiAdapter adp; private SQLiteAdapter mySQLiteAdapter = new SQLiteAdapter(noticall.this); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.notify); listview = (ListView) findViewById(android.R.id.list); listview.setDividerHeight(2); custom = new CustomDateTimePicker(noticall.this,new CustomDateTimePicker.ICustomDateTimeListener() { @Override public void onCancel() { finish(); } @Override public void onSet(Dialog dialog, Calendar calendarSelected,Date dateSelected, int year, String monthFullName, String monthShortName, int monthNumber, int date, String weekDayFullName, String weekDayShortName, int hour24, int hour12, int min, int sec, String AM_PM) { Calendar calendar = Calendar.getInstance(); calendar.set(year, monthNumber, date, hour24, min, 0); long when = calendar.getTimeInMillis(); // notification time Intent myIntent = new Intent(noticall.this, MyReceiver.class); pendingIntent = PendingIntent.getBroadcast(noticall.this, 0, myIntent,0); AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE); alarmManager.set(AlarmManager.RTC, calendar.getTimeInMillis(), pendingIntent); Date = calendarSelected.get(Calendar.DAY_OF_MONTH) + "/" + (monthNumber+1) + "/" +year; Time = hour12 + ":" + min + " " + AM_PM; setlisto(Date); //Toast.makeText(noticall.this, store, Toast.LENGTH_SHORT).show(); } }); custom.set24HourFormat(false); custom.setDate(Calendar.getInstance()); findViewById(R.id.button_date).setOnClickListener( new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); startActivityForResult(intent,PICK_CONTACT); custom.showDialog(); incre++; } }); read_db(); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(resultCode != RESULT_CANCELED){ if (requestCode == 1) { // Get the URI that points to the selected contact Uri contactUri = data.getData(); // We only need the NUMBER column, because there will be only one row in the result String[] projection = {ContactsContract.CommonDataKinds.Phone.NUMBER, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.CONTACT_ID}; String[] segments = contactUri.toString().split("/"); String id = segments[segments.length - 1]; // Perform the query on the contact to get the NUMBER column // We don''t need a selection or sort order (there''s only one result for the given URI) // CAUTION: The query() method should be called from a separate thread to avoid blocking // your app''s UI thread. (For simplicity of the sample, this code doesn''t do that.) // Consider using CursorLoader to perform the query. Cursor cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, projection, null, null, null); cursor.moveToFirst(); while (!cursor.isAfterLast()) { int cid = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID); String contactid = cursor.getString(cid); if (contactid.equals(id)) { // Retrieve the phone number from the NUMBER column int column = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER); String number = cursor.getString(column); // Retrieve the contact name from the DISPLAY_NAME column int column_name = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME); String name = cursor.getString(column_name); // Do something with the phone number... // Toast.makeText(this, "I added the Contact: /n" + name + " " + number, Toast.LENGTH_SHORT).show(); // ed.setText(name+" - "+number); Name= Names=name; Number =number; } cursor.moveToNext(); } cursor.close(); } } } public void setlisto(String one ){ // Log.e("setlistoo",one+""); myrows.add(one); time1.add(Time); name1.add(Name); number1.add(Number); adi=myrows.toArray(new String[myrows.size()]); adi1=time1.toArray(new String[time1.size()]); adi2=name1.toArray(new String[name1.size()]); adi3=number1.toArray(new String[number1.size()]); x++; listview.setAdapter(new MyNotiAdapter(noticall.this, adi,adi1,adi2,adi3)); Log.i("a=",one+""); Log.i("b=",Time+""); Log.i("c=",Name+""); Log.i("d=",Number+""); mySQLiteAdapter = new SQLiteAdapter(noticall.this); mySQLiteAdapter.openToWrite(); mySQLiteAdapter.insert(one,Time,Name,Number); mySQLiteAdapter.close(); } public void del_db(){ mySQLiteAdapter = new SQLiteAdapter(noticall.this); mySQLiteAdapter.openToWrite(); mySQLiteAdapter.deleteAll(); } public void read_db(){ Log.e("jsahbdv", "munda agaya medaan men hay jamaalo"); mySQLiteAdapter.openToRead(); Cursor cursor = mySQLiteAdapter.getAllData(); startManagingCursor(cursor); String[] from = new String[]{SQLiteAdapter.KEY_Name,SQLiteAdapter.KEY_Number,SQLiteAdapter.KEY_Date,SQLiteAdapter.KEY_Time}; int[] to = new int[]{R.id.dato,R.id.tym,R.id.person,R.id.edu}; SimpleCursorAdapter cursorAdapter = new SimpleCursorAdapter(noticall.this, R.layout.row2, cursor, from, to); while (cursor.moveToNext()){ cursor.getString(0); cursor.getString(1); cursor.getString(2); cursor.getString(3); cursor.getString(4); /* strBfr.append("Id :"+ cursor.getString(0) + "/n"); strBfr.append("Name:" + cursor.getString(1) + "/n"); strBfr.append("Number:" +cursor.getString(2) + "/n"); strBfr.append("Date:" + cursor.getString(3) + "/n"); strBfr.append("Time:" + cursor.getString(4) + "/n"); */ Log.i("Error", cursor.getString(0)+""); Log.i("Error", cursor.getString(1)+""); Log.i("Error", cursor.getString(2)+""); Log.i("Error", cursor.getString(3)+""); Log.i("Error 8", cursor.getString(4)+""); listview.setAdapter(cursorAdapter); } } }

clase de adaptador sqlite :

public class SQLiteAdapter { public static final String MYDATABASE_NAME = "notidb.db"; public static final String MYDATABASE_TABLE = "MY_TABLE"; public static final int MYDATABASE_VERSION = 1; public static final String KEY_ID = "_id"; public static final String KEY_Name = "Name"; public static final String KEY_Number = "Number"; public static final String KEY_Date = "Date"; public static final String KEY_Time = "Time"; //create table MY_DATABASE (ID integer primary key, Content text not null); private static final String SCRIPT_CREATE_DATABASE = "create table " + MYDATABASE_TABLE + " (" + KEY_ID + " integer primary key autoincrement, " + KEY_Name + " text not null, " + KEY_Number + " text not null, " + KEY_Date + " text not null, " + KEY_Time + " text not null);"; private SQLiteHelper sqLiteHelper; private SQLiteDatabase sqLiteDatabase; private Context context; public SQLiteAdapter(Context c){ context = c; } public SQLiteAdapter openToRead() throws android.database.SQLException { sqLiteHelper = new SQLiteHelper(context, MYDATABASE_NAME, null, MYDATABASE_VERSION); sqLiteDatabase = sqLiteHelper.getReadableDatabase(); return this; } public SQLiteAdapter openToWrite() throws android.database.SQLException { sqLiteHelper = new SQLiteHelper(context, MYDATABASE_NAME, null, MYDATABASE_VERSION); sqLiteDatabase = sqLiteHelper.getWritableDatabase(); return this; } public void close(){ sqLiteHelper.close(); } public long insert(String content,String content1,String content2,String content3){ ContentValues contentValues = new ContentValues(); contentValues.put(KEY_Name, content.toString()); contentValues.put(KEY_Number, content1.toString()); contentValues.put(KEY_Date, content2.toString()); contentValues.put(KEY_Time, content3.toString()); return sqLiteDatabase.insert(MYDATABASE_TABLE, null, contentValues); } public int deleteAll(){ return sqLiteDatabase.delete(MYDATABASE_TABLE, null, null); } public Cursor queueAll(){ String[] columns = new String[]{KEY_ID, KEY_Name, KEY_Number, KEY_Date, KEY_Time}; Cursor cursor = sqLiteDatabase.query(MYDATABASE_TABLE, columns,null, null, null, null, null); return cursor; } public Cursor getAllData() { SQLiteDatabase db= sqLiteHelper.getWritableDatabase(); Cursor res=db.rawQuery("select * from "+MYDATABASE_TABLE,null); return res; } public class SQLiteHelper extends SQLiteOpenHelper { public SQLiteHelper(Context context, String name, CursorFactory factory, int version) { super(context, name, factory, version); } @Override public void onCreate(SQLiteDatabase db) { // TODO Auto-generated method stub db.execSQL(SCRIPT_CREATE_DATABASE); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO Auto-generated method stub // Drop older table if existed db.execSQL("DROP TABLE IF EXISTS " + MYDATABASE_TABLE); // Create tables again onCreate(db); } } }

relacionado con this = Android Store Listview data en la base de datos SQlite y recuperación de datos en creación de actividad en Listview

¿Cómo puedo establecer este problema o cómo puedo leer las filas de acuerdo con los ids y luego establecer en ListView ... por favor, ayúdenme chicos ...


Está utilizando adaptadores múltiples en su vista de lista.

listview.setAdapter(new MyNotiAdapter(noticall.this, adi,adi1,adi2,adi3));

Y después

listview.setAdapter(cursorAdapter);

Si bien, sí, el código se ejecuta, está viendo algunos resultados inesperados.

Por ejemplo, esa segunda imagen parece que está mostrando un Arraylist en una fila en lugar de un elemento por fila.

Y eso es probablemente causado por esta línea donde toString algunas listas de arreglos

mySQLiteAdapter.insert(myrows.toString(),time1.toString(),name1.toString(),number1.toString());

Entonces, mi sugerencia es usar un adaptador (probablemente solo un CursorAdapter ya que está usando SQLite) para mostrar sus datos. Y puede establecer setAdapter solo una vez dentro de onCreate y nunca necesitará volver a configurarlo. Solo recarga el cursor.

Otra cosa a tener en cuenta. No itere en el cursor después de agregarlo a un adaptador. Debido a que el adaptador lee el cursor y muestra su contenido, luego está agotando el iterador.

Cursor cursor = mySQLiteAdapter.getAllData(); startManagingCursor(cursor); // ... SimpleCursorAdapter cursorAdapter = new SimpleCursorAdapter(noticall.this, R.layout.row2, cursor, from, to); while (cursor.moveToNext()){ // <--- This is bad