2016-06-05 6 views
0

Вот мой файл строки:Как я могу получить текст из Charsequence?

<resources> 
<string name="app_name">Name</string> 
    <string name="vp_locations">Locations</string> 
    <string name="vp_client_area">Client Area</string> 
    <string name="vp_menu">Menu</string> 
</resources> 

И я хотел бы получить программно все эти строки, я создал массив, чтобы получить все строковые значения, что мне нужно:

private CharSequence[] tbTitles = { 
     getResources().getText(R.string.vp_locations), 
     getResources().getText(R.string.vp_client_area), 
     getResources().getText(R.string.vp_menu), 
}; 

Теперь я хотел бы чтобы знать, как я могу получить значение, когда я делаю это:

textView.setText(tbTitles[0]); 

применение врежется

я уже конвертировать из CharSequence в строку, как это сделать:

textView.setText(tbTitle[0].toString()); 

Но ничто не похоже на работу. Можете ли вы, ребята, сказать мне, что я делаю неправильно?

Log:

java.lang.NullPointerException на android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2311) на android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2436) at android.app.ActivityThread.access $ 800 (ActivityThread.java:157) at android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1374) на android.os.Handler.dispatchMessage (Handler.java:110) на android.os.Looper.loop (Looper.java:193) на android.app.ActivityThread.main (ActivityThread.java:5398) на java .lang.reflect.Method.invokeNative (Native Method) at java.lang.reflect.Method.invoke (Method.java:515) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java : 940) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:756) at dalvik.system.NativeStart.main (родной метод) Вызвано: java.lang.NullPointerException на android.content.ContextWrapper.getResources (ContextWrapper.java:89) на android.view.ContextThemeWrapper.getResources (ContextThemeWrapper.java:78) на com.example.rd.app.Interface.MainActivity. (MainActivity .java: 36) at java.lang.Class.newInstanceImpl (родной метод) at java.lang.Class.newInstance (Class.java:1215) at android.app.Instrumentation.newActivity (Instrumentation.java:1061) по адресу android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2302) по адресу android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2436) at android.app.ActivityThread.access $ 800 (ActivityThread.java:157) at android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1374) на android.os.Handler.dispatchMessage (Handler.java: 110) на android.os.Looper.loop (Looper.java:193) на android.app.ActivityThread.main (ActivityThread.java:5398) на java.lang.reflect.Method.invokeNative (собственный метод) на java.lang.reflect.Method.invoke (Method.java:515) в com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:940) в com.android.internal. os.ZygoteInit.main (ZygoteInit.java:756) на dalvik.system.NativeStart.main (Родной метод)

Спасибо.

+0

Если он сработает, пожалуйста, поместите аварийный журнал. Там могут быть разные причины для сбоя, например, 'textView' имеет значение NULL. – Rohit5k2

+0

Почему у вас есть массив 'CharSequence []', а не 'string []', если вам нужен массив строк? Вы можете сделать 'getResources(). GetString (resourceId)' – Nikola

+0

Я уже пытался использовать String [], но мое приложение продолжает сбой –

ответ

0

Вы не можете позвонить getResources() из инициализатора поля, как вы делаете в

private CharSequence[] tbTitles = { 
    getResources().getText(R.string.vp_locations), 
    getResources().getText(R.string.vp_client_area), 
    getResources().getText(R.string.vp_menu), 
}; 

В данный момент контекст пока не установлен. Это сделано после звонка onCreate.

Измените код, как этот

private CharSequence[] tbTitles = new CharSequence[3]; 

и добавить в onCreate

tbTitles = new CharSequence[]{ 
    getResources().getText(R.string.vp_locations), 
    getResources().getText(R.string.vp_client_area), 
    getResources().getText(R.string.vp_menu), 
}; 

И, наконец, использовать массив, как этот

textView.setText(tbTitle[0].toString()); 

Примечание: Если вы используете этот массив только в одном методе, тогда вы n просто переместите декларацию внутри этого метода.

+0

Спасибо, сейчас работает, вы просто забыли завершить эту строку на create, tbTitles = new CharSequence [] {...} –

0

Я думаю, что вы делаете ненужную работу.

Вы можете объявить массив в файле XML, как это:

<string-array name="vp_arr"> 
    <item>Locations</item> 
    <item>Client Area</item> 
    <item>Menu</item> 
</string-array> 

Получить его в своем классе:

String[] tbTitles= getResources().getStringArray(R.array.vp_arr); 

И установить его в вашем TextView:

textView.setText(tbTitles[0]); 
Смежные вопросы