2013-03-23 39 views
0

所以我做了一個sorta計時器小部件,從sqlite數據庫中獲取信息。當數據庫中只有1個條目時,看起來像預期的那樣工作,但當存在多於1個時,小部件似乎在值之間閃爍。例如。 1秒鐘你會看到第一個值,那麼下一個第二個值將是下一個值等等。這裏是代碼,請注意命令fetchDecks(5),它查看提醒值,如果它超過當前時間,它不會顯示。所以一旦進入1時間到了,它應該移動到條目2上。Android小部件更新奇怪w/sqlite數據庫

public class MyWidgetProvider extends AppWidgetProvider { 
    private DBadapter mDbHelper; 
    Cursor note; 
    private long reminder; 
    private String title, summary; 

    @Override 
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 
     mDbHelper = new DBadapter(context); 
     mDbHelper.open(); 
     note = mDbHelper.fetchDecks(5); 
     note.moveToFirst(); 
     reminder = note.getLong(
       note.getColumnIndexOrThrow(mDbHelper.KEY_REMINDER)); 
     title = note.getString(
       note.getColumnIndexOrThrow(mDbHelper.KEY_TITLE)); 
     summary = note.getString(
       note.getColumnIndexOrThrow(mDbHelper.KEY_SUMMARY)); 
     Timer timer = new Timer(); 
     timer.scheduleAtFixedRate(new MyTime(context, appWidgetManager), 1, 1000); 
    } 

    private class MyTime extends TimerTask { 
     RemoteViews remoteViews; 
     AppWidgetManager appWidgetManager; 
     ComponentName thisWidget; 

    public MyTime(Context context, AppWidgetManager appWidgetManager) { 
     this.appWidgetManager = appWidgetManager; 
     remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout); 
     thisWidget = new ComponentName(context, MyWidgetProvider.class); 
    } 

    @Override 
    public void run() { 
     long current = System.currentTimeMillis(); 
     long diff = reminder - current; 
     remoteViews.setTextViewText(R.id.TextView01, countDown(diff)); 
     remoteViews.setTextViewText(R.id.update, title); 
     appWidgetManager.updateAppWidget(thisWidget, remoteViews);   
    } 

    private String countDown(long result) { 
     String mMinutes,mSeconds,mHours, mDays; 
     int seconds = (int) (result/1000) % 60 ; 
     if (seconds == 0) { 
      mSeconds = "0" + Integer.toString(seconds); 
     } 
     else if (seconds <= 9) { 
      mSeconds = "0" + Integer.toString(seconds); 
     } else { 
      mSeconds = Integer.toString(seconds); 
     } 

     int minutes = (int) ((result/(1000*60)) % 60); 
     if (minutes == 0) { 
      mMinutes = "0" + Integer.toString(minutes); 
     } 
     else if (minutes <= 9) { 
      mMinutes = "0" + Integer.toString(minutes); 
     } else { 
      mMinutes = Integer.toString(minutes); 
     } 

     int hours = (int) ((result/(1000*60*60)) % 24); 
     if (hours == 0) { 
      mHours = "0" + Integer.toString(hours); 
     } 
     else if (hours <= 9) { 
      mHours = "0" + Integer.toString(hours); 
     } else { 
      mHours = Integer.toString(hours); 
     } 

     int days = (int) (result/(1000*60*60*24)); 
     if (days == 0) { 
      mDays = "0" + Integer.toString(days); 
     } 
     else if (days <= 9) { 
      mDays = "0" + Integer.toString(days); 
     } else { 
      mDays = Integer.toString(days); 
     } 
     String tRemaining = mDays + " days | " + mHours + " hours | " + mMinutes + " mins | " + mSeconds + " secs";  
     return tRemaining; 
    } 

    } 
} 
+0

請顯示'fetchDecks'。 – 2013-03-23 17:44:42

回答

0

想通了。是造成它的XML文件中的問題。