Ich bin sehr neu in Android und Programmierung im Allgemeinen. Ich habe einen E-Mail-Empfänger, der den E-Mail-Client K9 verwendet. Ich überprüfe die E-Mail auf korrekte Formatierung und nehme den Inhalt der E-Mail und gebe ihn in eine SQLite-Datenbank auf dem Telefon ein. Der Empfänger funktioniert ordnungsgemäß. Das Problem ist, dass wenn ich eine richtig formatierte Nachricht sende, macht es 2 Datensätze von der ersten E-Mail. Wenn ich eine andere Nachricht sende, ohne die erste zu löschen, macht sie 4 Datensätze der Sekunde. Der dritte macht 6 Datensätze usw. Ich weiß, da ist wahrscheinlich etwas offensichtlich, dass ich vermisse, aber ich kann das Problem nicht finden. HierErhalten 2 SQLite Datensätze für jede E-Mail erhalten
ist der Code:
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();
}
Die "jobextractor" Methode funktioniert gut, so dass ich es nicht enthalten. Wenn mir jemand helfen kann, würde ich es begrüßen.
Danke
Nur eine Randnotiz. Ich möchte auch, dass nur ungelesene E-Mails angezeigt werden, aber das funktioniert auch nicht. Kein großes Problem an dieser Stelle, aber wenn Sie eine Antwort darauf haben, wäre ich sehr dankbar.