关于onClick()的空指针

时间:2012-08-13 03:47:46

标签: java android onclick nullpointerexception

我有一个Android应用程序,有些用户在下面代码的onClick方法上报告了一个空指针。日志显示第226行,其中selectedAlbum.getId()检查为null。我没有遇到错误,但市场报告显示2个设备上出现此错误。我该怎么做才能解决这个问题?

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;

3 个答案:

答案 0 :(得分:0)

我认为您提供了错误的代码段。如果NPE在

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

...然后selectedAlbum为空,您无法调用null.getId()

答案 1 :(得分:0)

要停止应用程序崩溃,只需检查if(selectedAlbum == null)即可。如果是,请优雅地处理该情况并使用户免于经历强制关闭。

可能会出现Toast或Dialog,要求用户“请选择一个专辑”。如果没有看到selectAlbum如何分配值,则无法知道为什么只有两部手机创建了此错误报告。这些用户可能已经点击了一些您没有预测到的按钮,或者可能是制造商的怪癖......没有更多信息就无法知道。

答案 2 :(得分:0)

事实证明,由于用户端的错误导致应用程序无法从Facebook检索专辑列表,因此很少有错误。这已经解决了。感谢那些回应的人。