0

列内のすべての電子メールのように、列内のリストを返す方法...ここに私のコード

public String reTurn() throws SQLException 
{

    String emails=null;

    Cursor mCursor = db.rawQuery("SELECT EmailNO FROM  Details_Customer " ,null); 
    mCursor.moveToFirst(); 


    if(mCursor.getCount() > 0){ 
        emails= mCursor.getString(mCursor.getColumnIndex(DBAdapter.COLUMN_EMAIL)); 
        //password = mCursor.getString(11);
    }
return emails;
  }

ただし、返されるメールは1つだけなので、データベース内のすべてのメールを返すようにします。

4

4 に答える 4

1

これを試して:

public List<String> reTurn() throws SQLException 
{
    List<String> emails = new ArrayList<String>();
    Cursor mCursor = db.rawQuery("SELECT EmailNO FROM  Details_Customer ", null);

    int index = mCursor.getColumnIndex(DBAdapter.COLUMN_EMAIL);
    while(mCursor.moveToNext()) {
        emails.add(mCursor.getString(index)); 
        //password = mCursor.getString(11);
    }
    return emails;
}

コメントから追加

これから:

email.putExtra(Intent.EXTRA_EMAIL, new String[]{ dbUser.reTurned});

あなたは電子メール アドレスの配列を という Intent に入れようとしていると思いますemail。より良いアプローチは次のとおりです。

public String[] reTurn() throws SQLException 
{
    Cursor mCursor = db.rawQuery("SELECT EmailNO FROM  Details_Customer ", null);
    String[] emails = new String[mCursor.getCount()];

    int i = 0;
    int index = mCursor.getColumnIndex(DBAdapter.COLUMN_EMAIL);
    while(mCursor.moveToNext()) {
        emails[i++] = mCursor.getString(index); 
        //password = mCursor.getString(11);
    }

    return emails;
}

これをインテントに入れるには:

email.putExtra(Intent.EXTRA_EMAIL, dbUser.reTurned());

最後に、新しいアクティビティで、次のようにメール配列を読み取ります。

String[] emails = getIntent().getStringArrayExtra(Intent.EXTRA_EMAIL);

それが役立つことを願っています。

于 2012-06-06T21:10:15.417 に答える
0

コードの問題は、if ステートメント内にあります。

emails = mCursor.getString(...);

そのステートメントは 1 回だけ実行されるため、メールは 1 通だけ届きます。

代わりに次のようなものを試してください:

String[] emails = new String[mCursor.getCount()];
for(int i=0; i<emails.length; i++){
    emails[i] = mCursor.getString(...);
    mCursor.moveToNext();
}
于 2012-06-06T21:11:56.820 に答える
0

次のコードを使用して、すべてのメールアドレスを取得できます。

mCursor.moveToFirst();
ArrayList<String> mails = new ArrayList<String>();

if(mCursor.getCount() > 0){ 
    while(!mCursor.isAfterLast()){
         mails.add(mCursor.getString(mCursor.getColumnIndex(DBAdapter.COLUMN_EMAIL))); 
         mCursor.moveToNext();
    }
}
于 2012-06-06T21:13:39.693 に答える
0

Cursor基本的にイテレータであるため、これらはすべて を通じて利用できます。カーソル APIを参照してください。そのため、配列と同じようにカーソルを渡し、必要に応じて反復処理できます。

本当に必要な場合は、結果を配列にコピーできます。

int n = mCursor.getCount();
String [] emails = new String[n];
int emailColIndex = mCursor.getColumnIndex(DBAdapter.COLUMN_EMAIL);
mCursor.moveToFirst();
for (int i = 0; i < n; i++) {
    emails[i] = mCursor.getString(emailColIndex);
    mCursor.moveToNext();
}
// A good place to close the cursor.
于 2012-06-06T21:15:20.593 に答える