简体   繁体   中英

Populate Android Listview from SQLite database

I've been trying to populate an Android Listview from a SQLite database using the code below. I have successfully done this from an array inside the same class. But in this case I'm attempting to populate it from a String array I have returned from another class. I'm new to this so am possibly doing this completely wrong. If anyone could look at the code and advise to what I'm doing wrong that'd be brilliant.

Any help would be really appreciated with this as I'm under serious pressure to get it finished, Thanks!

LoginActivity Class

public class LoginActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.login);
    final EditText txtUserName = (EditText)findViewById(R.id.txtUsername);
    final EditText txtPassword = (EditText)findViewById(R.id.txtPassword);
    Button btnLogin = (Button)findViewById(R.id.btnLogin);
    btnLogin.setOnClickListener(new OnClickListener(){

        @Override
        public void onClick(View v) {
            String username = txtUserName.getText().toString();
            String password = txtPassword.getText().toString();

            try{
                if(username.length() > 0 && password.length() >0)
                {
                    DBUserAdapter dbUser = new DBUserAdapter(LoginActivity.this);
                    dbUser.open();

                    int UID = dbUser.Login(username, password);

                    if(UID != -1)
                    {
                        // TEST
                        //int UID = dbUser.getUserID(username, password);
                        //getSitesByClientname(UID);
                        // END TEST
                        // MY TEST CODE TO CHANGE ACTIVITY TO CLIENT SITES
                                Intent myIntent = new Intent(LoginActivity.this, ClientSites.class);
                                //Intent myIntent = new Intent(getApplicationContext(), ClientSites.class);
                                myIntent.putExtra("userID", UID);
                                startActivity(myIntent);
                                //finish();
                        // END MY TEST CODE

                        //Cursor UserID = dbUser.getUserID();

                        Toast.makeText(LoginActivity.this,"Successfully Logged In", Toast.LENGTH_LONG).show();
                    }else{
                        Toast.makeText(LoginActivity.this,"Invalid Username/Password", Toast.LENGTH_LONG).show();
                    }
                    dbUser.close();
                }

            }catch(Exception e)
            {
                Toast.makeText(LoginActivity.this,e.getMessage(), Toast.LENGTH_LONG).show();
            }
        }

    });
}

}

Method from DBHelper Class to return String Array

public String[] getSitesByClientname(String id) {
    String[] args={id};

    //return db.rawQuery("SELECT client_sitename FROM " + CLIENT_SITES_TABLE + " WHERE client_id=?", args);

        Cursor myCursor = db.rawQuery("SELECT client_sitename FROM " + CLIENT_SITES_TABLE + " WHERE client_id=?", args);
        // loop through all rows and adding to array
        int count;
        count = myCursor.getCount();
        final String[] results = new String[count];
        results[0] = new String();
        int i = 0;
        try{
            if (myCursor.moveToFirst()) {
                do {
                    results[i] = myCursor.getString(myCursor.getColumnIndex("client_sitename"));

                } while (myCursor.moveToNext());
            }   
        }finally{
            myCursor.close();
        }   
        db.close();
        // return results array
        return results; 

ClientSites Class

public class ClientSites extends ListActivity {

    public final static String ID_EXTRA="com.example.loginfromlocal._ID";

    private DBUserAdapter dbHelper = null;
    //private Cursor ourCursor = null;
    private ArrayAdapter<String> adapter=null;


    //@SuppressWarnings("deprecation")
    @SuppressLint("NewApi")
    public void onCreate(Bundle savedInstanceState) {
        try
        {
            super.onCreate(savedInstanceState);
            //setContentView(R.layout.client_sites);

            Intent i = getIntent();
            String uID = String.valueOf(i.getIntExtra("userID", 0));
            //int uID = i.getIntExtra("userID", 0);

            //ListView myListView = (ListView)findViewById(R.id.myListView);

            dbHelper = new DBUserAdapter(this);

            dbHelper.createDatabase();

            //dbHelper.openDataBase();
            dbHelper.open();

            String[] results = dbHelper.getSitesByClientname(uID);

            //setListAdapter(new ArrayAdapter<String>(ClientSites.this, R.id.myListView, results));
            //adapter = new ArrayAdapter<String>(ClientSites.this, R.id.myListView, results);
            setListAdapter(new ArrayAdapter<String>(ClientSites.this, R.layout.client_sites, results));

            //ListView myListView = (ListView)findViewById(R.id.myListView);
            ListView listView = getListView();
            listView.setTextFilterEnabled(true);

            //@SuppressWarnings("deprecation") 
            //SimpleCursorAdapter adapter = new SimpleCursorAdapter(getBaseContext(), R.id.myListView, null, null, null);
            //CursorAdapter adapter = new SimpleCursorAdapter(this, R.id.myListView, null, null, null, 0);
            //adapter = new Adapter(ourCursor);

            //Toast.makeText(ClientSites.this, "Booo!!!", Toast.LENGTH_LONG).show();

            //myListView.setAdapter(adapter);

            //myListView.setOnItemClickListener(onListClick);


        }
        catch (Exception e)
        {
            Log.e("ERROR", "XXERROR IN CODE: " + e.toString());
            e.printStackTrace();
        }
    }

}

Any help with this would be great, Thanks!

Create own project with few activities. Start working with sqlite database

Create new application. Create login activity and DB helper. Trying to upload dada from DB. Reseach and development Here is an example how to work with SQLite DB.

public class DBHelper extends SQLiteOpenHelper {

private static DBHelper instance;
private static final String DATABASE_NAME = "UserClientBase";
    private static final int DATABASE_VERSION = 1;
public static interface USER extends BaseColumns {
        String TABLE_NAME = "userTable";
        String NAME = "userName";
        String PASSWORD = "userPassword";
    }
public static interface CLIENT extends BaseColumns {
        String TABLE_NAME = "clientTable";
        String NAME = "clientName";
        String USER_ID = "userId";
    }
private static final String CREATE_TABLE = "CREATE TABLE IF NOT EXISTS ";
    private static final String DROP_TABLE = "DROP TABLE IF EXISTS ";
    private static final String UNIQUE = "UNIQUE ON CONFLICT ABORT";
private static final String CREATE_TABLE_USER = CREATE_TABLE + USER.TABLE_NAME + " (" + USER._ID
            + " INTEGER PRIMARY KEY, " + USER.NAME + " TEXT " + UNIQUE + ", " + USER.PASSWORD + " TEXT);";
private static final String CREATE_TABLE_CLIENT = CREATE_TABLE + CLIENT.TABLE_NAME + " (" + CLIENT._ID
            + " INTEGER PRIMARY KEY, " + CLIENT.NAME + " TEXT UNIQUE, " + CLIENT.USER_ID + " INTEGER);";
private DBHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }
public static DBHelper getInstance(Context context) {
        if (instance == null) {
            instance = new DBHelper(context);
        }
        return instance;
    }
@Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(CREATE_TABLE_USER);
        db.execSQL(CREATE_TABLE_CLIENT);
    }
@Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL(DROP_TABLE + USER.TABLE_NAME);
        db.execSQL(DROP_TABLE + CLIENT.TABLE_NAME);
        onCreate(db);
    }
public long createUser(String newUserName, String newUserPassword) {
        ContentValues values = new ContentValues();
        values.put(USER.NAME, newUserName);
        values.put(USER.PASSWORD, newUserPassword);
        return getWritableDatabase().insert(USER.TABLE_NAME, null, values);
    }
public long createClient(long userId, String newClientName) {
        ContentValues values = new ContentValues();
        values.put(CLIENT.USER_ID, userId);
        values.put(CLIENT.NAME, newClientName);
        return getWritableDatabase().insert(CLIENT.TABLE_NAME, null, values);
    }
public boolean isCorrectLoginPassword(String login, String password) {
        Cursor userListCursor = getReadableDatabase().rawQuery(
                "SELECT * FROM " + USER.TABLE_NAME + " WHERE " + USER.NAME + " =? AND " + USER.PASSWORD
                        + " =?", new String[] { login, password });
        if ((userListCursor != null) && (userListCursor.getCount() > 0)) {
            return true;
        } else {
            return false;
        }
    }
public Cursor getUserClientList(String userName) {
        Cursor userClientList = getReadableDatabase().rawQuery(
                "SELECT * FROM " + CLIENT.TABLE_NAME + " INNER JOIN " + USER.TABLE_NAME
                        + " ON " + CLIENT.USER_ID + " = " + USER.TABLE_NAME + "." + USER._ID + " WHERE " 
                        + USER.NAME + " =?", new String[] { userName });
        return userClientList;
    }
}

Example of login button click listener.
String login = loginEdt.getText().toString();
String password = passwordEdt.getText().toString();
boolean loginSuccess = databaseHelper.isCorrectLoginPassword(login, password);
if(loginSuccess) {
Intent clientListIntent = new Intent(LoginActivity.this, ClientListActivity.class);
clientListIntent.putExtra(ClientListActivity.EXTRAS_LOGIN, login);
startActivity(clientListIntent);
} else {
Toast.makeText(LoginActivity.this, "Incorrect login/password", Toast.LENGTH_SHORT).show();
}

And example of listview with data from sql:

clientLv= (ListView)findViewById(R.id.listClient);
login = getIntent().getExtras().getString(EXTRAS_LOGIN);
dbHelper = DBHelper.getInstance(this);
Cursor clientList = dbHelper.getUserClientList(login);
adapter = new SimpleCursorAdapter(this, R.layout.row_client, clientList, new String[]{DBHelper.CLIENT.NAME}, new int[]{R.id.txtClientName} , SimpleCursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
clientLv.setAdapter(adapter);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM