2012-08-12 75 views
0

我想在我的Android應用程序中使用DatePicker。當我把它添加到我的佈局,我得到這個消息:DatePicker不起作用

The following classes could not be instantiated: 
- android.widget.DatePicker (Open Class, Show Error Log) 
See the Error Log (Window > Show View) for more details. 

所以我在錯誤日誌看,這是我所看到的:

android.widget.DatePicker failed to instantiate. 
java.lang.NoClassDefFoundError: java/nio/charset/Charsets 
    at android.net.Uri.decode(Uri.java:1927) 
    at android.net.Uri$AbstractPart.getDecoded(Uri.java:1957) 
    at android.net.Uri$StringUri.getAuthority(Uri.java:579) 
    at android.provider.Settings$NameValueCache.getString(Settings.java:727) 
    at android.provider.Settings$System.getString(Settings.java:846) 
    at android.text.format.DateFormat.getDateFormatString(DateFormat.java:393) 
    at android.text.format.DateFormat.getDateFormatOrder(DateFormat.java:364) 
    at android.widget.DatePicker.reorderSpinners(DatePicker.java:511) 
    at android.widget.DatePicker.<init>(DatePicker.java:280) 
    at android.widget.DatePicker.<init>(DatePicker.java:145) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) 
    at java.lang.reflect.Constructor.newInstance(Unknown Source) 
    at com.android.ide.eclipse.adt.internal.editors.layout.ProjectCallback.instantiateClass(ProjectCallback.java:402) 
    at com.android.ide.eclipse.adt.internal.editors.layout.ProjectCallback.loadView(ProjectCallback.java:166) 
    at android.view.BridgeInflater.loadCustomView(BridgeInflater.java:207) 
    at android.view.BridgeInflater.createViewFromTag(BridgeInflater.java:135) 
    at android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:746) 
    at android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:64) 
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:718) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:489) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:372) 
    at com.android.layoutlib.bridge.impl.RenderSessionImpl.inflate(RenderSessionImpl.java:321) 
    at com.android.layoutlib.bridge.Bridge.createSession(Bridge.java:331) 
    at com.android.ide.common.rendering.LayoutLibrary.createSession(LayoutLibrary.java:325) 
    at com.android.ide.eclipse.adt.internal.editors.layout.gle2.RenderService.createRenderSession(RenderService.java:372) 
    at com.android.ide.eclipse.adt.internal.editors.layout.gle2.GraphicalEditorPart.renderWithBridge(GraphicalEditorPart.java:1640) 
    at [SNIPPED FOR LENGTH; SEE REVISION HISTORY FOR FULL TRACE -ed] 

這究竟是爲什麼?

+1

?顯示你的代碼 – Furqi 2012-08-12 19:31:34

+0

在那裏顯示你的代碼 – eoghanm 2012-08-13 11:56:27

回答

0
<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <Button 
     android:id="@+id/btnChangeDate" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Change Date" /> 

    <TextView 
     android:id="@+id/lblDate" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Current Date (M-D-YYYY): " 
     android:textAppearance="?android:attr/textAppearanceLarge" /> 

    <TextView 
     android:id="@+id/tvDate" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="" 
     android:textAppearance="?android:attr/textAppearanceLarge" /> 

    <DatePicker 
     android:id="@+id/dpResult" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 
</LinearLayout> 

import java.util.Calendar; 
import android.app.Activity; 
import android.app.DatePickerDialog; 
import android.app.Dialog; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.DatePicker; 
import android.widget.TextView; 

public class MyAndroidAppActivity extends Activity { 

    private TextView tvDisplayDate; 
    private DatePicker dpResult; 
    private Button btnChangeDate; 

    private int year; 
    private int month; 
    private int day; 

    static final int DATE_DIALOG_ID = 999; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     setCurrentDateOnView(); 
     addListenerOnButton(); 

    } 

    // display current date 
    public void setCurrentDateOnView() { 

     tvDisplayDate = (TextView) findViewById(R.id.tvDate); 
     dpResult = (DatePicker) findViewById(R.id.dpResult); 

     final Calendar c = Calendar.getInstance(); 
     year = c.get(Calendar.YEAR); 
     month = c.get(Calendar.MONTH); 
     day = c.get(Calendar.DAY_OF_MONTH); 

     // set current date into textview 
     tvDisplayDate.setText(new StringBuilder() 
      // Month is 0 based, just add 1 
      .append(month + 1).append("-").append(day).append("-") 
      .append(year).append(" ")); 

     // set current date into datepicker 
     dpResult.init(year, month, day, null); 

    } 

    public void addListenerOnButton() { 

     btnChangeDate = (Button) findViewById(R.id.btnChangeDate); 

     btnChangeDate.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       showDialog(DATE_DIALOG_ID); 

      } 

     }); 

    } 

    @Override 
    protected Dialog onCreateDialog(int id) { 
     switch (id) { 
     case DATE_DIALOG_ID: 
      // set date picker as current date 
      return new DatePickerDialog(this, datePickerListener, 
         year, month,day); 
     } 
     return null; 
    } 

    private DatePickerDialog.OnDateSetListener datePickerListener 
       = new DatePickerDialog.OnDateSetListener() { 

     // when dialog box is closed, below method will be called. 
     public void onDateSet(DatePicker view, int selectedYear, 
       int selectedMonth, int selectedDay) { 
      year = selectedYear; 
      month = selectedMonth; 
      day = selectedDay; 

      // set selected date into textview 
      tvDisplayDate.setText(new StringBuilder().append(month + 1) 
       .append("-").append(day).append("-").append(year) 
       .append(" ")); 

      // set selected date into datepicker also 
      dpResult.init(year, month, day, null); 

     } 
    }; 

} 

閱讀該代碼具有u增加它的活動,可能會對你有所幫助