2012-12-06 75 views
0

我需要一点帮助。我已经构建了一个自定义警报对话框,其中包含两个日期选择器(从 - 到)。我正在从xml文件中为警报扩展布局,并且当我试图获取日期值时,我的程序会兑现。以下是代码:自定义从AlertDialog

  View fromToLayout = (View)getLayoutInflater().inflate(R.layout.from_to_layout, null); 
     final DatePicker fromPicker = (DatePicker) findViewById(R.id.dpFrom); 
     final DatePicker toPicker = (DatePicker) findViewById(R.id.dpTo); 

     AlertDialog alert = new AlertDialog.Builder(context).create(); 

      alert.setMessage("Insert Interval:");     
      alert.setView(fromToLayout,0,0,0,20); 
      alert.setButton(DialogInterface.BUTTON_POSITIVE,"Ok", new DialogInterface.OnClickListener() 
      { 

       @SuppressWarnings("deprecation") 
       public void onClick(DialogInterface dialog, int which) 
        { 
        // TODO Auto-generated method stub 

         Date dateFrom = new Date(fromPicker.getYear()-1990, fromPicker.getMonth(),fromPicker.getDayOfMonth()); 
         Date dateTo = new Date(toPicker.getYear() - 1990,toPicker.getMonth(),toPicker.getDayOfMonth()); 

         SimpleDateFormat isoFormat = new SimpleDateFormat("yyyyMMdd",Locale.US); 
         SimpleDateFormat dispalyFormat = new SimpleDateFormat("dd-MM-yyyy",Locale.US); 

         String fromDisplay = dispalyFormat.format(dateFrom); 
         String toDisplay = dispalyFormat.format(dateTo); 
         String fromValue = isoFormat.format(dateFrom); 
         String toValue = isoFormat.format(dateTo); 

         CashInInfoActivity.this.setTitle("Cash In " + fromDisplay + " - " + toDisplay);      
         DownloadCashInAsyncTask task = new DownloadCashInAsyncTask(context); 
         task.execute(fromValue,toValue); 

         return; 
        } 
      }); 

      alert.setButton(DialogInterface.BUTTON_NEGATIVE,"Cancel", new DialogInterface.OnClickListener() 
      { 

      public void onClick(DialogInterface dialog, int which) { 
       // TODO Auto-generated method stub 
       return; 
       } 
      }); 

      alert.show(); 

我在行得到NullPointerException异常:Date dateFrom = new Date(fromPicker.getYear()-1990, fromPicker.getMonth(),fromPicker.getDayOfMonth());

登录:

12-06 11:01:48.919: E/AndroidRuntime(24121): FATAL EXCEPTION: main 
12-06 11:01:48.919: E/AndroidRuntime(24121): java.lang.NullPointerException 
12-06 11:01:48.919: E/AndroidRuntime(24121): at com.example.denandroidapp.CashInInfoActivity$1.onClick(CashInInfoActivity.java:98) 
12-06 11:01:48.919: E/AndroidRuntime(24121): at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:159) 
12-06 11:01:48.919: E/AndroidRuntime(24121): at android.os.Handler.dispatchMessage(Handler.java:99) 
12-06 11:01:48.919: E/AndroidRuntime(24121): at android.os.Looper.loop(Looper.java:123) 
12-06 11:01:48.919: E/AndroidRuntime(24121): at android.app.ActivityThread.main(ActivityThread.java:3687) 
12-06 11:01:48.919: E/AndroidRuntime(24121): at java.lang.reflect.Method.invokeNative(Native Method) 
12-06 11:01:48.919: E/AndroidRuntime(24121): at java.lang.reflect.Method.invoke(Method.java:507) 
12-06 11:01:48.919: E/AndroidRuntime(24121): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867) 
12-06 11:01:48.919: E/AndroidRuntime(24121): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625) 
12-06 11:01:48.919: E/AndroidRuntime(24121): at dalvik.system.NativeStart.main(Native Method) 

你知道什么我'做错了THX

+0

发布错误logcat。 –

+0

检查'onPicker'和'toPicker'在'onClick'方法中是否为空。他们是 – vasart

+0

,但我不知道为什么。 –

回答

1

你得到空指针异常的 “fromPicker”,相同的异常也将适用于 “toPicker” 也。

原因的例外是:

  • 要动态充气布局和你想要的DatePicker的参考。
  • 记住,当你不断膨胀动态任何布局,并希望获取它的控制,那么你必须调用findViewById与视图的对象,像下面

View fromToLayout = (View)getLayoutInflater().inflate(R.layout.from_to_layout, null); 
final DatePicker fromPicker = (DatePicker) fromToLayout.findViewById(R.id.dpFrom); 
final DatePicker toPicker = (DatePicker) fromToLayout.findViewById(R.id.dpTo); 
1

尝试?变化:

final DatePicker fromPicker = (DatePicker) findViewById(R.id.dpFrom); 
final DatePicker toPicker = (DatePicker) findViewById(R.id.dpTo); 

到:

final DatePicker fromPicker = (DatePicker) fromToLayout.findViewById(R.id.dpFrom); 
final DatePicker toPicker = (DatePicker) fromToLayout.findViewById(R.id.dpTo);