2011-10-25 82 views
3

將倒計時腳本編程到狀態欄時,但當我調用 函數OnClickListener destroy來終止應用程序時,仍然保持強制關閉狀態。 我認爲'myNotificationManager.cancel(1)'有問題;'但我無法弄清楚什麼是錯誤。threadid = 1:線程退出時未捕獲的異常(group = 0x4001d5a0)

這裏是我的代碼

public class ZaagmanActivity extends Activity { 
public Handler handler = new Handler(); 
public NotificationManager myNotificationManager; 
private static final int NOTIFICATION_ID = 1; 
/** Called when the activity is first created. */ 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    Button button = (Button)findViewById(R.id.refresh); 
    button.setOnClickListener(refresh); 
    Button button1 = (Button)findViewById(R.id.destroy); 
    button1.setOnClickListener(destroy); 
    Button button2 = (Button)findViewById(R.id.counter); 
    button2.setOnClickListener(counter); 
    //test 


} 
private void GeneratNotification(){ 

     myNotificationManager = 
     (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE); 

     CharSequence NotificationTicket = "Counter gestart"; 
     CharSequence NotificationTitle = "Zaagmans Counter"; 
     CharSequence NotificationContent = Nextwedsmall(); 
     long when = System.currentTimeMillis(); 

     Notification notification = new Notification(R.drawable.poppetje,NotificationTicket, when); 
     Context context = getApplicationContext(); 
     Intent notificationIntent = new Intent(this,ZaagmanActivity.class); 
     PendingIntent contentIntent = 
     PendingIntent.getActivity(this, 0, notificationIntent, 0); 

     notification.setLatestEventInfo(context, NotificationTitle, 
     NotificationContent, contentIntent); 

     myNotificationManager.notify(NOTIFICATION_ID, notification); 

    } 

private OnClickListener destroy = new OnClickListener() { 
    public void onClick(View v) { 
    System.out.println("Closing"); 
    myNotificationManager.cancel(1); 
    handler.removeCallbacks(notification); 
    finish(); 
       } 
}; 

private OnClickListener counter = new OnClickListener() { 
    public void onClick(View v) { 
     notification.run(); 
       } 
}; 

private OnClickListener refresh = new OnClickListener() { 
    public void onClick(View v) { 
     refresh(); 

     Button button1 = (Button)findViewById(R.id.destroy); 
     button1.setOnClickListener(destroy); 

    ; 
    } 
}; 




private final Runnable showtext = new Runnable() { 


    public void run() { 

     TextView t=new TextView(getApplicationContext()); 
     t=(TextView)findViewById(R.id.t); 
     t.setText(Nextwed()); 
     handler.postDelayed(this, 500); 
    } 
}; 

private final Runnable notification = new Runnable() { 


    public void run() { 
     GeneratNotification(); 
     handler.postDelayed(this, 500); 
    } 
}; 



public Calendar Nextwednesday(int dow){ 
    Calendar date = Calendar.getInstance(); 
    int diff = dow - date.get(Calendar.DAY_OF_WEEK); 
    if (!(diff > 0)) { 
     diff += 7; 
    } 
    date.add(Calendar.DAY_OF_MONTH, diff); 
    date.set(Calendar.HOUR_OF_DAY, 12); 
    System.out.println(date); 
    return date; 
} public String Nextwedsmall() { 
    // 

    long wednes = Nextwednesday(Calendar.WEDNESDAY).getTimeInMillis(); 
    System.out.println(wednes); 

    Date date = new Date(); // given date 
    Calendar date2 = GregorianCalendar.getInstance(); // creates a new calendar instance 
    date2.setTime(date); 
    long now = date2.getTimeInMillis(); 

    long zaagmans = wednes - now; 

    System.out.println("time "+date2.getTime()); 
    long Hour = date2.get(Calendar.HOUR_OF_DAY); 
    Hour = Hour -2; 
    long Minute = date2.get(Calendar.MINUTE); 
    long Seconds = date2.get(Calendar.SECOND); 
    long mSeconds = date2.get(Calendar.MILLISECOND); 
    float total = (mSeconds + (1000*Seconds) + (60*1000 * Minute) + (60*60*1000 * Hour)); 

    zaagmans = (long) (zaagmans - total + (11*60*60*1000)); 
    long days = zaagmans/(1000*60*60*24); 
    long hours = zaagmans/(1000*60*60) ; 
    long mins = zaagmans/(1000*60) ; 
    long secs = zaagmans/1000 ; 
    long dd = days; 
    long hh = hours - days * 24; 
    long mm = mins - hours * 60; 
    long ss = secs - mins * 60; 
    System.out.println(date2); 
    date2.clear(); 
    return (dd+" dag(en), "+hh+" uur(en), "+mm+" minuten en "+ss+" seconden"); 
} 
public String Nextwed() { 
    // 

    long wednes = Nextwednesday(Calendar.WEDNESDAY).getTimeInMillis(); 
    System.out.println(wednes); 
    Date date = new Date(); // given date 
    Calendar date2 = GregorianCalendar.getInstance(); // creates a new calendar instance 
    date2.setTime(date); 
    long now = date2.getTimeInMillis(); 
    long zaagmans = wednes - now; 
    System.out.println("time "+date2.getTime()); 
    long Hour = date2.get(Calendar.HOUR_OF_DAY); 
    Hour = Hour - 13; 
    long Minute = date2.get(Calendar.MINUTE); 
    long Seconds = date2.get(Calendar.SECOND); 
    long mSeconds = date2.get(Calendar.MILLISECOND); 
    float total = (mSeconds + (1000*Seconds) + (60*1000 * Minute) + (60*60*1000 * Hour)); 

    zaagmans = (long) (zaagmans - total); 
    long days = zaagmans/(1000*60*60*24); 
    long hours = zaagmans/(1000*60*60) ; 
    long mins = zaagmans/(1000*60) ; 
    long secs = zaagmans/1000 ; 
    long dd = days; 
    long hh = hours - days * 24; 
    long mm = mins - hours * 60; 
    long ss = secs - mins * 60; 
    System.out.println(date2); 
    date2.clear(); 
    return ("Dagen: "+dd+", Uren: "+hh+", Minuten: "+mm+", Seconden: "+ss+" "); 
} 
public void refresh(){ 
    Calendar calendar = Calendar.getInstance(); 
    int day = calendar.get(Calendar.DAY_OF_WEEK); 
    int hour = calendar.get(Calendar.HOUR_OF_DAY); 
    hour = hour + 2; 
    if(day==4 && hour >= 12){ 
    System.out.println("woensdag"); 
     setContentView(R.layout.zaagmans); 
    } 
    else if(day==5){ 
     System.out.println("donderdag"); 
     setContentView(R.layout.zaagmans); 
     } 
    else if(day==6 && hour <= 17){ 
     System.out.println("vrijdag"); 
     setContentView(R.layout.zaagmans); 
     } 
    else if(day==6 && hour > 17){ 
     System.out.println("vrijdag"); 
    setContentView(R.layout.weekend); 
    } 
    else if(day==7 || day==1){ 
     System.out.println("Weekend"); 
    setContentView(R.layout.weekend); 
    } 
    else{ 
     setContentView(R.layout.jammer); 
     showtext.run(); 
    } 
    } 


    } 

這裏是我的日誌

10-25 14:03:21.200: W/dalvikvm(12287): threadid=1: thread exiting with uncaught exception (group=0x4001d5a0) 
10-25 14:03:21.210: E/AndroidRuntime(12287): FATAL EXCEPTION: main 
10-25 14:03:21.210: E/AndroidRuntime(12287): java.lang.NullPointerException 
10-25 14:03:21.210: E/AndroidRuntime(12287): at nl.zaagmans.ZaagmanActivity$5.run(ZaagmanActivity.java:128) 
10-25 14:03:21.210: E/AndroidRuntime(12287): at nl.zaagmans.ZaagmanActivity$2.onClick(ZaagmanActivity.java:93) 
10-25 14:03:21.210: E/AndroidRuntime(12287): at android.view.View.performClick(View.java:2532) 
10-25 14:03:21.210: E/AndroidRuntime(12287): at android.view.View$PerformClick.run(View.java:9293) 
10-25 14:03:21.210: E/AndroidRuntime(12287): at android.os.Handler.handleCallback(Handler.java:587) 
10-25 14:03:21.210: E/AndroidRuntime(12287): at android.os.Handler.dispatchMessage(Handler.java:92) 
10-25 14:03:21.210: E/AndroidRuntime(12287): at android.os.Looper.loop(Looper.java:143) 
10-25 14:03:21.210: E/AndroidRuntime(12287): at android.app.ActivityThread.main(ActivityThread.java:4263) 
10-25 14:03:21.210: E/AndroidRuntime(12287): at java.lang.reflect.Method.invokeNative(Native Method) 
10-25 14:03:21.210: E/AndroidRuntime(12287): at java.lang.reflect.Method.invoke(Method.java:507) 
10-25 14:03:21.210: E/AndroidRuntime(12287): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
10-25 14:03:21.210: E/AndroidRuntime(12287): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
10-25 14:03:21.210: E/AndroidRuntime(12287): at dalvik.system.NativeStart.main(Native Method) 
+0

哪一行是128行?此外,請嘗試將您的代碼限制爲[sscce](http://sscce.org) –

+0

返回日期;是128行我會縮短我的代碼 – Perrykipkerrie

回答

3

t=(TextView)findViewById(R.id.t); 

返回NULL,因爲你的run方法是不是在一個範圍任何佈局文件。代碼沒有任何意義,因爲您正在創建一個對象,並在執行此任務之前將它分配給t

請不要發佈完整的源代碼,只發布相關部分。

+0

這不是幫助錯誤。當我編輯或刪除這個計數器不會再顯示出來。無論如何,當我刪除'myNotificationManager.cancel(1);'錯誤消失了,但通知不會消失。 順便說一句,感謝您的評論 – Perrykipkerrie

+0

我提到的行導致異常,因爲「t」爲空;),如果你刪除了取消() - 調用錯誤的代碼不再被調用。 – HefferWolf

+0

啊,我明白了。我會試試 – Perrykipkerrie

相關問題