0

以前にデータベースが存在しない場合に、データベースを作成し、そこにデータを入力するアクティビティがあります。または、以前に入力した値を更新したい。

「if-else」を実装してこれを実行しようとしています。

2 つの可能性から選択するためのコードを次に示します。

public void submitusername(View view) {
    userdatabase name = new userdatabase(this);
    name.open();
    String user = name.getusername();
    name.close();

    EditText cinone = (EditText) findViewById(R.id.username);
    username = cinone.getText().toString();

    if(user == null){
        userdatabase entry = new userdatabase(Editprofile.this);
        entry.open();
        entry.createEntry(username, null, null, null);
        entry.close();

        Context context = getApplicationContext();
        CharSequence text = "Added new user!";
        int duration = Toast.LENGTH_LONG;

        Toast toast = Toast.makeText(context, text, duration);
        toast.show();

    } else {
        userdatabase update = new userdatabase(Editprofile.this);
        update.open();
        update.updateUsername(username);
        update.close();

        Context context = getApplicationContext();
        CharSequence text = "Username updated!";
        int duration = Toast.LENGTH_SHORT;

        Toast toast = Toast.makeText(context, text, duration);
        toast.show();
    }
}

データベースから「ユーザー名」を呼び出すメソッドは次のとおりです。

public String getusername() {                                                               
    String[] columns = new String[]{USER_NAME};
    Cursor c = userDatabase.query(DATABASE_TABLE, columns, null, null, null, null, null);

    String result = "";

    int iName = c.getColumnIndex(USER_NAME);

    for(c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
        result = result + c.getString(iName);
    }

    return result;
}

ユーザー名を更新する方法:

public void updateUsername(String name) {                                                       
    ContentValues cvUpdate = new ContentValues();
    cvUpdate.put(USER_NAME, name);

    userDatabase.update(DATABASE_TABLE, cvUpdate, KEY_ROWID + "=" + 0 , null);
}

私が遭遇する問題は 、プログラムを実行してデータベースが存在しない (ユーザー名がない) 場合、ボタンをクリックしても「ユーザー名が更新されました」というトーストが表示され、データが挿入されないことです。明らかにデータベースを作成する必要がある場合は、初めてユーザー名を挿入し、「Added new user!」というトーストを表示します。

また、「if-else」条件を削除すると、既存のデータをチェックせず、「createEntry」部分を保持するだけですべて正常に動作します。データが正しく挿入されます。つまり、私の「createEntry」部分が正しいということです。

何が問題なのですか?他のアクティビティに getusername() を実装しましたが、正常に動作します。

4

1 に答える 1

1

コードを次のように変更してみてください。

   userdatabase name = new userdatabase(Editprofile.this);
    name.open();
    String user = name.getusername();
    name.close();

    EditText cinone = (EditText) findViewById(R.id.username);
            username = cinone.getText().toString();

  if(user.equals("")){

        //your code here
    }

    else {
          //your code here
    }

getusername()メソッドを次のように変更します。

public String getusername() {                                                               
    String[] columns = new String[]{USER_NAME};
    Cursor c = userDatabase.query(DATABASE_TABLE, 
                                         columns,
                     null,
                     null,
                     null,
                     null,
                     null);

    String result = "";
    c.moveToFirst();
    if(c.getCount()>0){

      int iName = c.getColumnIndex(USER_NAME);

      for(c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {

        result = result + c.getString(iName);
       }
     }
    return result;
}
于 2012-12-20T19:18:06.933 に答える