2016-11-25 97 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