2016-11-25 95 views
1

我在Android上使用SimpleDateFormat。我用API 24測試過它,它工作。當我嘗試在API 16上使用它時,它崩潰。 我搜查了互聯網,我發現有人說這可能是因爲一個錯誤的導入聲明(import android.icu.text.SimpleDateFormat),但我已經在使用import java.text.SimpleDateFormatAndroid:SimpleDateFormat給出API錯誤

我的代碼(它崩潰的onclickButton):

import java.text.SimpleDateFormat; 

public class MainActivity extends AppCompatActivity { 

SimpleDateFormat sdf; 
String date; 

    public void onclickButton (View view) { 

     Calendar c = Calendar.getInstance(); 
     sdf = new SimpleDateFormat("dd MM YYYY"); 
     sdf.setTimeZone(TimeZone.getTimeZone("Europe/Berlin")); 
     date = sdf.format(c.getTime()); 
    } 
... 
} 

堆棧跟蹤:

W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0xb111d228) 
E/AndroidRuntime: FATAL EXCEPTION: main 
       java.lang.IllegalStateException: Could not execute method for android:onClick 
        at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293) 
        at android.view.View.performClick(View.java:4084) 
        at android.view.View$PerformClick.run(View.java:16966) 
        at android.os.Handler.handleCallback(Handler.java:615) 
        at android.os.Handler.dispatchMessage(Handler.java:92) 
        at android.os.Looper.loop(Looper.java:137) 
        at android.app.ActivityThread.main(ActivityThread.java:4745) 
        at java.lang.reflect.Method.invokeNative(Native Method) 
        at java.lang.reflect.Method.invoke(Method.java:511) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
        at dalvik.system.NativeStart.main(Native Method) 
       Caused by: java.lang.reflect.InvocationTargetException 
        at java.lang.reflect.Method.invokeNative(Native Method) 
        at java.lang.reflect.Method.invoke(Method.java:511) 
        at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288) 
        at android.view.View.performClick(View.java:4084)  
        at android.view.View$PerformClick.run(View.java:16966)  
        at android.os.Handler.handleCallback(Handler.java:615)  
        at android.os.Handler.dispatchMessage(Handler.java:92)  
        at android.os.Looper.loop(Looper.java:137)  
        at android.app.ActivityThread.main(ActivityThread.java:4745)  
        at java.lang.reflect.Method.invokeNative(Native Method)  
        at java.lang.reflect.Method.invoke(Method.java:511)  
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)  
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)  
        at dalvik.system.NativeStart.main(Native Method)  
       Caused by: java.lang.IllegalArgumentException: Unknown pattern character 'Y' 
        at java.text.SimpleDateFormat.validateFormat(SimpleDateFormat.java:268) 
        at java.text.SimpleDateFormat.validatePattern(SimpleDateFormat.java:323) 
        at java.text.SimpleDateFormat.<init>(SimpleDateFormat.java:369) 
        at java.text.SimpleDateFormat.<init>(SimpleDateFormat.java:253) 
        at com.jonathan_tilly.adventskalender.MainActivity.onclickButton(MainActivity.java:34) 
        at java.lang.reflect.Method.invokeNative(Native Method)  
        at java.lang.reflect.Method.invoke(Method.java:511)  
        at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)  
        at android.view.View.performClick(View.java:4084)  
        at android.view.View$PerformClick.run(View.java:16966)  
        at android.os.Handler.handleCallback(Handler.java:615)  
        at android.os.Handler.dispatchMessage(Handler.java:92)  
        at android.os.Looper.loop(Looper.java:137)  
        at android.app.ActivityThread.main(ActivityThread.java:4745)  
        at java.lang.reflect.Method.invokeNative(Native Method)  
        at java.lang.reflect.Method.invoke(Method.java:511)  
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)  
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)  
        at dalvik.system.NativeStart.main(Native Method)  

任何幫助表示讚賞!

+1

顯示堆棧跟蹤。另外,我不認爲你可以在類之外聲明變量。 – nbokmans

+0

你是對的,我編輯它。我只在複製代碼時犯了錯誤。我還添加了堆棧跟蹤 – nox

+0

嘗試使用'dd MM yyyy' –

回答

0

可能是因爲你正在向類聲明變量。嘗試:

import java.text.SimpleDateFormat; 

public class MainActivity extends AppCompatActivity { 

    SimpleDateFormat sdf; 
    String date; 

    public void onclickButton (View view) { 

     Calendar c = Calendar.getInstance(); 
     sdf = new SimpleDateFormat("dd MM yyyy"); 
     sdf.setTimeZone(TimeZone.getTimeZone("Europe/Berlin")); 
     date = sdf.format(c.getTime()); 
    } 
... 

}

+0

謝謝你的回答。你是對的,那是我把代碼複製到我的帖子時犯的一個錯誤。我編輯它上面:)我仍然有這個糾正的問題。 – nox

+1

查看Stacktrace中的行:'由:java.lang.IllegalArgumentException:Unknown pattern character'Y''引起。嘗試將YYYY更改爲yyyy(小寫)。 – fsnasser

-1

我認爲你應該使用

new SimpleDateFormat("dd MM yyyy"); 

而不是

new SimpleDateFormat("dd MM YYYY"); 

它爲我

和Java醫生說YYYY是週年 Here