У меня очень странная проблема с моим приложением для Android. Каждый раз, когда я добавляю строковый массив в мой strings.xml (или любой другой файл в res / values /), моя программа падает при запуске. Я знаю, с абсолютной уверенностью, что это то, что его сбивает (так как всякий раз, когда я удаляю его, он работает нормально). Во всяком случае, вот код XML, который вызывает сбой:
<string-array name="main_list">
<item>Collections</item>
<item>Requests</item>
<item>Forums</item>
</string-array>
Что-то не так с форматированием? Это внутри тегов "ресурсов" и всего остального. Вот полный XML-файл:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Activity Names -->
<string name="app_name">MyFavs</string>
<!-- Login Vars -->
<string name="username_login_field">Username</string>
<string name="password_login_field">Password</string>
<string name="login_btn">Login!</string>
<string name="remember_login_tag">Save Login Info</string>
<string name="no_username_password">You must supply a username and password</string>
<string name="sign_in_cancelled">Sign-in cancelled</string>
<string name="sign_in_progress">Signing in...</string>
<string name="invalid_username_password_alert_title">Error</string>
<string name="invalid_username_password_alert_btn">Ok</string>
<string name="menu_forgotten_password">Forgot Password?</string>
<!-- ForgotPasswd Vars -->
<string name="forgotten_pass_field">Email</string>
<string name="forgotten_pass_btn">Recover Account</string>
<string name="forgot_passwd_progress">Recovering account...</string>
<string name="invalid_forgot_passwd_title">Recover Account</string>
<string name="invalid_forgot_passwd_btn">Ok</string>
<string name="no_email">You must supply a valid email</string>
<string name="recover_cancelled">Recover cancelled</string>
<string name="menu_home">Home</string>
<string-array name="main_list">
<item>Collections</item>
<item>Requests</item>
<item>Forums</item>
</string-array>
</resources>
Опять же, удаление раздела "string-array" внизу приводит к тому, что программа работает, но добавление приводит к сбою.
Вот журнал аварий logcat (хотя он мало помогает):
W/dalvikvm( 849): threadid=3: thread exiting with uncaught exception (group=0x4001b188)
E/AndroidRuntime( 849): Uncaught handler: thread main exiting due to uncaught exception
E/AndroidRuntime( 849): java.lang.RuntimeException: Unable to start activity ComponentInfo{org.myfavs.droid/org.myfavs.droid.login}: java.lang.NullPointerException
E/AndroidRuntime( 849): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496)
E/AndroidRuntime( 849): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
E/AndroidRuntime( 849): at android.app.ActivityThread.access$2200(ActivityThread.java:119)
E/AndroidRuntime( 849): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
E/AndroidRuntime( 849): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime( 849): at android.os.Looper.loop(Looper.java:123)
E/AndroidRuntime( 849): at android.app.ActivityThread.main(ActivityThread.java:4363)
E/AndroidRuntime( 849): at java.lang.reflect.Method.invokeNative(NativeMethod)
E/AndroidRuntime( 849): at java.lang.reflect.Method.invoke(Method.java:521)
E/AndroidRuntime( 849): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
E/AndroidRuntime( 849): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
E/AndroidRuntime( 849): at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime( 849): Caused by: java.lang.NullPointerException
E/AndroidRuntime( 849): at org.myfavs.droid.login.onCreate(login.java:32)
E/AndroidRuntime( 849): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
E/AndroidRuntime( 849): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)
E/AndroidRuntime( 849): ... 11 more
I/Process ( 51): Sending signal. PID: 849 SIG: 3
Если у кого-то есть идеи, поделитесь ими. Я работал над этим довольно долго, и я уверен, что это глупая ошибка, но мне просто нужна другая пара глаз. Я был бы готов попробовать любое возможное решение.
EDIT:
Я удалил каждую ссылку на ресурс строкового массива, и простое включение ресурса вызывает сбой. Я нигде не упоминаю об этом, поэтому проблема не в этом.
В соответствии с просьбой, вот мой onCreate для "входа в систему", хотя я давно не трогал этот код, и он всегда работал:
public void onCreate(Bundle savedInstanceState)
{
Log.d("Login","onCreate called");
super.onCreate(savedInstanceState);
Interactor.create(this);
setContentView(R.layout.login);
((EditText)findViewById(R.id.username)).setText(Interactor.getDB().getSetting("username"));
EditText pwd = (EditText)findViewById(R.id.password);
pwd.setText(Interactor.getDB().getSetting("password"));
if (Interactor.getDB().getSetting("save_login").equals("yes"))
((CheckBox)findViewById(R.id.remember_login)).setChecked(true);
// Treat "Send" soft-button on keyboard as a button click
pwd.setOnEditorActionListener(new android.widget.TextView.OnEditorActionListener()
{
public boolean onEditorAction(TextView v, int actionId, KeyEvent event)
{
if (actionId == EditorInfo.IME_ACTION_SEND)
((Button)findViewById(R.id.login_btn)).performClick();
return true;
}
});
}
Исключение выдается просто путем включения ресурса в res / values, даже не обращаясь к нему. Вот почему это так странно для меня ...
РЕДАКТИРОВАНИЕ РЕДАКТИРОВАНИЯ:
Джон Скит может быть чем-то занят. Включая ресурс строкового массива и комментируя строку 32 в onCreate логина (как я уже сказал, какая строка в комментариях выше), приложение снова работает. Итак, добавление строки-массива как-то разрывает эту строку? Любая помощь в том, почему добавление ресурса строкового массива сломало бы это, но это работает на 100% без добавления ресурса?