2016-11-25 5 views
1

Я использую SimpleDateFormat на Android. Я тестировал его с API 24, и он работал. Когда я пытаюсь использовать его на API 16, он сбой. Я искал в Интернете, и я обнаружил, что люди говорят, что это может быть из-за неправильного оператора импорта (import android.icu.text.SimpleDateFormat), но я уже использую import java.text.SimpleDateFormat.Android: 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()); 
    } 
... 
} 

StackTrace:

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

Вы правы, я его отредактировал. Я только сделал ошибку, когда я скопировал код. Я также добавил stacktrace – 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: 'Caused by: java.lang.IllegalArgumentException: Неизвестный символ шаблона 'Y''. Попробуйте изменить YYYY на yyyy (нижний регистр). – fsnasser

-1

Я думаю, вы должны использовать

new SimpleDateFormat("dd MM yyyy"); 

Вместо

new SimpleDateFormat("dd MM YYYY"); 

Он работал для меня

И ява док говорит YYYY для недельный год Here

Смежные вопросы