2012-08-13 35 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检索专辑列表。这现在已经解决了。感谢那些回应。