Получить из электронной почты SQLite DB и оценки пользователя и отправить счет каждому пользователю соответственно - PullRequest
0 голосов
/ 20 января 2012

Я создал приложение в Android, которое должно отправлять электронные письма всем контактам, сохраненным в базе данных, когда вы нажимаете кнопку SendMail, чтобы отправлять электронную почту каждому контакту с соответствующим счетом,

Идея состояла в том, чтобы вставить пары (электронная почта, оценка) каждого пользователя в базу данных и передать его определенному методу, который отправляет электронное письмо

Я реализовал метод отправки, чтобы получить адрес электронной почты и счет, связанный Я протестировал метод отправки электронной почты и работает нормально,

Единственная проблема в том, что я не могу определить способ, подходящий для Передавайте все адреса электронной почты и соответствующие оценки каждого пользователя одним нажатием кнопки.

Мой класс DatabaseHelper следующий:

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;




public class DatabaseHelper extends SQLiteOpenHelper {

static final String dbName="demoDB";
static final String PlayerTable="Players";
static final String colID="PlayerID";
static final String colName="PlayerName";
static final String colEmail="Email";
static final String colScore="Score";
static final String colDept="Dept";

static final String deptTable="Dept";
static final String colDeptID="DeptID";
static final String colDeptName="DeptName";

static final String viewEmps="ViewEmps";


public DatabaseHelper(Context context) {
    super(context, dbName, null,33);

    // TODO Auto-generated constructor stub
}

@Override
public void onCreate(SQLiteDatabase db) {
    // TODO Auto-generated method stub

    db.execSQL("CREATE TABLE "+deptTable+" ("+colDeptID+ " INTEGER PRIMARY KEY , "+
            colDeptName+ " TEXT)");

    db.execSQL("CREATE TABLE "+PlayerTable+" ("+colID+" INTEGER PRIMARY KEY AUTOINCREMENT, "+
            colName+" TEXT, "+colEmail+" TEXT, "+colScore+" Integer, "+colDept+" INTEGER NOT NULL ,FOREIGN KEY ("+colDept+") REFERENCES "+deptTable+" ("+colDeptID+"));");


    db.execSQL("CREATE TRIGGER fk_empdept_deptid " +
            " BEFORE INSERT "+
            " ON "+PlayerTable+

            " FOR EACH ROW BEGIN"+
            " SELECT CASE WHEN ((SELECT "+colDeptID+" FROM "+deptTable+" WHERE "+colDeptID+"=new."+colDept+" ) IS NULL)"+
            " THEN RAISE (ABORT,'Foreign Key Violation') END;"+
            "  END;");

    db.execSQL("CREATE VIEW "+viewEmps+
            " AS SELECT "+PlayerTable+"."+colID+" AS _id,"+
            " "+PlayerTable+"."+colName+","+
            " "+PlayerTable+"."+colEmail+","+
            " "+PlayerTable+"."+colScore+","+
            " "+deptTable+"."+colDeptName+""+
            " FROM "+PlayerTable+" JOIN "+deptTable+
            " ON "+PlayerTable+"."+colDept+" ="+deptTable+"."+colDeptID
            );
    //Inserts pre-defined sections
    InsertDepts(db);

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // TODO Auto-generated method stub

    db.execSQL("DROP TABLE IF EXISTS "+PlayerTable);
    db.execSQL("DROP TABLE IF EXISTS "+deptTable);

    db.execSQL("DROP TRIGGER IF EXISTS dept_id_trigger");
    db.execSQL("DROP TRIGGER IF EXISTS dept_id_trigger22");
    db.execSQL("DROP TRIGGER IF EXISTS fk_empdept_deptid");
    db.execSQL("DROP VIEW IF EXISTS "+viewEmps);
    onCreate(db);
}

 void AddPlayer(Player emp)
{


     SQLiteDatabase db= this.getWritableDatabase();


    ContentValues cv=new ContentValues();

    cv.put(colName, emp.getName());
    cv.put(colName, emp.getEmail());
    cv.put(colScore, emp.getScore());
    cv.put(colDept, emp.getDept());
    //cv.put(colDept,2);

    db.insert(PlayerTable, colName, cv);
    db.close();


}

 int getPlayerCount()
 {
    SQLiteDatabase db=this.getWritableDatabase();
    Cursor cur= db.rawQuery("Select * from "+PlayerTable, null);
    int x= cur.getCount();
    cur.close();
    return x;
 }

 Cursor getAllPlayers()
 {
     SQLiteDatabase db=this.getWritableDatabase();



     //Cursor cur= db.rawQuery("Select "+colID+" as _id , "+colName+", "+colEmail+","+colScore+" from "+PlayerTable, new String [] {});
     Cursor cur= db.rawQuery("SELECT * FROM "+viewEmps,null);
     return cur;

 }

 Cursor getAllDepts()
 {
     SQLiteDatabase db=this.getReadableDatabase();
     Cursor cur=db.rawQuery("SELECT "+colDeptID+" as _id, "+colDeptName+" from "+deptTable,new String [] {});

     return cur;
 }

 void InsertDepts(SQLiteDatabase db)
 {
     ContentValues cv=new ContentValues();
        cv.put(colDeptID, 1);
        cv.put(colDeptName, "Sales");
        db.insert(deptTable, colDeptID, cv);
        cv.put(colDeptID, 2);
        cv.put(colDeptName, "IT");
        db.insert(deptTable, colDeptID, cv);
        cv.put(colDeptID, 3);
        cv.put(colDeptName, "HR");
        db.insert(deptTable, colDeptID, cv);
        db.insert(deptTable, colDeptID, cv);

 }

 public String GetDept(int ID)
 {
     SQLiteDatabase db=this.getReadableDatabase();

     String[] params=new String[]{String.valueOf(ID)};
     Cursor c=db.rawQuery("SELECT "+colDeptName+" FROM"+ deptTable+" WHERE "+colDeptID+"=?",params);
     c.moveToFirst();
     int index= c.getColumnIndex(colDeptName);
     return c.getString(index);
 }

 public Cursor getEmpByDept(String Dept)
 {
     SQLiteDatabase db=this.getReadableDatabase();
     String [] columns=new String[]{"_id",colName,colEmail,colScore,colDeptName};
     Cursor c=db.query(viewEmps, columns, colDeptName+"=?", new String[]{Dept}, null, null, null);
     return c;
 }

 public int GetDeptID(String Dept)
 {
     SQLiteDatabase db=this.getReadableDatabase();
     Cursor c=db.query(deptTable, new String[]{colDeptID+" as _id",colDeptName},colDeptName+"=?", new String[]{Dept}, null, null, null);
     //Cursor c=db.rawQuery("SELECT "+colDeptID+" as _id FROM "+deptTable+" WHERE "+colDeptName+"=?", new String []{Dept});
     c.moveToFirst();
     return c.getInt(c.getColumnIndex("_id"));

     }

 public int UpdateEmp(Player emp)
 {
     SQLiteDatabase db=this.getWritableDatabase();
     ContentValues cv=new ContentValues();
     cv.put(colName, emp.getName());
     cv.put(colScore, emp.getScore());
     cv.put(colDept, emp.getDept());
     return db.update(PlayerTable, cv, colID+"=?", new String []{String.valueOf(emp.getID())});

 }

 public void DeleteEmp(Player emp)
 {
     SQLiteDatabase db=this.getWritableDatabase();
     db.delete(PlayerTable,colID+"=?", new String [] {String.valueOf(emp.getID())});
     db.close();



 }

}

Помогите мне, пожалуйста.

1 Ответ

0 голосов
/ 21 января 2012
  1. Создание getScores, возвращающих HashMap в вашем классе dbHelper

    public HashMap<String,String> getScores() {
    HashMap<String,String> list = new HashMap<String,String>();
    SQLiteDatabase db=this.getReadableDatabase();
    Cursor cursor = db.rawQuery("Select email,sum(score) from players group by Email",null);
        if (cursor.moveToFirst()) {
            do {
                list.put(cursor.getString(0),cursor.getString(1));
            } while (cursor.moveToNext());
        }
        if (cursor != null && !cursor.isClosed()) {
            cursor.close();
        }
    return list;}
    
  2. используйте этот метод для отправки электронных писем, предполагая

sendMail(String mailTo,String score);


HashMap<String,String> scores = dbHelper.getScores();
for(Map.Entry entry : scores.entrySet())
{
     sendMail(entry.getKey(),entry.getValue());
}

надеюсь, это поможет прояснить ситуацию.

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