簡體   English   中英

從SQLite數據庫填充Android Listview

[英]Populate Android Listview from SQLite database

我一直在嘗試使用下面的代碼從SQLite數據庫填充Android Listview。 我已經從同一類的數組中成功完成了此操作。 但是在這種情況下,我試圖從另一個類返回的String數組中填充它。 我對此並不陌生,所以可能做的完全錯誤。 如果有人可以看一下代碼並建議我做錯了什么,那就太好了。

對此我將不勝感激,因為我承受着巨大的壓力要完成它,謝謝!

LoginActivity類

公共類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();
            }
        }

    });
}

}

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類

公共類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();
        }
    }

}

任何幫助都會很棒,謝謝!

創建很少活動的項目。 開始使用sqlite數據庫

創建新的應用程序。 創建登錄活動和數據庫幫助器。 嘗試從數據庫上傳dada。 研究和開發這里是一個如何使用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