简体   繁体   English

从SQLite数据库填充Android Listview

[英]Populate Android Listview from SQLite database

I've been trying to populate an Android Listview from a SQLite database using the code below. 我一直在尝试使用下面的代码从SQLite数据库填充Android Listview。 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. 但是在这种情况下,我试图从另一个类返回的String数组中填充它。 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 LoginActivity类

public class LoginActivity extends Activity { 公共类LoginActivity扩展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 DBHelper类的方法以返回字符串数组

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 ClientSites类

public class ClientSites extends ListActivity { 公共类ClientSites扩展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 开始使用sqlite数据库

Create new application. 创建新的应用程序。 Create login activity and DB helper. 创建登录活动和数据库帮助器。 Trying to upload dada from DB. 尝试从数据库上传dada。 Reseach and development Here is an example how to work with SQLite DB. 研究和开发这里是一个如何使用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);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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