2012-04-03 46 views
0

我對android和編程一般都很陌生。我有一個使用K9電子郵件客戶端的電子郵件接收器。我正在檢查電子郵件的正確格式,並將電子郵件的內容輸入到手機上的SQLite數據庫中。接收器工作正常。問題是,當我發送正確格式的消息時,它會從第一封電子郵件中創建2條記錄。如果我發送另一條消息而不刪除第一條消息,則會創建第二條消息的4條記錄。第三個產生6條記錄,等等。我知道可能有一些明顯的我失蹤,但我找不到問題。爲每個收到的郵件獲取2個SQLite記錄

下面是代碼:

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(); 

} 

的「jobextractor」法正常工作,所以我不包括它。如果有人可以請幫助我,我將不勝感激。

謝謝

只是一個側面說明。我也希望它只查看未讀電子郵件,但這也不起作用。這一點不是主要問題,但如果您有答案,我會非常感激。

回答

0

我發現了問題。

while (!dbCur.isAfterLast()) { 
    if (!jobNo.equals(dbCur.getString(0))) { 
     jobExtractor(preview, jobNo, context); 
    } 
    dbCur.moveToNext(); 
} 

問題出在這裏。我正在檢查工作號碼是否與數據庫中的現有記錄匹配。它檢查了表中的每條記錄,併爲每條不匹配的記錄添加了新的工作。我用布爾檢查替換了jobExctractor行,如果檢查在循環後返回true,我沒有添加該作業。