2012-08-13 39 views
-2

我有一個android應用程序,一些用戶報告下面的代碼的onClick方法的空指針。日誌顯示第226行,其中selectedAlbum.getId()檢查爲空。我沒有遇到錯誤,但是市場報告在2個設備上顯示此錯誤。我能做些什麼來解決這個問題?onClick上的空指針()

public void onClick(View v) { 
       Log.v("uploadButton", "uploadButton Clicked"); 

       if ((selectedAlbum.getId() == null) 
         || (selectedAlbum.getId() == "")) { 
        Toast.makeText(getApplicationContext(), 
          "Please Select an Album First", Toast.LENGTH_LONG) 
          .show(); 

       } else { 

        if (m_photos.isEmpty()) { 
         Toast.makeText(getApplicationContext(), 
           "No Pictures Selected", Toast.LENGTH_LONG) 
           .show(); 
        } else { 

         // Do action to upload photos from array to facebook 
         progressDialog = ProgressDialog 
           .show(EasyPhotoUpload.this, "", 
             "Uploading Photos..."); 
         Log.v("uploadButton", "Starting upload thread"); 
         new Thread(new Runnable() { 

          @Override 
          public void run() { 
           Log.v("uploadButton", "running....."); 

這裏是設置selectedAlbum的代碼。

public class AlbumSelectedListener implements OnItemSelectedListener { 
     @Override 
     public void onItemSelected(AdapterView<?> parent, View view, int pos, 
       long id) { 
      selectedAlbum = (Album) albumSpinner.getItemAtPosition(pos); 
     } 

     @Override 
     public void onNothingSelected(AdapterView<?> parent) {/* not implemented */ 
     } 
    } 

selectedAlbum也在活動開始和onCreate之前設置。

public Album selectedAlbum; 
+0

可能selectedAlbum爲null,你調用selectedAlbum.getId(),它會拋出空指針異常。 – Jason 2012-08-13 03:52:41

+0

請發佈將代碼賦值給selectedAlbum的代碼。 – 2012-08-13 03:55:23

+0

我看到你更新了selectAlbum被初始化的問題。 onClick()方法如何影響因素?這是一個始終可見的按鈕,是否隱藏到選擇專輯或其他內容? – Sam 2012-08-13 04:10:32

回答

0

我想你已經提供了錯誤的代碼片段。如果NPE是

if ((selectedAlbum.getId() == null) 

...然後selectedAlbum爲空,你不能叫null.getId()

+0

的確,爲什麼會發生在某些手機而不是其他人?我該如何預防? – adamwhiles 2012-08-13 03:56:05

+1

if(selectedAlbum == null || selectedAlbum.getId()== null) – 2012-08-13 04:07:45

0

要崩潰只需檢查if(selectedAlbum == null)停止應用程序。如果是這樣,優雅地處理這種情況,並保證用戶不會遇到強行關閉的情況。

也許會出現一個Toast或Dialog,要求用戶「請選擇一個相冊」。沒有看到selectAlbum被分配了一個值,所以不可能知道爲什麼只有兩個手機創建了這個錯誤報告。這些用戶可能點擊了一系列你沒有預測到的按鈕,或者它可能是製造商的怪癖......沒有更多信息是不可能知道的。

+0

儘管這在技術上是一種防止應用程序崩潰的解決方案,但您也可能想要調查它是否合乎邏輯是合理的,據推測當用戶還沒有選擇一個專輯..) – 2012-08-13 03:58:31

0

事實證明,由於用戶端出現錯誤,很少有錯誤導致應用無法從Facebook檢索專輯列表。這現在已經解決了。感謝那些迴應。