2015-11-23 44 views
-2

我正在嘗試構建一個基本的表格視圖,其中有幾行和一列填充了textviews來表示課程時間表。我已經編寫了一些代碼,可以計算出使用日期和時間的課程,然後更改其textview的顏色。我試圖在一個單獨的類中執行此操作,因爲我希望以多種方式執行它。但是,當我運行它時,我得到由findViewById引起的nullPointerException。在findViewById上的空指針掃描

錯誤:

FATAL EXCEPTION: main 
11-23 19:43:51.870 7861-7861/com.example.harris.whathaveilearnt E/AndroidRuntime: Process: com.example.harris.whathaveilearnt, PID: 7861 
11-23 19:43:51.870 7861-7861/com.example.harris.whathaveilearnt E/AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.harris.whathaveilearnt/com.example.harris.whathaveilearnt.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.Window.findViewById(int)' on a null object reference 
11-23 19:43:51.870 7861-7861/com.example.harris.whathaveilearnt E/AndroidRuntime:  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416) 
11-23 19:43:51.870 7861-7861/com.example.harris.whathaveilearnt E/AndroidRuntime:  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
11-23 19:43:51.870 7861-7861/com.example.harris.whathaveilearnt E/AndroidRuntime:  at android.app.ActivityThread.-wrap11(ActivityThread.java) 
11-23 19:43:51.870 7861-7861/com.example.harris.whathaveilearnt E/AndroidRuntime:  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
11-23 19:43:51.870 7861-7861/com.example.harris.whathaveilearnt E/AndroidRuntime:  at android.os.Handler.dispatchMessage(Handler.java:102) 
11-23 19:43:51.870 7861-7861/com.example.harris.whathaveilearnt E/AndroidRuntime:  at android.os.Looper.loop(Looper.java:148) 
11-23 19:43:51.870 7861-7861/com.example.harris.whathaveilearnt E/AndroidRuntime:  at android.app.ActivityThread.main(ActivityThread.java:5417) 
11-23 19:43:51.870 7861-7861/com.example.harris.whathaveilearnt E/AndroidRuntime:  at java.lang.reflect.Method.invoke(Native Method) 
11-23 19:43:51.870 7861-7861/com.example.harris.whathaveilearnt E/AndroidRuntime:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
11-23 19:43:51.870 7861-7861/com.example.harris.whathaveilearnt E/AndroidRuntime:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
11-23 19:43:51.870 7861-7861/com.example.harris.whathaveilearnt E/AndroidRuntime: Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.Window.findViewById(int)' on a null object reference 
11-23 19:43:51.870 7861-7861/com.example.harris.whathaveilearnt E/AndroidRuntime:  at android.app.Activity.findViewById(Activity.java:2090) 
11-23 19:43:51.870 7861-7861/com.example.harris.whathaveilearnt E/AndroidRuntime:  at com.example.harris.whathaveilearnt.selectLesson.nextlesson(selectLesson.java:73) 
11-23 19:43:51.870 7861-7861/com.example.harris.whathaveilearnt E/AndroidRuntime:  at com.example.harris.whathaveilearnt.MainActivity.onCreate(MainActivity.java:41) 
11-23 19:43:51.870 7861-7861/com.example.harris.whathaveilearnt E/AndroidRuntime:  at android.app.Activity.performCreate(Activity.java:6237) 
11-23 19:43:51.870 7861-7861/com.example.harris.whathaveilearnt E/AndroidRuntime:  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107) 
11-23 19:43:51.870 7861-7861/com.example.harris.whathaveilearnt E/AndroidRuntime:  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369) 
11-23 19:43:51.870 7861-7861/com.example.harris.whathaveilearnt E/AndroidRuntime:  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)  
11-23 19:43:51.870 7861-7861/com.example.harris.whathaveilearnt E/AndroidRuntime:  at android.app.ActivityThread.-wrap11(ActivityThread.java)  
11-23 19:43:51.870 7861-7861/com.example.harris.whathaveilearnt E/AndroidRuntime:  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)  
11-23 19:43:51.870 7861-7861/com.example.harris.whathaveilearnt E/AndroidRuntime:  at android.os.Handler.dispatchMessage(Handler.java:102)  
11-23 19:43:51.870 7861-7861/com.example.harris.whathaveilearnt E/AndroidRuntime:  at android.os.Looper.loop(Looper.java:148)  
11-23 19:43:51.870 7861-7861/com.example.harris.whathaveilearnt E/AndroidRuntime:  at android.app.ActivityThread.main(ActivityThread.java:5417)  
11-23 19:43:51.870 7861-7861/com.example.harris.whathaveilearnt E/AndroidRuntime:  at java.lang.reflect.Method.invoke(Native Method) 

活動:

public class selectLesson extends MainActivity { 

    Calendar c = Calendar.getInstance(); 
    int dayOfWeek = c.get(Calendar.DAY_OF_WEEK); 
    int dateDays = c.get(Calendar.DAY_OF_MONTH); 
    int dateMonth = c.get(Calendar.MONTH); 
    int weekOfMonth = c.get(Calendar.WEEK_OF_MONTH); 
    LocalTime currentTime = LocalTime.now(); 
    int nextLessonNumber = 0; 
    String nextLessonString; 
    int currentLesson; 

    LocalTime lesson1Start = new LocalTime("09:15"); 
    LocalTime lesson1End = new LocalTime("10:15"); 
    LocalTime lesson2Start = new LocalTime("10:15"); 
    LocalTime lesson3Start = new LocalTime("11:40"); 
    LocalTime lesson4start = new LocalTime("13:45"); 
    LocalTime lesson5Start = new LocalTime("14:45"); 
    LocalTime endOfDay = new LocalTime ("15:50"); 

    private static final String TAG = "selectLesson"; 

    public void nextlesson() { 

     if (currentTime.isBefore(lesson1Start)) { 
      //p1 next 
      nextLessonNumber = 1; 
      Log.d(TAG, "It worked"); 
      currentLesson = 0; 
     } else if (currentTime.isAfter(lesson1Start) && currentTime.isBefore(lesson1End)) { 
      //p2 next 
      nextLessonNumber = 2; 
      Log.d(TAG, "It worked"); 
      currentLesson = 1; 
     } else if (currentTime.isAfter(lesson2Start) && currentTime.isBefore(lesson3Start)) { 
      //p3 next 
      nextLessonNumber = 3; 
      Log.d(TAG, "It worked"); 
      currentLesson = 2; 
     } else if (currentTime.isAfter(lesson3Start) && currentTime.isBefore(lesson4start)) { 
      //p4 next 
      nextLessonNumber = 4; 
      Log.d(TAG, "It worked"); 
      currentLesson = 3; 
     } else if (currentTime.isAfter(lesson4start) && currentTime.isBefore(lesson5Start)) { 
      //p5 next 
      nextLessonNumber = 5; 
      Log.d(TAG, "It worked"); 
      currentLesson = 4; 
     } else if (currentTime.isAfter(lesson5Start) && currentTime.isAfter(endOfDay)) { 
      currentLesson = 5; 
     } else { 
      nextLessonNumber = 0; 
      Log.d(TAG, "It didn't worked"); 
     } 



     TextView MonP1 = (TextView) findViewById(R.id.monP1Text); 
     TextView MonP2 = (TextView) findViewById(R.id.monP2Text); 
     TextView MonP3 = (TextView) findViewById(R.id.monP3Text); 
     TextView MonP4 = (TextView) findViewById(R.id.monP4Text); 
     TextView MonP5 = (TextView) findViewById(R.id.monP5Text); 

     TextView TueP1 = (TextView) findViewById(R.id.tueP1Text); 
     TextView TueP2 = (TextView) findViewById(R.id.tueP2Text); 
     TextView TueP3 = (TextView) findViewById(R.id.tueP3Text); 
     TextView TueP4 = (TextView) findViewById(R.id.tueP4Text); 
     TextView TueP5 = (TextView) findViewById(R.id.tueP5Text); 

     TextView WedP1 = (TextView) findViewById(R.id.wedP1Text); 
     TextView WedP2 = (TextView) findViewById(R.id.wedP2Text); 
     TextView WedP3 = (TextView) findViewById(R.id.wedP3Text); 
     TextView WedP4 = (TextView) findViewById(R.id.wedP4Text); 
     TextView WedP5 = (TextView) findViewById(R.id.wedP5Text); 

     TextView ThursP1 = (TextView) findViewById(R.id.thursP1Text); 
     TextView ThursP2 = (TextView) findViewById(R.id.thursP2Text); 
     TextView ThursP3 = (TextView) findViewById(R.id.thursP3Text); 
     TextView ThursP4 = (TextView) findViewById(R.id.thursP4Text); 
     TextView ThursP5 = (TextView) findViewById(R.id.thursP5Text); 

     TextView FriP1 = (TextView) findViewById(R.id.friP1Text); 
     TextView FriP2 = (TextView) findViewById(R.id.friP2Text); 
     TextView FriP3 = (TextView) findViewById(R.id.friP3Text); 
     TextView FriP4 = (TextView) findViewById(R.id.friP4Text); 
     TextView FriP5 = (TextView) findViewById(R.id.friP5Text); 
     if ((weekOfMonth == 1) || (weekOfMonth == 3)) { 
      Log.d(TAG, "It made it this far"); 
      switch (dayOfWeek) { 
       case 1: //Sunday DO NOTHING 

        break; 
       case 2: //Monday WEEK A 
        if (currentLesson == 1) { 
         MonP1.setTextColor(this.getResources().getColor(R.color.colorAccent)); 

        } else if (currentLesson == 2) { 
         MonP2.setTextColor(this.getResources().getColor(R.color.colorAccent)); 
        } else if (currentLesson == 3) { 
         MonP3.setTextColor(this.getResources().getColor(R.color.colorAccent)); 
        } else if (currentLesson == 4) { 
         MonP4.setTextColor(this.getResources().getColor(R.color.colorAccent)); 
        } else if (currentLesson == 5) { 
         MonP5.setTextColor(this.getResources().getColor(R.color.colorAccent)); 
        } 
        break; 

       case 3: //Tuesday WEEK A 
        if (currentLesson == 1) { 
         TueP1.setTextColor(this.getResources().getColor(R.color.colorAccent)); 

        } else if (currentLesson == 2) { 
         TueP2.setTextColor(this.getResources().getColor(R.color.colorAccent)); 
        } else if (currentLesson == 3) { 
         TueP3.setTextColor(this.getResources().getColor(R.color.colorAccent)); 
        } else if (currentLesson == 4) { 
         TueP4.setTextColor(this.getResources().getColor(R.color.colorAccent)); 
        } else if (currentLesson == 5) { 
         TueP5.setTextColor(this.getResources().getColor(R.color.colorAccent)); 
        } 
        break; 

       case 4: //Wednesday WEEK A 
        if (currentLesson == 1) { 
         WedP1.setTextColor(this.getResources().getColor(R.color.colorAccent)); 

        } else if (currentLesson == 2) { 
         WedP2.setTextColor(this.getResources().getColor(R.color.colorAccent)); 
        } else if (currentLesson == 3) { 
         WedP3.setTextColor(this.getResources().getColor(R.color.colorAccent)); 
        } else if (currentLesson == 4) { 
         WedP4.setTextColor(this.getResources().getColor(R.color.colorAccent)); 
        } else if (currentLesson == 5) { 
         WedP5.setTextColor(this.getResources().getColor(R.color.colorAccent)); 
        } 
        break; 

       case 5: //Thursday WEEK A 
        if (currentLesson == 1) { 
         ThursP1.setTextColor(this.getResources().getColor(R.color.colorAccent)); 

        } else if (currentLesson == 2) { 
         ThursP2.setTextColor(this.getResources().getColor(R.color.colorAccent)); 
        } else if (currentLesson == 3) { 
         ThursP3.setTextColor(this.getResources().getColor(R.color.colorAccent)); 
        } else if (currentLesson == 4) { 
         ThursP4.setTextColor(this.getResources().getColor(R.color.colorAccent)); 
        } else if (currentLesson == 5) { 
         ThursP5.setTextColor(this.getResources().getColor(R.color.colorAccent)); 
        } 
        break; 


       case 6: //Friday WEEK A 
        if (currentLesson == 1) { 
         FriP1.setTextColor(this.getResources().getColor(R.color.colorAccent)); 

        } else if (currentLesson == 2) { 
         FriP2.setTextColor(this.getResources().getColor(R.color.colorAccent)); 
        } else if (currentLesson == 3) { 
         FriP3.setTextColor(this.getResources().getColor(R.color.colorAccent)); 
        } else if (currentLesson == 4) { 
         FriP4.setTextColor(this.getResources().getColor(R.color.colorAccent)); 
        } else if (currentLesson == 5) { 
         FriP5.setTextColor(this.getResources().getColor(R.color.colorAccent)); 
        } 
        break; 
       case 7: //Saturday DO NOTHING 

        break; 

      } 
     } else { 
      switch (dayOfWeek) { 
       case 1: //Sunday DO NOTHING 

        break; 
       case 2: //Monday WEEK A 
        if (currentLesson == 1) { 
         MonP1.setTextColor(this.getResources().getColor(R.color.colorAccent)); 

        } else if (currentLesson == 2) { 
         MonP2.setTextColor(this.getResources().getColor(R.color.colorAccent)); 
        } else if (currentLesson == 3) { 
         MonP3.setTextColor(this.getResources().getColor(R.color.colorAccent)); 
        } else if (currentLesson == 4) { 
         MonP4.setTextColor(this.getResources().getColor(R.color.colorAccent)); 
        } else if (currentLesson == 5) { 
         MonP5.setTextColor(this.getResources().getColor(R.color.colorAccent)); 
        } 
        break; 

       case 3: //Tuesday WEEK A 
        if (currentLesson == 1) { 
         TueP1.setTextColor(this.getResources().getColor(R.color.colorAccent)); 

        } else if (currentLesson == 2) { 
         TueP2.setTextColor(this.getResources().getColor(R.color.colorAccent)); 
        } else if (currentLesson == 3) { 
         TueP3.setTextColor(this.getResources().getColor(R.color.colorAccent)); 
        } else if (currentLesson == 4) { 
         TueP4.setTextColor(this.getResources().getColor(R.color.colorAccent)); 
        } else if (currentLesson == 5) { 
         TueP5.setTextColor(this.getResources().getColor(R.color.colorAccent)); 
        } 
        break; 

       case 4: //Wednesday WEEK A 
        if (currentLesson == 1) { 
         WedP1.setTextColor(this.getResources().getColor(R.color.colorAccent)); 

        } else if (currentLesson == 2) { 
         WedP2.setTextColor(this.getResources().getColor(R.color.colorAccent)); 
        } else if (currentLesson == 3) { 
         WedP3.setTextColor(this.getResources().getColor(R.color.colorAccent)); 
        } else if (currentLesson == 4) { 
         WedP4.setTextColor(this.getResources().getColor(R.color.colorAccent)); 
        } else if (currentLesson == 5) { 
         WedP5.setTextColor(this.getResources().getColor(R.color.colorAccent)); 
        } 
        break; 

       case 5: //Thursday WEEK A 
        if (currentLesson == 1) { 
         ThursP1.setTextColor(this.getResources().getColor(R.color.colorAccent)); 

        } else if (currentLesson == 2) { 
         ThursP2.setTextColor(this.getResources().getColor(R.color.colorAccent)); 
        } else if (currentLesson == 3) { 
         ThursP3.setTextColor(this.getResources().getColor(R.color.colorAccent)); 
        } else if (currentLesson == 4) { 
         ThursP4.setTextColor(this.getResources().getColor(R.color.colorAccent)); 
        } else if (currentLesson == 5) { 
         ThursP5.setTextColor(this.getResources().getColor(R.color.colorAccent)); 
        } 
        break; 


       case 6: //Friday WEEK A 
        if (currentLesson == 1) { 
         FriP1.setTextColor(this.getResources().getColor(R.color.colorAccent)); 

        } else if (currentLesson == 2) { 
         FriP2.setTextColor(this.getResources().getColor(R.color.colorAccent)); 
        } else if (currentLesson == 3) { 
         FriP3.setTextColor(this.getResources().getColor(R.color.colorAccent)); 
        } else if (currentLesson == 4) { 
         FriP4.setTextColor(this.getResources().getColor(R.color.colorAccent)); 
        } else if (currentLesson == 5) { 
         FriP5.setTextColor(this.getResources().getColor(R.color.colorAccent)); 
        } 
        break; 
       case 7: //Saturday DO NOTHING 

        break; 
      } 
     } 


    } 





} 

主要活動:

package com.example.harris.whathaveilearnt; 

import android.os.Bundle; 
import android.provider.CalendarContract; 
import android.support.design.widget.FloatingActionButton; 
import android.support.design.widget.Snackbar; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.LinearLayoutManager; 
import android.support.v7.widget.RecyclerView; 
import android.support.v7.widget.Toolbar; 
import android.text.format.Time; 
import android.util.Log; 
import android.view.View; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.widget.TextView; 

import org.joda.time.LocalTime; 

import java.util.Calendar; 


public class MainActivity extends AppCompatActivity { 


    private static final String TAG = "MyActivity"; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     selectLesson selectLesson = new selectLesson(); 
     Calendar c = Calendar.getInstance(); 
     int dayOfWeek = c.get(Calendar.DAY_OF_WEEK); 
     int dateDays = c.get(Calendar.DAY_OF_MONTH); 
     int dateMonth = c.get(Calendar.MONTH); 
     LocalTime currentTime = LocalTime.now(); 

     selectLesson.nextlesson(); 







     TextView NextLessonTextView = (TextView) findViewById(R.id.NextLessonText); 
     TextView DayOfTheWeek = (TextView) findViewById(R.id.dayOfWeekText); 
     String dayOfWeekText; 

//  DayOfTheWeek.setText(String.valueOf(dayOfWeek) + String.valueOf(dateDays)); 
     switch(dayOfWeek){ 
      case 1: dayOfWeekText = "Sunday"; 
       DayOfTheWeek.setText(dayOfWeekText +" " +dateDays +" " + dateMonth); 
       break; 
      case 2: dayOfWeekText = "Monday"; 
       DayOfTheWeek.setText(dayOfWeekText +" " +dateDays +" " + dateMonth); 
       break; 

      case 3: dayOfWeekText = "Tuesday"; 
       DayOfTheWeek.setText(dayOfWeekText +" " +dateDays +" " + dateMonth); 
       break; 
      case 4: dayOfWeekText = "Wednesday"; 
       DayOfTheWeek.setText(dayOfWeekText +" " +dateDays +" " + dateMonth); 
       break; 
      case 5: dayOfWeekText = "Thurday"; 
       DayOfTheWeek.setText(dayOfWeekText +" " +dateDays +" " + dateMonth); 
       break; 
      case 6: dayOfWeekText = "Friday"; 
       DayOfTheWeek.setText(dayOfWeekText +" " +dateDays +" " + dateMonth); 
       break; 
      case 7: dayOfWeekText = "Saturday"; 
       DayOfTheWeek.setText(dayOfWeekText +" " +dateDays +" " + dateMonth); 
       break; 
     } 








     FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
     fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
         .setAction("Action", null).show(); 
      } 
     }); 


    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 
} 
+0

你可以發佈你的'MainActivity'代碼嗎? nextlesson()從哪裏調用?在我看來,在你開始調用'findViewById()'之前,你還沒有調用過'setContentView(R.layout.your_layout)'。 – ehehhh

+1

也許你還沒有在onCreate()中調用'setContentView()'? –

回答