Почему getText () и getEditableText () в AutoCompleteTextView всегда приводят к пустой строке? - PullRequest
3 голосов
/ 26 июня 2011

Цель моего проекта - сохранить идентификатор входа в систему, а также, когда пользователь вводит идентификатор входа, если он уже сохранен, он должен автоматически завершиться.

Я пытаюсь сохранить введенные значения в SQLiteБД, а затем прочитать его оттуда, чтобы заполнить представление автозаполнения текста.Проблема, с которой я сталкиваюсь, заключается в том, что при попытке прочитать введенный текст до или после нажатия кнопки входа строка всегда "" (пустая).Я не уверен, почему это всегда пусто.Я пытался прочитать строку в onCreate (), а также loginOnClick (View v).В обоих местах я получаю пустую строку.Вот код:

public class LoginActivity extends Activity {

    private LoginInfoSQLiteOpenHelper loginInfoSQLiteHelper;
    private SQLiteDatabase database;
    private String userId;
    private String passwd;

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

        //TEST ONLY
        deleteDatabase(DB_NAME);   // For testing purposes - Delete DB for a clean start

        loginInfoSQLiteHelper  = new LoginInfoSQLiteOpenHelper(LoginActivity.this);
        database = loginInfoSQLiteHelper.getWritableDatabase();

        persistLoginId("Champ");
        persistLoginId("Cambodia");
        persistLoginId("Canada");
        persistLoginId("Champ");

        String [] userNames = getAllUserNames();

        for(String str: userNames){
            Toast.makeText(this,  str, Toast.LENGTH_SHORT).show();
        }

        AutoCompleteTextView loginId = (AutoCompleteTextView) findViewById(R.id.id_text);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.list_item, userNames);
        loginId.setAdapter(adapter);
        userId = loginId.getEditableText().toString(); //always empty

        EditText password = (EditText) findViewById(R.id.password_text);

    }

    @Override
    public void onBackPressed() {
        super.onBackPressed();              

        finish();
    }

    public void loginOnClick(View v) {
        persistLoginId("Canada");
        persistLoginId(userId);
//userID = "" empty

        //Toast.makeText(this, "Sign In Button works " , Toast.LENGTH_LONG).show();

    }

    public String[] getAllUserNames(){

    Cursor cursor = database.query(DB_TABLE_NAME,new String[]{DB_COLUMN_1_NAME},null,
                null,null,null,null);

        String[] str = new String[cursor.getCount()];
        int i = 0;

        cursor.moveToFirst();

        if(!cursor.isAfterLast()){
            do{
                String name = cursor.getString(cursor.getColumnIndex(DB_COLUMN_1_NAME));
                str[i] = name;
                i++;
            }while(cursor.moveToNext());
            cursor.close();
            return str;         
        }
        else{
            cursor.close();         
            return new String[]{};
        }

    }

    private void persistLoginId(String loginId) {

            //Check if loginID exists then do not add
            if ( !loginIdExists(loginId)){
                ContentValues contentValues = new ContentValues();
                contentValues.put(DB_COLUMN_1_NAME, loginId);
                Log.i(this.toString() + " insertUserName", "Inserting username : " + loginId);
                database.insert(DB_TABLE_NAME, null, contentValues);
            } else{
                //for testing 
                Toast.makeText(this, loginId + "  exists. Not Added", Toast.LENGTH_LONG).show();
            }

    }

    public boolean loginIdExists(String id) {
        String DB_SELECT_SCRIPT = "SELECT " + DB_COLUMN_1_NAME + " FROM " + DB_TABLE_NAME ;
        SQLiteDatabase db = loginInfoSQLiteHelper.getReadableDatabase();
        Cursor cursor = db.rawQuery(DB_SELECT_SCRIPT, null);

        if( cursor != null){
            cursor.moveToFirst();
            if(!cursor.isAfterLast()){
                do{
                    String name = cursor.getString(cursor.getColumnIndex(DB_COLUMN_1_NAME));
                    if(id.equals(name)){
                        cursor.close();
                        return true;
                    }
                }while(cursor.moveToNext());        
            }
            else{
                cursor.close();         
                return false;
            }
        }
        return false;       
    }

    public boolean removeUserName(String userName){
        int result = database.delete(DB_TABLE_NAME, "user_name='" + userName + "'", null);

        if(result > 0)
            return true;
        else
            return false;
    }

}

Ответы [ 2 ]

1 голос
/ 27 июня 2011

Я исправил проблему с пустой строкой, возвращаемой из getText (). Это была небольшая ошибка объявления AutoCompleteTextView loginId в onCreate (). Поскольку loginID теряет область видимости после выполнения onCreate (), когда мы пытаемся прочитать введенную строку в loginOnClick (), она читается как пустая. Вот что я сделал, чтобы это исправить.

  1. Объявлено, что AutoCompleteTextView loginId является частным участником действия -

    private AutoCompleteTextView loginId;
    
  2. Изменено onCreate () как -

    loginId = (AutoCompleteTextView) findViewById(R.id.id_text);
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.list_item, userNames);
    loginId.setAdapter(adapter);
    
  3. Изменен loginOnClick (View v) следующим образом

    public void loginOnClick(View v) {
        String userId = loginId.getText().toString();
        EditText password = (EditText) findViewById(R.id.password_text);
        String passwd = password.getText().toString();
                persistLoginId(userId);
    }   
    
1 голос
/ 26 июня 2011

getEditableText() возвращает объект Editable, а не String.Нужный метод: getText()

Источник: http://developer.android.com/reference/android/widget/EditText.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...