2015-09-28 37 views
0

在這個程序中,我希望在按鈕上顯示時間。但它會生成NullpointerException。我已經嘗試過Log。它顯示在日誌中。但是,開始在按鈕上顯示時立即顯示錯誤。請,任何人都可以告訴我這個程序有什麼錯誤。不同的DateTimePicker問題

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    tools:context=".MainActivity"> 

    <Button android:id="@+id/button_date" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" /> 

    <Button android:id="@+id/button_time" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" /> 


</LinearLayout> 

public class MainActivity extends AppCompatActivity 
{ 
    //Declaration for class 
    Views views; 
    // Declartion for member vairables 
    int hours; 
    int minutes; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Views views = new Views(); 

     // pick up the default date using Calender class 
     Calendar calendar = Calendar.getInstance(Locale.getDefault()); 

     hours = calendar.get(Calendar.HOUR); 
     minutes = calendar.get(Calendar.MINUTE); 
     setupTime(hours, minutes); 
    } 

    private void setupTime(int hours, int minutes){ 
     // Log.i("TAG", "------------ " + hours + " "); 
     // Log.i("TAG", "------------ " + minutes + " "); 
     views.button_time.setText(String.valueOf(hours)); 

    } 
    class Views{ 
     Button button_date; 
     Button button_time; 

     public Views(){ 
      Button button_date = (Button) findViewById(R.id.button_date); 
      Button button_time = (Button) findViewById(R.id.button_time); 
     } 
    } 
} 
+1

你正在申報button_date和button_time兩次,嘗試刪除構造 –

回答

0

在Views類構造函數中,您將視圖分配給其他變量,而不是在類中聲明的視圖。

試試這個:

public Views(){ 

     button_date = (Button) findViewById(R.id.button_date); 
     button_time = (Button) findViewById(R.id.button_time); 
} 

說明

您聲明2個變量在這裏:

class Views{ 
    Button button_date; 
    Button button_time; 

button_date和button_time,這些變量將長達大約爲視圖對象是活的

然後,在你的構造函數,你再次聲明他們:

public Views(){ 
     Button button_date = (Button) findViewById(R.id.button_date); 
     Button button_time = (Button) findViewById(R.id.button_time); 
    } 

即使這樣,它們具有相同的名稱,它們是不同的變量,該問題之前宣佈。這兩個變量只會在構造函數中生存,並且在構造函數完成其工作後,它們的值不會持續。

現在,試着猜測你在首先聲明的變量中有什麼值?如果你猜對了,那是正確的。當你試圖打電話時會發生什麼?

views.button_time.setText(...) 

您對null變量調用setText,因此會發生NullPointerException。

更新2個

同樣的問題也出現在這裏也:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Views views = new Views(); 

改成這樣:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    views = new Views(); 
+0

謝謝里面的一個人你的答覆。對不起的朋友,我無法理解這是什麼意思。請你能解釋清楚嗎? –

+0

朋友我找到了相同的結果 –

+0

朋友同樣的結果。結果沒有變化 –

0

試試這個:

public Views() { 
    this.button_date = (Button) findViewById(R.id.button_date); 
    this.button_time = (Button) findViewById(R.id.button_time); 
} 
+0

朋友同樣的結果。沒有變化 –

+0

你可能不得不通過mainActivity的實例,如 Views views = new Views(this); public Views(MainActivity mainActivity){ this.button_date =(Button)mainActivity.findViewById(R.id.button_date); this.button_time =(Button)mainActivity.findViewById(R.id.button_time); (按鈕)mainActivity.findViewById(R.id.button_time)的語法確認; – krishna

+0

謝謝你的朋友。我感謝您的幫助。它正在工作。 –

0

讓我們改變這個類 - 這部分代碼

class Views{ 
    Button button_date; 
    Button button_time; 

    public Views(){ 
     Button button_date = (Button) findViewById(R.id.button_date); 
     Button button_time = (Button) findViewById(R.id.button_time); 
    } 
} 

class Views{ 
    Button button_date; 
    Button button_time; 

    public Views(){ 
     button_date = (Button) findViewById(R.id.button_date); 
     button_time = (Button) findViewById(R.id.button_time); 
    } 
} 
+0

朋友沒有變化的結果。 –

+0

嗨朋友我已經添加了一天一年和一年。它正在工作,但它以yy/mm/dd格式給我。請你能告訴我怎樣才能使用dd/mm/yy格式 –

0

試試這個

public class MainActivity extends AppCompatActivity 
{ 
//Declaration for class 
Views views; 
// Declartion for member vairables 
int hours; 
int minutes; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    views = new Views(this); 

    // pick up the default date using Calender class 
    Calendar calendar = Calendar.getInstance(Locale.getDefault()); 

    hours = calendar.get(Calendar.HOUR); 
    minutes = calendar.get(Calendar.MINUTE); 
    setupTime(hours, minutes); 
} 

    private void setupTime(int hours, int minutes){ 
    // Log.i("TAG", "------------ " + hours + " "); 
    // Log.i("TAG", "------------ " + minutes + " "); 
    views.button_time.setText(String.valueOf(hours)); 

} 

class Views{ 
    Button button_date; 
    Button button_time; 

    public Views(Activity activity){ 
     button_date = (Button)  activity.findViewById(R.id.button_date); 
     button_time = (Button)  activity.findViewById(R.id.button_time); 
    } 
} 

} 
+0

嗨朋友我已經添加了日期,但是日期是yy/mm/dd。我希望以dd/mm/yy格式顯示日期。請,你能幫助我嗎?以下是我的程序private void setupDate(int day,int month,int year){ views.button_date.setText(String.valueOf(day)+「/」+ String.valueOf(month + 1)+「/」+ String.valueOf(year)); } –

+0

private void setupDate(int year,int month,int day){views.button_date.setText(String.valueOf(day)+「/」+ String.valueOf(month + 1)+「/」+ String。的valueOf(年)); } – Hovo

+0

嘗試上面的代碼,我可以更正確地回答,如果你也給函數調用代碼,代碼必須是這樣的 setupDate(day,month,year); – Hovo