2013-02-15 36 views
1

基本上,我創建了一個簡單的類來處理某些日期作爲應用程序的一部分。因爲我並不是所有關於Java的東西,所以我發現了一些與日期一致的代碼,主要是日曆類。所以我從示例代碼中抽取了一些部分,並提出了以下類。Android開發:類內導致問題的Calendar.getInstance()

package com.example.myApp; 
import java.util.Calendar; 
import android.util.Log; 

public class Date { 
    public int day; 
    public int month; 
    public int year; 
    public String formattedDate; 
    public Calendar calendar; 

    public Date(){ 
     //Set to today by default. 
      // Create a Calendar object 
      Calendar calendar = Calendar.getInstance();   
      // Get current day from calendar 
      day = calendar.get(Calendar.DATE); 
      // Get current month from calendar 
      month = calendar.get(Calendar.MONTH); 
      // Get current year from calendar 
      year = calendar.get(Calendar.YEAR); 
    } 

    public String getDate(){ 
     formattedDate = day+"/"+month+"/"+year; 
     return formattedDate; 
    } 

    public void incDate(){ 
     calendar.add(Calendar.DATE, +1); 
    } 
} 

當我在主要活動中運行incDate()方法時,程序崩潰。因爲這個類是相當基本的,唯一不同的是它與另一個類相比我有很好的工作方式,所以聲明一個日曆實例而不是正常實例化它,這讓我認爲這是問題所在。

如果有人能解釋爲什麼有問題的方法導致應用程序崩潰,我會非常感激。

PS。我打算在這個班級的基礎上增加更多的方法,但由於上述原因,顯然這是目前毫無意義的冒險。

回答

3

變化

Calendar calendar = Calendar.getInstance();   

calendar = Calendar.getInstance();   

你是可變的陰影在構造函數中,僅此而已。

當你使用變量shadow時,你可以使用的另一個作用域上的變量名。在這種情況下,您只實例化構造函數的本地calendar,因此類範圍爲calendar的類實例保留爲null。我還建議不要命名你的班級Date,因爲這已經是一個Java提供的課程 - 你引入了歧義。

1

改變這一行:

Calendar calendar = Calendar.getInstance(); 

要:

calendar = Calendar.getInstance(); 

因爲你是初始化一個新的變量,shadows實例變量,所以當你調用incDate()實例變量calendar仍然null