Android 为收到的每封电子邮件获取2个SQLite记录
我对安卓系统和编程都是新手。我有一个使用K9电子邮件客户端的电子邮件接收器。我正在检查电子邮件的格式是否正确,并将电子邮件的内容输入手机上的SQLite数据库。接收器工作正常。问题是,当我发送一封格式正确的邮件时,它会从第一封邮件中生成两条记录。如果我发送另一条消息而不删除第一条消息,它会对第二条消息做4条记录。第三个做了6张唱片,等等。我知道我可能遗漏了一些明显的东西,但我找不到问题所在 代码如下:Android 为收到的每封电子邮件获取2个SQLite记录,android,sqlite,email,Android,Sqlite,Email,我对安卓系统和编程都是新手。我有一个使用K9电子邮件客户端的电子邮件接收器。我正在检查电子邮件的格式是否正确,并将电子邮件的内容输入手机上的SQLite数据库。接收器工作正常。问题是,当我发送一封格式正确的邮件时,它会从第一封邮件中生成两条记录。如果我发送另一条消息而不删除第一条消息,它会对第二条消息做4条记录。第三个做了6张唱片,等等。我知道我可能遗漏了一些明显的东西,但我找不到问题所在 代码如下: public class EmailReceiver extends Broadcas
public class EmailReceiver extends BroadcastReceiver{
private JobsData jobs;
public static final Uri k9uri = Uri.parse("content://com.fsck.k9.messageprovider/inbox_messages/");
static String[] messages_projection = new String[] {"subject", "preview", "unread"};
@Override
public void onReceive(Context context, Intent intent) {
try {
Context mContext = context;
Cursor curSt = mContext.getContentResolver().query(k9uri, messages_projection, "unread='true'", null, null);
curSt.moveToFirst();
String preview = null;
String subject = null;
jobs = new JobsData(context);
int i = 0;
while (!curSt.isAfterLast()) {
subject = curSt.getString(0);
boolean test = subject.startsWith("JOB# ");
if (test) {
boolean check = true;
try {
for (int k = 5; k < subject.length(); k++) {
if (!Character.isDigit(subject.charAt(k))) {
check = false;
break;
}
}
} catch (Exception e) {
} finally {
}
if (check) {
preview = curSt.getString(1);
compareDb(subject.substring(7), preview, context);
}
}
curSt.moveToNext();
}
curSt.close();
} catch (Exception e) {
Toast toast = Toast.makeText(context, e.toString(), Toast.LENGTH_LONG);
toast.show();
}
if (emails != null) {
}
}
private void compareDb (String jobNo, String preview, Context context) {
try {
String[] dbJobs = new String[] {"JobNo"};
SQLiteDatabase db = jobs.getReadableDatabase();
Cursor dbCur = db.query(tableName, dbJobs, null, null, null, null, null);
dbCur.moveToFirst();
while (!dbCur.isAfterLast()) {
if (!jobNo.equals(dbCur.getString(0))) {
jobExtractor(preview, jobNo, context);
}
dbCur.moveToNext();
}
dbCur.close();
} catch (Exception e){
Toast toast = Toast.makeText(context, e.toString(), Toast.LENGTH_LONG);
toast.show();
}
}
private void addJobs(Job job){
SQLiteDatabase db = jobs.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(custName, job.getCustName());
values.put(jobNumber, job.getJobNumber());
values.put(jobType, job.getJobType());
values.put(address, job.getAddress());
values.put(zip, job.getZip());
values.put(contact, job.getContact());
values.put(contactNumber, job.getContactNumber());
values.put(problem, job.getProblem());
db.insertOrThrow(tableName, null, values);
db.close();
}
公共类EmailReceiver扩展了BroadcastReceiver{
私人职位数据职位;
公共静态最终Uri k9uri=Uri.parse(“content://com.fsck.k9.messageprovider/inbox_messages/");
静态字符串[]消息\投影=新字符串[]{“主题”、“预览”、“未读”};
@凌驾
公共void onReceive(上下文、意图){
试一试{
Context mContext=上下文;
Cursor curSt=mContext.getContentResolver().query(k9uri,messages_投影,“unread='true',null,null);
curSt.moveToFirst();
字符串预览=null;
字符串subject=null;
作业=新作业数据(上下文);
int i=0;
而(!curSt.isAfterLast()){
subject=curSt.getString(0);
布尔测试=subject.startsWith(“作业#”);
如果(测试){
布尔检查=真;
试一试{
for(int k=5;k
“jobextractor”方法很好用,所以我没有包括它。如果有人能帮助我,我将不胜感激
谢谢
只是一个旁注。我也希望它只查看未读的电子邮件,但这也不起作用。目前这不是一个大问题,但如果您对此有答案,我将非常感激。我发现了这个问题
while (!dbCur.isAfterLast()) {
if (!jobNo.equals(dbCur.getString(0))) {
jobExtractor(preview, jobNo, context);
}
dbCur.moveToNext();
}
问题就在这里。我正在检查作业编号是否与数据库中的现有记录匹配。它检查了表中的每个记录,并为每个不匹配的记录添加了一个新作业。我用布尔检查替换了jobExctractor行,如果循环后检查返回true,我没有添加作业