2016-05-22 13 views
0

Ich habe immer dieses Problem, ich kann DB Daten in meiner Aktivität nicht anzeigen! meine Klasse BDHelper:SQLite - Android - Anzeige von Daten aus bestehenden DB

enter image description here

Um i, so etwas zu tun zu beginnen versucht

import java.util.ArrayList; 
import android.content.ContentValues; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.DatabaseUtils; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 

public class DataBaseHelper extends SQLiteOpenHelper { 

    public static final String DATABASE_NAME = "lm"; 
    public static final String EMP_TABLE = "contacts"; 
    public static final String _id = "id"; 
    public static final String E_NAME = "name"; 
    public static final String E_AGE = "age"; 
    public static final String E_DEPT = "dept"; 


    public DataBaseHelper(Context context) 
    { 
     super(context, DATABASE_NAME , null, 1); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     // TODO Auto-generated method stub 
     db.execSQL(
     "create table contacts " + 
     "(id integer primary key, name text,phone text,email text, street text,place text)" 
    ); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     // TODO Auto-generated method stub 
     db.execSQL("DROP TABLE IF EXISTS contacts"); 
     onCreate(db); 
    } 

    public boolean insertContact (String name, String age, String dept) 
    { 
     SQLiteDatabase db = this.getWritableDatabase(); 
     ContentValues contentValues = new ContentValues(); 
     contentValues.put("name", name); 
     contentValues.put("age", age);  
     contentValues.put("dept", dept); 
     db.insert("contacts", null, contentValues); 
     return true; 
    } 

    public Cursor getData(int id){ 
     SQLiteDatabase db = this.getReadableDatabase(); 
     Cursor res = db.rawQuery("select * from contacts where id="+id+"", null); 
     return res; 
    } 

    public int numberOfRows(){ 
     SQLiteDatabase db = this.getReadableDatabase(); 
     int numRows = (int) DatabaseUtils.queryNumEntries(db, EMP_TABLE); 
     return numRows; 
    } 

    public boolean updateContact (Integer id, String name,String age, String dept) 
    { 
     SQLiteDatabase db = this.getWritableDatabase(); 
     ContentValues contentValues = new ContentValues(); 
     contentValues.put("name", name); 
     contentValues.put("age", age);  
     contentValues.put("dept", dept); 
     db.update("contacts", contentValues, "id = ? ", new String[] { Integer.toString(id) }); 
     return true; 
    } 

    /* public Integer deleteContact (Integer id) 
    { 
     SQLiteDatabase db = this.getWritableDatabase(); 
     return db.delete("contacts", 
     "id = ? ", 
     new String[] { Integer.toString(id) }); 
    }*/ 

    public ArrayList<String> getAllCotacts() 
    { 
     ArrayList<String> array_list = new ArrayList<String>(); 

     SQLiteDatabase db = this.getReadableDatabase(); 
     Cursor res = db.rawQuery("select * from contacts", null); 
     res.moveToFirst(); 

     while(res.isAfterLast() == false){ 
     array_list.add(res.getString(res.getColumnIndex(EMP_TABLE))); 
     res.moveToNext(); 
     } 
    return array_list; 
    } 

Und ich versuche es in der Hauptaktivität angezeigt werden, das ist, warum ich tat das:

import android.app.Activity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 

public class MainActivity extends Activity { 

    public final static String EXTRA_MESSAGE = "MESSAGE"; 
    private ListView obj; 
    DataBaseHelper mydb; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     mydb = new DataBaseHelper(this); 
     ArrayAdapter<?> arrayAdapter = new ArrayAdapter<Object>(this, android.R.layout.simple_list_item_1); 

     obj = (ListView) findViewById(R.id.listView1); 
     obj.setAdapter(arrayAdapter); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 
     if (id == R.id.action_settings) { 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 
} 

Ich bekomme immer das gleiche Ergebnis: eine leere Aktivität. Ich habe es auf andere Art und Weise versucht und andere Fragen mit ähnlichen Problemen angeschaut. Ich will nur dahin kommen, wo ich es hier verpasst habe!

+0

'ArrayAdapter' ist leer ... Also, warum erwarten Sie, dass Daten da sein? –

+0

Vielleicht könnten Sie eine Methode auf 'mydb' aufrufen, um Daten zu bekommen? –

+0

** ArrayList array_list = mydb.getAllCotacts(); \t ArrayAdapter arrayAdapter = new ArrayAdapter (this, android.R.layout.simple_list_item_1, array_list); ** i verwendet, um dieses, aber es sagt: Warnung, und es muss –

Antwort

-1

Versuchen

db.execSQL(
      "create table contacts " + 
      "(id integer primary key, name text,phone text,email text, street text,place text) ; " 
); 

Siehe Semikolon zwischen text) & "? Das fehlt, damit deine Kreation nie endet.

+0

Das Bild zeigt, dass es Daten und eine Tabelle gibt. Plus, das Semikolon ist nicht wichtig für einzelne Anweisungen –

+0

Ich versuche, eine vorhandene DB zu verwenden, nicht eine zu erstellen, muss ich das löschen tho? –

+0

@ cricket_007, haben Sie eine Referenz, die ich überprüfen könnte? Diejenigen, die ich finde, sagen, dass du es in den meisten Fällen brauchst. ** S'ed Sckizo **, wie hast du die Datenbank dort hinbekommen? –

0

Ihre Tabelle erstellen auf die folgende Weise

db.execSQL(
      "create table if not exists contacts " + 
      "(id integer primary key, name text, phone text, email text, street text, place text); " 
); 

Ihre getAllContacts etwas ändern wie diese

public ArrayList<String> getAllCotacts() 
    { 
     ArrayList<String> array_list = new ArrayList<String>(); 

     SQLiteDatabase db = this.getReadableDatabase(); 
     Cursor res = db.rawQuery("select * from contacts", null); 
    if (res.getCount() != 0) { 
      for (res.moveToFirst(); !res.isAfterLast(); res.moveToNext()) { 
     array_list.add(res.getString(res.getColumnIndex(EMP_TABLE))); 
     } 
    } 
    return array_list; 
    } 

Sie benötigen onCreate zu so etwas zu ändern:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    mydb = new DataBaseHelper(this); 
    ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,mydb.getAllContacts); 

    obj = (ListView) findViewById(R.id.listView1); 
    obj.setAdapter(arrayAdapter); 
} 

Ich habe das nicht versucht, aber hoffe, das hilft :)

+0

Dank für Ihre Hilfe, aber es funktioniert nicht, immer die Leere Sache:/ plus Sie verpasst() hier: ** ArrayAdapter arrayAdapter = new ArrayAdapter (dies, android.R.layout.simple_list_item_1, mydb.getAllContacts); ** –

+0

Entschuldigung dafür. Ein ArrayAdapter <> akzeptiert normalerweise einen String [] als Parameter. Du solltest es versuchen. Bitte überprüfen Sie den aktualisierten Code – Aradhna

+0

Ihre Bearbeitung wird nicht kompiliert. Die ArrayList war korrekt. –

0

Zuerst - erstellen Sie eine Klasse namens Contact.java und erstellen Sie Set und Methoden für "ID", "Name", "Alter" und "Dept".

Second- zu yout DbAdapter Klasse gehen und diesen Code in getAllContacts setzen()

ArrayList<Contact> listContacts = new ArrayList<Contact>(); 
    // Select All Query 
    String selectQuery = "SELECT * FROM " + CONTACT ; 
    mDbHelper.getWritableDatabase(); 
    Cursor cursor = mDb.rawQuery(selectQuery, null); 
    if (cursor.moveToFirst()) { 
     do { 
      Contact contact = new Contact(); 
      contact.setId((cursor.getLong(0))); 
      contact.setName((cursor.getString(1))); 
      contact.setDept(cursor.getString(2)); 
      listContacts.add(note); 
     } while (cursor.moveToNext()); 
    } 
    return listContacts; 

Dont verwenden vergessen, die cursor.get .. Spalten Reihenfolge nach.

Hoffe es hilft

Verwandte Themen