2012-04-03 5 views
0

私はAndroid、そして一般的なプログラミングの新機能です。私はK9電子メールクライアントを使って電子メール受信者を持っています。私は電子メールをチェックして、適切な書式設定と電子メールの内容を取得し、電話でSQLiteデータベースに入力します。受信機は正常に動作しています。問題は、適切にフォーマットされたメッセージを送信すると、最初の電子メールから2レコードが作成されることです。最初のメッセージを削除せずに別のメッセージを送信すると、2番目のメッセージを4つのレコードにします。 3番目のレコードは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を返した場合は、ジョブを追加しませんでした。