【问题标题】:How can I get the text from Charsequence?如何从 Charsequence 获取文本?
【发布时间】:2016-10-05 08:01:50
【问题描述】:

这是我的字符串文件:

<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]);

应用程序崩溃

我已经从字符序列转换为字符串,这样做:

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

但似乎没有任何效果。你们能告诉我我做错了什么吗?

日志:

java.lang.NullPointerException 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2311) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2436) 在 android.app.ActivityThread.access$800(ActivityThread.java:157) 在 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) 在 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(本机方法) 引起: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) 在 java.lang.Class.newInstanceImpl(本机方法) 在 java.lang.Class.newInstance(Class.java:1215) 在 android.app.Instrumentation.newActivity(Instrumentation.java:1061) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2302) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2436) 在 android.app.ActivityThread.access$800(ActivityThread.java:157) 在 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) 在 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(Native Method)

谢谢。

【问题讨论】:

  • 如果它崩溃,请输入崩溃日志。崩溃可能有不同的原因,例如 textView 为空。
  • 当你想要一个字符串数组时,为什么你有一个CharSequence[] 数组而不是string[]?你可以做getResources().getString(resourceId)
  • 我已经尝试过使用 String[] 但我的应用总是崩溃
  • 请看我的回答。您的错误与字符串转换无关。

标签: android


【解决方案1】:

您不能像在其中所做的那样从字段初始化程序中调用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());

注意:如果您只在一种方法中使用此数组,那么您只需将声明移动到该方法中即可。

【讨论】:

  • 谢谢,现在正在工作,只是忘记在创建时完成这一行,tbTitles = new CharSequence[]{ ... }
【解决方案2】:

我认为你在做不必要的工作。

您可以像这样在 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]);

【讨论】:

    猜你喜欢
    • 2019-01-05
    • 1970-01-01
    • 1970-01-01
    • 2011-06-16
    • 2015-04-05
    • 2012-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多