0

我嘗試在其中打開Alert DialogNumber Picker時出現了一個奇怪的問題。警報對話框上的空指針異常僅在Android 6.0上顯示

private class ButtonClickListener implements View.OnClickListener { 

     @Override 
     public void onClick(View v) { 
      AlertDialog.Builder builder = new AlertDialog.Builder(ImagesActivity.this); 
      AlertDialog dialog; 
      final NumberPicker np = new NumberPicker(ImagesActivity.this); 
      np.setMinValue(1); 
      np.setMaxValue(dataModel.getPagesNumber()); 
      np.setValue(currentPage); 
      builder.setView(np); 
      builder.setTitle(R.string.jump_title); 
      builder.setPositiveButton(R.string.jump_ok, new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        pager.setCurrentItem(np.getValue() - 1); 
        dialog.dismiss(); 
       } 
      }); 
      builder.setNegativeButton(R.string.jump_cancel, new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        dialog.dismiss(); 
       } 
      }); 

      dialog = builder.create(); 
      dialog.show(); 
     } 
    } 

ImagesActivity是一流的,其中ButtonClickListener放置:在我按下buttonlistener設置爲它應該叫。它顯示ViewPager,應該滾動到使用NumberPicker選擇的頁面中。

它適用於我的舊手機很好,但是當我嘗試推出它Android 6我得到的消息錯誤

顯示java.lang.NullPointerException:試圖調用虛擬方法 「機器人.view.View android.view.View.findViewById(int)'null object reference at com.android.internal.app.AlertController.setupView(AlertController.java:489) at com.android.internal.app .AlertController.installContent(AlertController.java:234) at android.app.AlertDialog.onCreate(Al ertDialog.java:423) 在android.app.Dialog.dispatchOnCreate(Dialog.java:394) 在android.app.Dialog.show(Dialog.java:295) 在android.app.DialogFragment.onStart(DialogFragment。 (FragmentManager.java:490) at android.app.Fragment.performStart(Fragment.java:2244) at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1002) at android.app.FragmentManagerImpl.moveToState(FragmentManager.java: 1148) at android.app.BackStackRecord.run(BackStackRecord.java:793) at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1535) at android.app.FragmentManagerImpl $ 1.run(FragmentManager.java:482 ) at android.os.Handler.handleCallback(Handler.java:739)在android.app.ActivityThread.main(ActivityThread.java:5417) at android.os.Looper.loop(Looper.java:148) at android.os.Handler.dispatchMessage(Handler.java:95) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit .java:616)

你知道它是什麼引起的?我該如何解決它?

+0

我沒有setupView()代碼,我認爲它是由Android庫提供的 – michalsol

回答

2

我設法解決這個問題。

我不得不改變

import android.app.alertdialog; 

import android.support.v7.app.alertdialog; 

也許有一些類型,因爲棉花糖版本的變化,當我們不小心足夠的瞭解使用標準/支持版本導致問題的圖書館。

0

嘗試在LinearLayout或RelativeLayout中添加NumberPicker,然後將對話框視圖設置爲LinearLayout或RelativeLayout。

編輯: 你可以嘗試讓你的NumberPicker佈局XML內,它充氣,並使用此在的setView方法調用

+0

不幸的是,它沒有幫助。我仍然收到錯誤消息。 – michalsol

+0

如果你註釋掉builder.setView(np);你仍然有錯誤? – mmcoder10

+0

請檢查我的編輯,看看它是否能解決您的問題。 – mmcoder10

2

這意味着你搞砸了alertDialogStyle - 它從那裏讀取佈局res id,如果它沒有加載正確的佈局,它將NPE。

相關問題