2015-10-19 94 views
0

有人可以幫助我檢查我的代碼有什麼問題嗎?我有4 spinnerWorkDetails,其名稱爲spinner1,2,3 and 4,它們的值已被插入到SQLite。現在我想在project1,project2,project3,project4微調器中顯示在spinner1,2,3,4中選擇的項目,但未能這樣做。將4個微調項目讀取到另一個微調項目

我已經檢查了每一個步驟,但仍然無法找出問題所在。

Update.java

public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      dbHelper = new MyDatabaseHelper(this); 
      setContentView(R.layout.updatepage); 
      final String name = getIntent().getExtras().getString("name1"); 
      final String date=getIntent().getExtras().getString("date1"); 
      final String ID = getIntent().getExtras().getString("ID"); 
      RetrievePage(name,date,ID); 
     } 

     public void addProject1(String c) 
      { 
       project1=(Spinner)findViewById(R.id.spinner8); 
       String[] arr = new String[]{"Pro-XXX-XXX","TRN-XXX-XXX","SRV-XXX-XXX","PRO-REE-BERGARDING","PRO-SKM-SSS","PRO-SKM-DI","PRO-SKM-PACKING","PRO-SIE-AVAGO_S110", 
       "PRO-SIE-BIOCON","PRO-BCM-T13/T17","TRIN-IN_HOUSE","TRIN-EXTERNAL","SRIV-SIE-LEMONGRASS","SRV-PW-SIMOCODE","SRV-REE-SIMOCODE","PRO-SKM-D5","PRO-SKM-DRIOU","PRO-BKI-DESMET", 
       "PRO-BKI-INFINEON","PRO-INH-ANDROID","PRO-BCM-S120","PRO-GAW-OP"}; 
       List<String> list = new ArrayList<String>(); 
       String project11 = c; 
       list.add(project11); 
       for(String s:arr){ 
        if(!list.contains(s)){ 
         list.add(s); 
        } 
       } 
       ArrayAdapter<String> adapter = new ArrayAdapter<String>(UpdatePage.this, android.R.layout.simple_spinner_dropdown_item, list); 
       adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
       project1.setAdapter(adapter); 
      } 

      public void addProject2(String d) 
      { 
       project2=(Spinner)findViewById(R.id.spinner9); 
       String[] arr = new String[]{"Pro-XXX-XXX","TRN-XXX-XXX","SRV-XXX-XXX","PRO-REE-BERGARDING","PRO-SKM-SSS","PRO-SKM-DI","PRO-SKM-PACKING","PRO-SIE-AVAGO_S110", 
         "PRO-SIE-BIOCON","PRO-BCM-T13/T17","TRIN-IN_HOUSE","TRIN-EXTERNAL","SRIV-SIE-LEMONGRASS","SRV-PW-SIMOCODE","SRV-REE-SIMOCODE","PRO-SKM-D5","PRO-SKM-DRIOU","PRO-BKI-DESMET", 
         "PRO-BKI-INFINEON","PRO-INH-ANDROID","PRO-BCM-S120","PRO-GAW-OP"}; 
       List<String> list = new ArrayList<String>(); 
       String project22 = d; 
       list.add(project22); 
       for(String s:arr){ 
        if(!list.contains(s)){ 
         list.add(s); 
        } 
       } 
       ArrayAdapter<String> adapter = new ArrayAdapter<String>(UpdatePage.this, android.R.layout.simple_spinner_dropdown_item, list); 
       adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
       project2.setAdapter(adapter); 
      } 

      public void addProject3(String e) 
      { 
       project3=(Spinner)findViewById(R.id.spinner13); 
       String[] arr = new String[]{"Pro-XXX-XXX","TRN-XXX-XXX","SRV-XXX-XXX","PRO-REE-BERGARDING","PRO-SKM-SSS","PRO-SKM-DI","PRO-SKM-PACKING","PRO-SIE-AVAGO_S110", 
         "PRO-SIE-BIOCON","PRO-BCM-T13/T17","TRIN-IN_HOUSE","TRIN-EXTERNAL","SRIV-SIE-LEMONGRASS","SRV-PW-SIMOCODE","SRV-REE-SIMOCODE","PRO-SKM-D5","PRO-SKM-DRIOU","PRO-BKI-DESMET", 
         "PRO-BKI-INFINEON","PRO-INH-ANDROID","PRO-BCM-S120","PRO-GAW-OP"}; 
       List<String> list = new ArrayList<String>(); 
       String project33 = e; 
       list.add(project33); 
       for(String s:arr){ 
        if(!list.contains(s)){ 
         list.add(s); 
        } 
       } 
       ArrayAdapter<String> adapter = new ArrayAdapter<String>(UpdatePage.this, android.R.layout.simple_spinner_dropdown_item, list); 
       adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
       project3.setAdapter(adapter); 
      } 

      public void addProject4(String f) 
      { 
       project4=(Spinner)findViewById(R.id.spinner14); 
       String[] arr = new String[]{"Pro-XXX-XXX","TRN-XXX-XXX","SRV-XXX-XXX","PRO-REE-BERGARDING","PRO-SKM-SSS","PRO-SKM-DI","PRO-SKM-PACKING","PRO-SIE-AVAGO_S110", 
         "PRO-SIE-BIOCON","PRO-BCM-T13/T17","TRIN-IN_HOUSE","TRIN-EXTERNAL","SRIV-SIE-LEMONGRASS","SRV-PW-SIMOCODE","SRV-REE-SIMOCODE","PRO-SKM-D5","PRO-SKM-DRIOU","PRO-BKI-DESMET", 
         "PRO-BKI-INFINEON","PRO-INH-ANDROID","PRO-BCM-S120","PRO-GAW-OP"}; 
       List<String> list = new ArrayList<String>(); 
       String project44 = f; 
       list.add(project44); 
       for(String s:arr){ 
        if(!list.contains(s)){ 
         list.add(s); 
        } 
       } 
       ArrayAdapter<String> adapter = new ArrayAdapter<String>(UpdatePage.this, android.R.layout.simple_spinner_dropdown_item, list); 
       adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
       project4.setAdapter(adapter); 
      } 


      public void RetrievePage(String name,String date, String id) { 
       final String name2 = name; 
       final String date2=date; 
       final String id2 = id; 
       final EditText name3 = (EditText) findViewById(R.id.editText9); 
       final EditText date3 = (EditText) findViewById(R.id.editText12); 

       final EditText per1=(EditText) findViewById(R.id.editText20); 
       final EditText per2=(EditText) findViewById(R.id.editText24); 
       final EditText per3=(EditText) findViewById(R.id.editText28); 
       final EditText per4=(EditText) findViewById(R.id.editText32); 

       database = dbHelper.getWritableDatabase(); 
       c = database.rawQuery("SELECT i.Weather, i.Status,w.Subcontractors, w.NumberOfPerson, w.NumberOfHours, wd.Project, wd.WorkDescription, wd.Per, wd.TimeIn, wd.TimeOut FROM Information i LEFT JOIN WorkForce w ON w.TInfo_id = i._id LEFT JOIN WorkDetails wd ON wd.Twf_id=w._id WHERE i.Name = ? AND i._id= ? ", 
         new String[]{String.valueOf(name2),String.valueOf(id2)}, null); 

        if (c != null) { 
         while (c.moveToNext()) { 

         Details WD = new Details(); 


         String Weather = c.getString(c.getColumnIndexOrThrow(MyDatabaseHelper.Weather)); 

           String Project11=c.getString(c.getColumnIndexOrThrow(MyDatabaseHelper.Project)); 
           String Project22=c.getString(c.getColumnIndexOrThrow(MyDatabaseHelper.Project)); 
           String 

Project33=c.getString(c.getColumnIndexOrThrow(MyDatabaseHelper.Project)); 
          String Project44=c.getString(c.getColumnIndexOrThrow(MyDatabaseHelper.Project)); 
          String Per1=c.getString(c.getColumnIndexOrThrow(MyDatabaseHelper.Per)); 
          String Per2=c.getString(c.getColumnIndexOrThrow(MyDatabaseHelper.Per)); 
          String Per3=c.getString(c.getColumnIndexOrThrow(MyDatabaseHelper.Per)); 
          String Per4=c.getString(c.getColumnIndexOrThrow(MyDatabaseHelper.Per)); 
          addProject1(Project11); 
          addProject2(Project22); 
          addProject3(Project33); 
          addProject4(Project44); 
          addWeather(Weather); 

          WD.setProject(Project11); 
          WD.setProject(Project22); 
          WD.setProject(Project33); 
          WD.setProject(Project44); 
          WD.setPer(Per1); 
          WD.setPer(Per2); 
          WD.setPer(Per3); 
          WD.setPer(Per4); 
          per1.setText(Per1); 
          per2.setText(Per2); 
          per3.setText(Per3); 
          per4.setText(Per4); 

         } 

        } 
        c.close(); 


       } 

錯誤的logcat

Process: com.example.project.project, PID: 2364 
    java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference 
      at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:401) 
      at android.widget.ArrayAdapter.getView(ArrayAdapter.java:369) 
      at android.widget.AbsSpinner.onMeasure(AbsSpinner.java:194) 
      at android.widget.Spinner.onMeasure(Spinner.java:580) 
      at android.support.v7.widget.AppCompatSpinner.onMeasure(AppCompatSpinner.java:410) 
      at android.view.View.measure(View.java:18788) 
      at android.view.ViewGroup.measureChild(ViewGroup.java:5922) 
      at android.view.ViewGroup.measureChildren(ViewGroup.java:5899) 
      at android.widget.AbsoluteLayout.onMeasure(AbsoluteLayout.java:66) 

我有一個具有微調和下面的代碼工作正常,我的一個活動。

public void addWeather(String a) { 
    weather3 = (Spinner) findViewById(R.id.spinner5); 
    String[] arr = new String[]{"Sunny","Cloudy","Rainy","Thunderstorm"}; 
    List<String> list = new ArrayList<String>(); 
    String weather = a; 
    list.add(weather); 
    for(String s:arr){ 
     if(!list.contains(s)){ 
      list.add(s); 
     } 
    } 
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(UpdatePage.this, android.R.layout.simple_spinner_dropdown_item, list); 
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    weather3.setAdapter(adapter); 
} 
+0

你是否顯式或隱式地將null作爲參數傳遞給addProjectX()方法之一? – logcat

回答

0

由於異常看來你的代碼之外發生的(但具有一定的相關代碼),你可以把它放到斷點在您的每一個方法的開始,看看您的應用崩潰正是幫助解決這個問題。或者,將日誌打印放在每個方法的開始和結束處,以查看哪個方法開始並且無法結束,並幫助檢測問題出在哪裏。

我的猜測是您將null作爲參數傳遞給您的addProject()方法之一,該方法導致列表包含空對象,然後當適配器嘗試對該空對象調用toString()方法時,你會得到錯誤。這個對象也可以隱式傳遞,例如,作爲一個你忘記初始化的變量。你可以做的是檢查參數是否爲空,只有當它不是,將它添加到列表中,或者如果參數爲空或者實現你想要的任何邏輯,則在開始時退出該方法。

+0

順便說一句:你的代碼有點凌亂,這可能會爲將來的錯誤打開大門,並使其難以維護你的應用程序。而不是有4個方法,每個微調器一個,你應該有一個方法,將所需的微調器作爲額外的參數,從而減少代碼重複。您在每個方法體內定義並始終添加的靜態字符串可以在strings.xml文件中定義並從此處獲得,或者更好 - 添加到佈局文件內的微調器,然後您可以添加和刪除更多項目需要。我希望這很清楚。 – logcat

+0

即使我只使用addProject1()方法並刪除其他三個函數,它也會崩潰 – John

+0

您是否閱讀過我的上述答案? – logcat

相關問題